From 34800fab7bffecbc9fc7c5f76ed54cabf11de3a4 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Wed, 23 Dec 2020 12:58:47 -0500 Subject: [PATCH] update examples with linting --- .eslintrc.json | 22 ++-- build.js | 10 +- dist/face-api.esm-nobundle.js.map | 6 +- dist/face-api.esm-nobundle.json | 124 +++++++++--------- dist/face-api.esm.js.map | 2 +- dist/face-api.esm.json | 124 +++++++++--------- dist/face-api.js.map | 2 +- dist/face-api.json | 124 +++++++++--------- dist/face-api.node-gpu.js.map | 4 +- dist/face-api.node-gpu.json | 124 +++++++++--------- dist/face-api.node.js.map | 4 +- dist/face-api.node.json | 124 +++++++++--------- dist/tfjs.esm.json | 6 +- example/node-multiprocess-worker.js | 1 + example/node-singleprocess.js | 1 + src/NeuralNetwork.ts | 2 +- src/ageGenderNet/AgeGenderNet.ts | 2 +- .../extractParamsFromWeigthMap.ts | 2 +- src/ageGenderNet/types.ts | 2 +- src/common/convLayer.ts | 2 +- src/common/depthwiseSeparableConv.ts | 2 +- src/common/extractConvParamsFactory.ts | 2 +- src/common/extractFCParamsFactory.ts | 2 +- .../extractSeparableConvParamsFactory.ts | 2 +- src/common/fullyConnectedLayer.ts | 2 +- src/common/loadConvParamsFactory.ts | 2 +- src/common/types.ts | 2 +- src/dom/NetInput.ts | 2 +- src/dom/extractFaceTensors.ts | 2 +- src/dom/imageTensorToCanvas.ts | 2 +- src/dom/loadWeightMap.ts | 2 +- src/dom/types.ts | 2 +- src/faceExpressionNet/FaceExpressionNet.ts | 2 +- .../FaceFeatureExtractor.ts | 2 +- .../TinyFaceFeatureExtractor.ts | 2 +- src/faceFeatureExtractor/denseBlock.ts | 2 +- .../extractParamsFromWeigthMap.ts | 2 +- .../extractParamsFromWeigthMapTiny.ts | 2 +- src/faceFeatureExtractor/types.ts | 2 +- src/faceLandmarkNet/FaceLandmark68NetBase.ts | 2 +- src/faceProcessor/FaceProcessor.ts | 2 +- .../extractParamsFromWeigthMap.ts | 2 +- src/faceProcessor/util.ts | 2 +- src/faceRecognitionNet/FaceRecognitionNet.ts | 2 +- src/faceRecognitionNet/convLayer.ts | 2 +- src/faceRecognitionNet/extractParams.ts | 2 +- .../extractParamsFromWeigthMap.ts | 2 +- src/faceRecognitionNet/residualLayer.ts | 2 +- src/faceRecognitionNet/scaleLayer.ts | 2 +- src/faceRecognitionNet/types.ts | 2 +- src/globalApi/DetectFaceLandmarksTasks.ts | 2 +- src/globalApi/PredictAgeAndGenderTask.ts | 2 +- src/globalApi/PredictFaceExpressionsTask.ts | 2 +- .../extractFacesAndComputeResults.ts | 2 +- src/index.ts | 2 +- src/ops/normalize.ts | 2 +- src/ops/padToSquare.ts | 2 +- src/ssdMobilenetv1/SsdMobilenetv1.ts | 2 +- src/ssdMobilenetv1/boxPredictionLayer.ts | 2 +- src/ssdMobilenetv1/extractParams.ts | 2 +- .../extractParamsFromWeigthMap.ts | 2 +- src/ssdMobilenetv1/mobileNetV1.ts | 2 +- src/ssdMobilenetv1/nonMaxSuppression.ts | 2 +- src/ssdMobilenetv1/outputLayer.ts | 2 +- src/ssdMobilenetv1/pointwiseConvLayer.ts | 2 +- src/ssdMobilenetv1/predictionLayer.ts | 2 +- src/ssdMobilenetv1/types.ts | 2 +- src/tfjs/tf-browser.js | 47 ------- src/tfjs/tf-browser.ts | 7 + src/tfjs/{tf-node-gpu.js => tf-node-gpu.ts} | 0 src/tfjs/{tf-node.js => tf-node.ts} | 0 src/tinyFaceDetector/TinyFaceDetector.ts | 2 +- src/tinyYolov2/TinyYolov2.ts | 2 +- src/tinyYolov2/TinyYolov2Base.ts | 2 +- src/tinyYolov2/convWithBatchNorm.ts | 2 +- src/tinyYolov2/depthwiseSeparableConv.ts | 2 +- src/tinyYolov2/extractParams.ts | 2 +- src/tinyYolov2/extractParamsFromWeigthMap.ts | 2 +- src/tinyYolov2/leaky.ts | 2 +- src/tinyYolov2/types.ts | 2 +- src/utils/index.ts | 2 +- src/xception/TinyXception.ts | 2 +- src/xception/extractParamsFromWeigthMap.ts | 2 +- tsconfig.json | 5 +- types/NeuralNetwork.d.ts | 2 +- types/ageGenderNet/AgeGenderNet.d.ts | 8 +- .../extractParamsFromWeigthMap.d.ts | 2 +- types/ageGenderNet/types.d.ts | 2 +- types/common/convLayer.d.ts | 2 +- types/common/depthwiseSeparableConv.d.ts | 2 +- types/common/fullyConnectedLayer.d.ts | 2 +- types/common/types.d.ts | 2 +- types/dom/NetInput.d.ts | 2 +- types/dom/extractFaceTensors.d.ts | 2 +- types/dom/imageTensorToCanvas.d.ts | 2 +- types/dom/loadWeightMap.d.ts | 2 +- types/dom/types.d.ts | 2 +- .../faceExpressionNet/FaceExpressionNet.d.ts | 2 +- .../FaceFeatureExtractor.d.ts | 6 +- .../TinyFaceFeatureExtractor.d.ts | 6 +- types/faceFeatureExtractor/denseBlock.d.ts | 2 +- .../extractParamsFromWeigthMap.d.ts | 2 +- .../extractParamsFromWeigthMapTiny.d.ts | 2 +- types/faceFeatureExtractor/types.d.ts | 2 +- .../FaceLandmark68NetBase.d.ts | 2 +- types/faceProcessor/FaceProcessor.d.ts | 8 +- .../extractParamsFromWeigthMap.d.ts | 2 +- types/faceProcessor/util.d.ts | 2 +- .../FaceRecognitionNet.d.ts | 6 +- types/faceRecognitionNet/convLayer.d.ts | 2 +- .../extractParamsFromWeigthMap.d.ts | 2 +- types/faceRecognitionNet/residualLayer.d.ts | 2 +- types/faceRecognitionNet/scaleLayer.d.ts | 2 +- types/faceRecognitionNet/types.d.ts | 2 +- .../extractFacesAndComputeResults.d.ts | 2 +- types/index.d.ts | 2 +- types/ops/normalize.d.ts | 2 +- types/ops/padToSquare.d.ts | 2 +- types/ssdMobilenetv1/SsdMobilenetv1.d.ts | 6 +- types/ssdMobilenetv1/boxPredictionLayer.d.ts | 2 +- .../extractParamsFromWeigthMap.d.ts | 2 +- types/ssdMobilenetv1/mobileNetV1.d.ts | 2 +- types/ssdMobilenetv1/nonMaxSuppression.d.ts | 2 +- types/ssdMobilenetv1/outputLayer.d.ts | 2 +- types/ssdMobilenetv1/pointwiseConvLayer.d.ts | 2 +- types/ssdMobilenetv1/predictionLayer.d.ts | 2 +- types/ssdMobilenetv1/types.d.ts | 2 +- types/tinyFaceDetector/TinyFaceDetector.d.ts | 2 +- types/tinyYolov2/TinyYolov2.d.ts | 2 +- types/tinyYolov2/TinyYolov2Base.d.ts | 6 +- types/tinyYolov2/convWithBatchNorm.d.ts | 2 +- types/tinyYolov2/depthwiseSeparableConv.d.ts | 2 +- .../extractParamsFromWeigthMap.d.ts | 2 +- types/tinyYolov2/leaky.d.ts | 2 +- types/tinyYolov2/types.d.ts | 2 +- types/utils/index.d.ts | 2 +- types/xception/TinyXception.d.ts | 6 +- .../xception/extractParamsFromWeigthMap.d.ts | 2 +- 138 files changed, 488 insertions(+), 521 deletions(-) delete mode 100644 src/tfjs/tf-browser.js create mode 100644 src/tfjs/tf-browser.ts rename src/tfjs/{tf-node-gpu.js => tf-node-gpu.ts} (100%) rename src/tfjs/{tf-node.js => tf-node.ts} (100%) diff --git a/.eslintrc.json b/.eslintrc.json index cf40a7a..8fa5716 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -30,18 +30,22 @@ }, "rules": { "max-len": [1, 275, 3], - "no-plusplus": "off", - "import/prefer-default-export": "off", - "node/no-unsupported-features/es-syntax": "off", - "import/no-cycle": "off", - "import/extensions": "off", - "node/no-missing-import": "off", - "no-underscore-dangle": "off", - "class-methods-use-this": "off", "camelcase": "off", + "class-methods-use-this": "off", + "import/extensions": "off", + "import/no-cycle": "off", + "import/prefer-default-export": "off", "no-await-in-loop": "off", "no-continue": "off", + "no-mixed-operators": "off", "no-param-reassign": "off", - "prefer-destructuring": "off" + "no-plusplus": "off", + "no-restricted-syntax": "off", + "no-return-assign": "off", + "no-underscore-dangle": "off", + "node/no-missing-import": "off", + "node/no-unsupported-features/es-syntax": "off", + "prefer-destructuring": "off", + "radix": "off" } } \ No newline at end of file diff --git a/build.js b/build.js index 3f3d33a..1917b9b 100644 --- a/build.js +++ b/build.js @@ -49,7 +49,7 @@ const common = { sourcemap: true, logLevel: 'error', target: 'es2018', - tsconfig: './tsconfig.json', + // tsconfig: './tsconfig.json', }; const targets = { @@ -58,7 +58,7 @@ const targets = { platform: 'node', format: 'cjs', metafile: 'dist/tfjs.esm.json', - entryPoints: ['src/tfjs/tf-node.js'], + entryPoints: ['src/tfjs/tf-node.ts'], outfile: 'dist/tfjs.esm.js', external: ['@tensorflow'], }, @@ -75,7 +75,7 @@ const targets = { tfjs: { platform: 'node', format: 'cjs', - entryPoints: ['src/tfjs/tf-node-gpu.js'], + entryPoints: ['src/tfjs/tf-node-gpu.ts'], outfile: 'dist/tfjs.esm.js', metafile: 'dist/tfjs.esm.json', external: ['@tensorflow'], @@ -93,7 +93,7 @@ const targets = { tfjs: { platform: 'browser', format: 'esm', - entryPoints: ['src/tfjs/tf-browser.js'], + entryPoints: ['src/tfjs/tf-browser.ts'], outfile: 'dist/tfjs.esm.js', metafile: 'dist/tfjs.esm.json', external: ['fs', 'buffer', 'util', '@tensorflow'], @@ -111,7 +111,7 @@ const targets = { tfjs: { platform: 'browser', format: 'esm', - entryPoints: ['src/tfjs/tf-browser.js'], + entryPoints: ['src/tfjs/tf-browser.ts'], outfile: 'dist/tfjs.esm.js', metafile: 'dist/tfjs.esm.json', external: ['fs', 'buffer', 'util'], diff --git a/dist/face-api.esm-nobundle.js.map b/dist/face-api.esm-nobundle.js.map index 317c083..b0d2ab4 100644 --- a/dist/face-api.esm-nobundle.js.map +++ b/dist/face-api.esm-nobundle.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../src/tfjs/tf-browser.js", "../src/env/isNodejs.ts", "../src/index.ts", "../src/draw/index.ts", "../src/draw/drawContour.ts", "../src/utils/index.ts", "../src/classes/Dimensions.ts", "../src/classes/Point.ts", "../src/classes/Box.ts", "../src/classes/BoundingBox.ts", "../src/classes/ObjectDetection.ts", "../src/classes/FaceDetection.ts", "../src/ops/iou.ts", "../src/ops/minBbox.ts", "../src/ops/nonMaxSuppression.ts", "../src/ops/normalize.ts", "../src/ops/padToSquare.ts", "../src/ops/shuffleArray.ts", "../src/ops/index.ts", "../src/classes/Rect.ts", "../src/classes/FaceLandmarks.ts", "../src/classes/FaceLandmarks5.ts", "../src/classes/FaceLandmarks68.ts", "../src/classes/FaceMatch.ts", "../src/classes/LabeledBox.ts", "../src/classes/LabeledFaceDescriptors.ts", "../src/classes/PredictedBox.ts", "../src/factories/WithFaceDetection.ts", "../src/env/createBrowserEnv.ts", "../src/env/createFileSystem.ts", "../src/env/createNodejsEnv.ts", "../src/env/isBrowser.ts", "../src/env/index.ts", "../src/dom/resolveInput.ts", "../src/dom/getContext2dOrThrow.ts", "../src/draw/DrawTextField.ts", "../src/draw/DrawBox.ts", "../src/draw/drawDetections.ts", "../src/faceExpressionNet/FaceExpressionNet.ts", "../src/dom/isMediaLoaded.ts", "../src/dom/awaitMediaLoaded.ts", "../src/dom/bufferToImage.ts", "../src/dom/getMediaDimensions.ts", "../src/dom/createCanvas.ts", "../src/dom/imageTensorToCanvas.ts", "../src/dom/isMediaElement.ts", "../src/dom/NetInput.ts", "../src/dom/imageToSquare.ts", "../src/dom/toNetInput.ts", "../src/dom/extractFaces.ts", "../src/dom/extractFaceTensors.ts", "../src/dom/fetchOrThrow.ts", "../src/dom/fetchImage.ts", "../src/dom/fetchJson.ts", "../src/dom/fetchNetWeights.ts", "../src/dom/loadWeightMap.ts", "../src/common/getModelUris.ts", "../src/dom/matchDimensions.ts", "../src/faceFeatureExtractor/FaceFeatureExtractor.ts", "../src/NeuralNetwork.ts", "../src/faceFeatureExtractor/denseBlock.ts", "../src/common/depthwiseSeparableConv.ts", "../src/common/convLayer.ts", "../src/common/disposeUnusedWeightTensors.ts", "../src/common/extractConvParamsFactory.ts", "../src/common/extractFCParamsFactory.ts", "../src/common/extractSeparableConvParamsFactory.ts", "../src/common/types.ts", "../src/common/extractWeightEntryFactory.ts", "../src/common/extractWeightsFactory.ts", "../src/faceFeatureExtractor/extractorsFactory.ts", "../src/faceFeatureExtractor/extractParams.ts", "../src/common/loadConvParamsFactory.ts", "../src/faceFeatureExtractor/loadParamsFactory.ts", "../src/faceFeatureExtractor/extractParamsFromWeigthMap.ts", "../src/faceProcessor/FaceProcessor.ts", "../src/common/fullyConnectedLayer.ts", "../src/faceProcessor/extractParams.ts", "../src/faceProcessor/extractParamsFromWeigthMap.ts", "../src/faceProcessor/util.ts", "../src/faceExpressionNet/FaceExpressions.ts", "../src/factories/WithFaceExpressions.ts", "../src/draw/drawFaceExpressions.ts", "../src/factories/WithFaceLandmarks.ts", "../src/draw/DrawFaceLandmarks.ts", "../src/ageGenderNet/AgeGenderNet.ts", "../src/xception/TinyXception.ts", "../src/xception/extractParams.ts", "../src/xception/extractParamsFromWeigthMap.ts", "../src/ageGenderNet/extractParams.ts", "../src/ageGenderNet/extractParamsFromWeigthMap.ts", "../src/ageGenderNet/types.ts", "../src/faceLandmarkNet/FaceLandmark68NetBase.ts", "../src/faceLandmarkNet/FaceLandmark68Net.ts", "../src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts", "../src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts", "../src/faceFeatureExtractor/extractParamsTiny.ts", "../src/faceLandmarkNet/FaceLandmark68TinyNet.ts", "../src/faceLandmarkNet/index.ts", "../src/faceRecognitionNet/FaceRecognitionNet.ts", "../src/faceRecognitionNet/convLayer.ts", "../src/faceRecognitionNet/scaleLayer.ts", "../src/faceRecognitionNet/extractParams.ts", "../src/faceRecognitionNet/extractParamsFromWeigthMap.ts", "../src/faceRecognitionNet/residualLayer.ts", "../src/faceRecognitionNet/index.ts", "../src/factories/WithFaceDescriptor.ts", "../src/factories/WithAge.ts", "../src/factories/WithGender.ts", "../src/ssdMobilenetv1/SsdMobilenetv1.ts", "../src/ssdMobilenetv1/extractParams.ts", "../src/ssdMobilenetv1/extractParamsFromWeigthMap.ts", "../src/ssdMobilenetv1/mobileNetV1.ts", "../src/ssdMobilenetv1/pointwiseConvLayer.ts", "../src/ssdMobilenetv1/nonMaxSuppression.ts", "../src/ssdMobilenetv1/outputLayer.ts", "../src/ssdMobilenetv1/predictionLayer.ts", "../src/ssdMobilenetv1/boxPredictionLayer.ts", "../src/ssdMobilenetv1/SsdMobilenetv1Options.ts", "../src/ssdMobilenetv1/index.ts", "../src/tinyYolov2/const.ts", "../src/tinyYolov2/TinyYolov2Base.ts", "../src/tinyYolov2/config.ts", "../src/tinyYolov2/convWithBatchNorm.ts", "../src/tinyYolov2/leaky.ts", "../src/tinyYolov2/depthwiseSeparableConv.ts", "../src/tinyYolov2/extractParams.ts", "../src/tinyYolov2/extractParamsFromWeigthMap.ts", "../src/tinyYolov2/TinyYolov2Options.ts", "../src/tinyYolov2/TinyYolov2.ts", "../src/tinyYolov2/index.ts", "../src/tinyFaceDetector/TinyFaceDetectorOptions.ts", "../src/globalApi/ComposableTask.ts", "../src/globalApi/DetectFaceLandmarksTasks.ts", "../src/globalApi/extractFacesAndComputeResults.ts", "../src/tinyFaceDetector/const.ts", "../src/tinyFaceDetector/TinyFaceDetector.ts", "../src/globalApi/nets.ts", "../src/globalApi/PredictFaceExpressionsTask.ts", "../src/globalApi/PredictAgeAndGenderTask.ts", "../src/globalApi/ComputeFaceDescriptorsTasks.ts", "../src/globalApi/DetectFacesTasks.ts", "../src/globalApi/detectFaces.ts", "../src/globalApi/allFaces.ts", "../src/euclideanDistance.ts", "../src/globalApi/FaceMatcher.ts", "../src/tinyFaceDetector/index.ts", "../src/resizeResults.ts"], - "sourcesContent": ["/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable node/no-unpublished-import */\n\n// wrapper to load tfjs in a single place so version can be changed quickly\n\n// simplified\n// { modules: 1061, moduleBytes: 3772720, outputBytes: 1531035 }\n\nexport * from '@tensorflow/tfjs/dist/index.js';\nexport * from '@tensorflow/tfjs-backend-wasm';\n\n// modular\n// { modules: 1064, moduleBytes: 3793219, outputBytes: 1535600 }\n\n/*\n// get versions of all packages.\nimport { version as tfjs } from '@tensorflow/tfjs/package.json';\nimport { version as versionCore } from '@tensorflow/tfjs-core/package.json';\nimport { version as versionData } from '@tensorflow/tfjs-data/package.json';\nimport { version as versionLayers } from '@tensorflow/tfjs-layers/package.json';\nimport { version as versionConverter } from '@tensorflow/tfjs-converter/package.json';\n// for backends, get version from source so it can register backend during import\nimport { version_cpu } from '@tensorflow/tfjs-backend-cpu/dist/index.js';\nimport { version_webgl } from '@tensorflow/tfjs-backend-webgl/dist/index.js';\nimport { version_wasm } from '@tensorflow/tfjs-backend-wasm/dist/index.js';\n\n// export all\nexport * from '@tensorflow/tfjs-core/dist/index.js';\nexport * from '@tensorflow/tfjs-layers/dist/index.js';\nexport * from '@tensorflow/tfjs-converter/dist/index.js';\nexport * as data from '@tensorflow/tfjs-data/dist/index.js';\nexport * from '@tensorflow/tfjs-backend-cpu/dist/index.js';\nexport * from '@tensorflow/tfjs-backend-webgl/dist/index.js';\nexport * from '@tensorflow/tfjs-backend-wasm/dist/index.js';\n\n// export versions\nexport const version = {\n tfjs,\n 'tfjs-core': versionCore,\n 'tfjs-data': versionData,\n 'tfjs-layers': versionLayers,\n 'tfjs-converter': versionConverter,\n 'tfjs-backend-cpu': version_cpu,\n 'tfjs-backend-webgl': version_webgl,\n 'tfjs-backend-wasm': version_wasm,\n};\n*/\n", "export function isNodejs(): boolean {\n return typeof global === 'object'\n && typeof require === 'function'\n && typeof module !== 'undefined'\n // issues with gatsby.js: module.exports is undefined\n // && !!module.exports\n && typeof process !== 'undefined' && !!process.version;\n}\n", "import * as tf from '../dist/tfjs.esm.js';\nimport * as draw from './draw/index';\nimport * as utils from './utils/index';\nimport * as pkg from '../package.json';\n\nexport { tf, draw, utils };\n\nexport * from './ageGenderNet/index';\nexport * from './classes/index';\nexport * from './dom/index';\nexport * from './env/index';\nexport * from './faceExpressionNet/index';\nexport * from './faceLandmarkNet/index';\nexport * from './faceRecognitionNet/index';\nexport * from './factories/index';\nexport * from './globalApi/index';\nexport * from './ops/index';\nexport * from './ssdMobilenetv1/index';\nexport * from './tinyFaceDetector/index';\nexport * from './tinyYolov2/index';\nexport * from './euclideanDistance';\nexport * from './NeuralNetwork';\nexport * from './resizeResults';\n\nconst node = (typeof process !== 'undefined');\n// eslint-disable-next-line no-undef\nconst browser = (typeof navigator !== 'undefined') && (typeof navigator.userAgent !== 'undefined');\nexport const version = { faceapi: pkg.version as string, node, browser };\n", "export * from './drawContour';\nexport * from './drawDetections';\nexport * from './drawFaceExpressions';\nexport * from './DrawBox';\nexport * from './DrawFaceLandmarks';\nexport * from './DrawTextField';\n", "import { Point } from '../classes/index';\n\nexport function drawContour(\n ctx: CanvasRenderingContext2D,\n points: Point[],\n isClosed: boolean = false,\n) {\n ctx.beginPath();\n\n points.slice(1).forEach(({ x, y }, prevIdx) => {\n const from = points[prevIdx];\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(x, y);\n });\n\n if (isClosed) {\n const from = points[points.length - 1];\n const to = points[0];\n if (!from || !to) {\n return;\n }\n\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n }\n\n ctx.stroke();\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Point } from '../classes/index';\nimport { Dimensions, IDimensions } from '../classes/Dimensions';\n\nexport function isTensor(tensor: any, dim: number) {\n return tensor instanceof tf.Tensor && tensor.shape.length === dim;\n}\n\nexport function isTensor1D(tensor: any): tensor is tf.Tensor1D {\n return isTensor(tensor, 1);\n}\n\nexport function isTensor2D(tensor: any): tensor is tf.Tensor2D {\n return isTensor(tensor, 2);\n}\n\nexport function isTensor3D(tensor: any): tensor is tf.Tensor3D {\n return isTensor(tensor, 3);\n}\n\nexport function isTensor4D(tensor: any): tensor is tf.Tensor4D {\n return isTensor(tensor, 4);\n}\n\nexport function isFloat(num: number) {\n return num % 1 !== 0;\n}\n\nexport function isEven(num: number) {\n return num % 2 === 0;\n}\n\nexport function round(num: number, prec: number = 2) {\n const f = 10 ** prec;\n return Math.floor(num * f) / f;\n}\n\nexport function isDimensions(obj: any): boolean {\n return obj && obj.width && obj.height;\n}\n\nexport function computeReshapedDimensions({ width, height }: IDimensions, inputSize: number) {\n const scale = inputSize / Math.max(height, width);\n return new Dimensions(Math.round(width * scale), Math.round(height * scale));\n}\n\nexport function getCenterPoint(pts: Point[]): Point {\n return pts.reduce((sum, pt) => sum.add(pt), new Point(0, 0))\n .div(new Point(pts.length, pts.length));\n}\n\nexport function range(num: number, start: number, step: number): number[] {\n return Array(num).fill(0).map((_, i) => start + (i * step));\n}\n\nexport function isValidNumber(num: any) {\n // eslint-disable-next-line no-mixed-operators\n return !!num && (num !== Infinity) && (num !== -Infinity) && !Number.isNaN(num) || num === 0;\n}\n\nexport function isValidProbablitiy(num: any) {\n return isValidNumber(num) && num >= 0 && num <= 1.0;\n}\n", "import { isValidNumber } from '../utils/index';\n\nexport interface IDimensions {\n width: number\n height: number\n}\n\nexport class Dimensions implements IDimensions {\n private _width: number\n\n private _height: number\n\n constructor(width: number, height: number) {\n if (!isValidNumber(width) || !isValidNumber(height)) {\n throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({ width, height })}`);\n }\n\n this._width = width;\n this._height = height;\n }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public reverse(): Dimensions {\n return new Dimensions(1 / this.width, 1 / this.height);\n }\n}\n", "export interface IPoint {\n x: number\n y: number\n}\n\nexport class Point implements IPoint {\n private _x: number\n\n private _y: number\n\n constructor(x: number, y: number) {\n this._x = x;\n this._y = y;\n }\n\n get x(): number { return this._x; }\n\n get y(): number { return this._y; }\n\n public add(pt: IPoint): Point {\n return new Point(this.x + pt.x, this.y + pt.y);\n }\n\n public sub(pt: IPoint): Point {\n return new Point(this.x - pt.x, this.y - pt.y);\n }\n\n public mul(pt: IPoint): Point {\n return new Point(this.x * pt.x, this.y * pt.y);\n }\n\n public div(pt: IPoint): Point {\n return new Point(this.x / pt.x, this.y / pt.y);\n }\n\n public abs(): Point {\n return new Point(Math.abs(this.x), Math.abs(this.y));\n }\n\n public magnitude(): number {\n return Math.sqrt((this.x ** 2) + (this.y ** 2));\n }\n\n public floor(): Point {\n return new Point(Math.floor(this.x), Math.floor(this.y));\n }\n}\n", "import { isDimensions, isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { IDimensions } from './Dimensions';\nimport { Point } from './Point';\nimport { IRect } from './Rect';\n\nexport class Box implements IBoundingBox, IRect {\n public static isRect(rect: any): boolean {\n return !!rect && [rect.x, rect.y, rect.width, rect.height].every(isValidNumber);\n }\n\n public static assertIsValidBox(box: any, callee: string, allowNegativeDimensions: boolean = false) {\n if (!Box.isRect(box)) {\n throw new Error(`${callee} - invalid box: ${JSON.stringify(box)}, expected object with properties x, y, width, height`);\n }\n\n if (!allowNegativeDimensions && (box.width < 0 || box.height < 0)) {\n throw new Error(`${callee} - width (${box.width}) and height (${box.height}) must be positive numbers`);\n }\n }\n\n private _x: number\n\n private _y: number\n\n private _width: number\n\n private _height: number\n\n constructor(_box: IBoundingBox | IRect, allowNegativeDimensions: boolean = true) {\n const box = (_box || {}) as any;\n\n const isBbox = [box.left, box.top, box.right, box.bottom].every(isValidNumber);\n const isRect = [box.x, box.y, box.width, box.height].every(isValidNumber);\n\n if (!isRect && !isBbox) {\n throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(box)}`);\n }\n\n const [x, y, width, height] = isRect\n ? [box.x, box.y, box.width, box.height]\n : [box.left, box.top, box.right - box.left, box.bottom - box.top];\n\n Box.assertIsValidBox({\n x, y, width, height,\n }, 'Box.constructor', allowNegativeDimensions);\n\n this._x = x;\n this._y = y;\n this._width = width;\n this._height = height;\n }\n\n public get x(): number { return this._x; }\n\n public get y(): number { return this._y; }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public get left(): number { return this.x; }\n\n public get top(): number { return this.y; }\n\n public get right(): number { return this.x + this.width; }\n\n public get bottom(): number { return this.y + this.height; }\n\n public get area(): number { return this.width * this.height; }\n\n public get topLeft(): Point { return new Point(this.left, this.top); }\n\n public get topRight(): Point { return new Point(this.right, this.top); }\n\n public get bottomLeft(): Point { return new Point(this.left, this.bottom); }\n\n public get bottomRight(): Point { return new Point(this.right, this.bottom); }\n\n public round(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.round(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public floor(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.floor(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public toSquare(): Box {\n let {\n x, y, width, height,\n } = this;\n const diff = Math.abs(width - height);\n if (width < height) {\n x -= (diff / 2);\n width += diff;\n }\n if (height < width) {\n y -= (diff / 2);\n height += diff;\n }\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public rescale(s: IDimensions | number): Box {\n const scaleX = isDimensions(s) ? (s as IDimensions).width : s as number;\n const scaleY = isDimensions(s) ? (s as IDimensions).height : s as number;\n return new Box({\n x: this.x * scaleX,\n y: this.y * scaleY,\n width: this.width * scaleX,\n height: this.height * scaleY,\n });\n }\n\n public pad(padX: number, padY: number): Box {\n const [x, y, width, height] = [\n this.x - (padX / 2),\n this.y - (padY / 2),\n this.width + padX,\n this.height + padY,\n ];\n return new Box({\n x, y, width, height,\n });\n }\n\n public clipAtImageBorders(imgWidth: number, imgHeight: number): Box {\n const {\n x, y, right, bottom,\n } = this;\n const clippedX = Math.max(x, 0);\n const clippedY = Math.max(y, 0);\n\n const newWidth = right - clippedX;\n const newHeight = bottom - clippedY;\n const clippedWidth = Math.min(newWidth, imgWidth - clippedX);\n const clippedHeight = Math.min(newHeight, imgHeight - clippedY);\n\n return (new Box({\n x: clippedX, y: clippedY, width: clippedWidth, height: clippedHeight,\n })).floor();\n }\n\n public shift(sx: number, sy: number): Box {\n const { width, height } = this;\n const x = this.x + sx;\n const y = this.y + sy;\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public padAtBorders(imageHeight: number, imageWidth: number) {\n const w = this.width + 1;\n const h = this.height + 1;\n\n const dx = 1;\n const dy = 1;\n let edx = w;\n let edy = h;\n\n let x = this.left;\n let y = this.top;\n let ex = this.right;\n let ey = this.bottom;\n\n if (ex > imageWidth) {\n edx = -ex + imageWidth + w;\n ex = imageWidth;\n }\n if (ey > imageHeight) {\n edy = -ey + imageHeight + h;\n ey = imageHeight;\n }\n if (x < 1) {\n edy = 2 - x;\n x = 1;\n }\n if (y < 1) {\n edy = 2 - y;\n y = 1;\n }\n\n return {\n dy, edy, dx, edx, y, ey, x, ex, w, h,\n };\n }\n\n public calibrate(region: Box) {\n return new Box({\n left: this.left + (region.left * this.width),\n top: this.top + (region.top * this.height),\n right: this.right + (region.right * this.width),\n bottom: this.bottom + (region.bottom * this.height),\n }).toSquare().round();\n }\n}\n", "import { Box } from './Box';\n\nexport interface IBoundingBox {\n left: number\n top: number\n right: number\n bottom: number\n}\n\nexport class BoundingBox extends Box implements IBoundingBox {\n constructor(left: number, top: number, right: number, bottom: number, allowNegativeDimensions: boolean = false) {\n super({\n left, top, right, bottom,\n }, allowNegativeDimensions);\n }\n}\n", "import { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { IRect, Rect } from './Rect';\n\nexport class ObjectDetection {\n private _score: number\n\n private _classScore: number\n\n private _className: string\n\n private _box: Rect\n\n private _imageDims: Dimensions\n\n constructor(\n score: number,\n classScore: number,\n className: string,\n relativeBox: IRect,\n imageDims: IDimensions,\n ) {\n this._imageDims = new Dimensions(imageDims.width, imageDims.height);\n this._score = score;\n this._classScore = classScore;\n this._className = className;\n this._box = new Box(relativeBox).rescale(this._imageDims);\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n\n public get className(): string { return this._className; }\n\n public get box(): Box { return this._box; }\n\n public get imageDims(): Dimensions { return this._imageDims; }\n\n public get imageWidth(): number { return this.imageDims.width; }\n\n public get imageHeight(): number { return this.imageDims.height; }\n\n public get relativeBox(): Box { return new Box(this._box).rescale(this.imageDims.reverse()); }\n\n public forSize(width: number, height: number): ObjectDetection {\n return new ObjectDetection(\n this.score,\n this.classScore,\n this.className,\n this.relativeBox,\n { width, height },\n );\n }\n}\n", "import { Box } from './Box';\nimport { IDimensions } from './Dimensions';\nimport { ObjectDetection } from './ObjectDetection';\nimport { Rect } from './Rect';\n\nexport interface IFaceDetecion {\n score: number\n box: Box\n}\n\nexport class FaceDetection extends ObjectDetection implements IFaceDetecion {\n constructor(\n score: number,\n relativeBox: Rect,\n imageDims: IDimensions,\n ) {\n super(score, score, '', relativeBox, imageDims);\n }\n\n public forSize(width: number, height: number): FaceDetection {\n const { score, relativeBox, imageDims } = super.forSize(width, height);\n return new FaceDetection(score, relativeBox, imageDims);\n }\n}\n", "import { Box } from '../classes/Box';\n\nexport function iou(box1: Box, box2: Box, isIOU: boolean = true) {\n const width = Math.max(0.0, Math.min(box1.right, box2.right) - Math.max(box1.left, box2.left));\n const height = Math.max(0.0, Math.min(box1.bottom, box2.bottom) - Math.max(box1.top, box2.top));\n const interSection = width * height;\n\n return isIOU\n ? interSection / (box1.area + box2.area - interSection)\n : interSection / Math.min(box1.area, box2.area);\n}\n", "import { BoundingBox, IPoint } from '../classes/index';\n\nexport function minBbox(pts: IPoint[]): BoundingBox {\n const xs = pts.map((pt) => pt.x);\n const ys = pts.map((pt) => pt.y);\n const minX = xs.reduce((min, x) => (x < min ? x : min), Infinity);\n const minY = ys.reduce((min, y) => (y < min ? y : min), Infinity);\n const maxX = xs.reduce((max, x) => (max < x ? x : max), 0);\n const maxY = ys.reduce((max, y) => (max < y ? y : max), 0);\n\n return new BoundingBox(minX, minY, maxX, maxY);\n}\n", "import { Box } from '../classes/Box';\nimport { iou } from './iou';\n\nexport function nonMaxSuppression(\n boxes: Box[],\n scores: number[],\n iouThreshold: number,\n isIOU: boolean = true,\n): number[] {\n let indicesSortedByScore = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .sort((c1, c2) => c1.score - c2.score)\n .map((c) => c.boxIndex);\n\n const pick: number[] = [];\n\n while (indicesSortedByScore.length > 0) {\n const curr = indicesSortedByScore.pop() as number;\n pick.push(curr);\n\n const indices = indicesSortedByScore;\n\n const outputs: number[] = [];\n for (let i = 0; i < indices.length; i++) {\n const idx = indices[i];\n\n const currBox = boxes[curr];\n const idxBox = boxes[idx];\n\n outputs.push(iou(currBox, idxBox, isIOU));\n }\n\n indicesSortedByScore = indicesSortedByScore.filter(\n (_, j) => outputs[j] <= iouThreshold,\n );\n }\n\n return pick;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nexport function normalize(x: tf.Tensor4D, meanRgb: number[]): tf.Tensor4D {\n return tf.tidy(() => {\n const [r, g, b] = meanRgb;\n const avg_r = tf.fill([...x.shape.slice(0, 3), 1], r, 'float32');\n const avg_g = tf.fill([...x.shape.slice(0, 3), 1], g, 'float32');\n const avg_b = tf.fill([...x.shape.slice(0, 3), 1], b, 'float32');\n const avg_rgb = tf.concat([avg_r, avg_g, avg_b], 3);\n\n return tf.sub(x, avg_rgb);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\n/**\n * Pads the smaller dimension of an image tensor with zeros, such that width === height.\n *\n * @param imgTensor The image tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The padded tensor with width === height.\n */\nexport function padToSquare(\n imgTensor: tf.Tensor4D,\n isCenterImage: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const [height, width] = imgTensor.shape.slice(1);\n if (height === width) {\n return imgTensor;\n }\n\n const dimDiff = Math.abs(height - width);\n const paddingAmount = Math.round(dimDiff * (isCenterImage ? 0.5 : 1));\n const paddingAxis = height > width ? 2 : 1;\n\n const createPaddingTensor = (paddingAmountLocal: number): tf.Tensor => {\n const paddingTensorShape = imgTensor.shape.slice();\n paddingTensorShape[paddingAxis] = paddingAmountLocal;\n return tf.fill(paddingTensorShape, 0, 'float32');\n };\n\n const paddingTensorAppend = createPaddingTensor(paddingAmount);\n const remainingPaddingAmount = dimDiff - (paddingTensorAppend.shape[paddingAxis] as number);\n\n const paddingTensorPrepend = isCenterImage && remainingPaddingAmount\n ? createPaddingTensor(remainingPaddingAmount)\n : null;\n\n const tensorsToStack = [\n paddingTensorPrepend,\n imgTensor,\n paddingTensorAppend,\n ]\n .filter((t) => !!t)\n // .map((t: tf.Tensor) => t.toFloat()) as tf.Tensor4D[]\n .map((t: tf.Tensor) => tf.cast(t, 'float32')) as tf.Tensor4D[];\n return tf.concat(tensorsToStack, paddingAxis);\n });\n}\n", "export function shuffleArray(inputArray: any[]) {\n const array = inputArray.slice();\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const x = array[i];\n array[i] = array[j];\n array[j] = x;\n }\n return array;\n}\n", "export * from './iou';\nexport * from './minBbox';\nexport * from './nonMaxSuppression';\nexport * from './normalize';\nexport * from './padToSquare';\nexport * from './shuffleArray';\n\nexport function sigmoid(x: number) {\n return 1 / (1 + Math.exp(-x));\n}\n\nexport function inverseSigmoid(x: number) {\n return Math.log(x / (1 - x));\n}\n", "import { Box } from './Box';\n\nexport interface IRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport class Rect extends Box implements IRect {\n constructor(x: number, y: number, width: number, height: number, allowNegativeDimensions: boolean = false) {\n super({\n x, y, width, height,\n }, allowNegativeDimensions);\n }\n}\n", "import { minBbox } from '../ops/index';\nimport { getCenterPoint } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { FaceDetection } from './FaceDetection';\nimport { Point } from './Point';\nimport { IRect, Rect } from './Rect';\n\n// face alignment constants\nconst relX = 0.5;\nconst relY = 0.43;\nconst relScale = 0.45;\n\nexport interface IFaceLandmarks {\n positions: Point[]\n shift: Point\n}\n\nexport class FaceLandmarks implements IFaceLandmarks {\n protected _shift: Point\n\n protected _positions: Point[]\n\n protected _imgDims: Dimensions\n\n constructor(\n relativeFaceLandmarkPositions: Point[],\n imgDims: IDimensions,\n shift: Point = new Point(0, 0),\n ) {\n const { width, height } = imgDims;\n this._imgDims = new Dimensions(width, height);\n this._shift = shift;\n this._positions = relativeFaceLandmarkPositions.map(\n (pt) => pt.mul(new Point(width, height)).add(shift),\n );\n }\n\n public get shift(): Point { return new Point(this._shift.x, this._shift.y); }\n\n public get imageWidth(): number { return this._imgDims.width; }\n\n public get imageHeight(): number { return this._imgDims.height; }\n\n public get positions(): Point[] { return this._positions; }\n\n public get relativePositions(): Point[] {\n return this._positions.map(\n (pt) => pt.sub(this._shift).div(new Point(this.imageWidth, this.imageHeight)),\n );\n }\n\n public forSize(width: number, height: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n { width, height },\n );\n }\n\n public shiftBy(x: number, y: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n this._imgDims,\n new Point(x, y),\n );\n }\n\n public shiftByPoint(pt: Point): T {\n return this.shiftBy(pt.x, pt.y);\n }\n\n /**\n * Aligns the face landmarks after face detection from the relative positions of the faces\n * bounding box, or it's current shift. This function should be used to align the face images\n * after face detection has been performed, before they are passed to the face recognition net.\n * This will make the computed face descriptor more accurate.\n *\n * @param detection (optional) The bounding box of the face or the face detection result. If\n * no argument was passed the position of the face landmarks are assumed to be relative to\n * it's current shift.\n * @returns The bounding box of the aligned face.\n */\n public align(\n detection?: FaceDetection | IRect | IBoundingBox | null,\n options: { useDlibAlignment?: boolean, minBoxPadding?: number } = { },\n ): Box {\n if (detection) {\n const box = detection instanceof FaceDetection\n ? detection.box.floor()\n : new Box(detection);\n\n return this.shiftBy(box.x, box.y).align(null, options);\n }\n\n const { useDlibAlignment, minBoxPadding } = { useDlibAlignment: false, minBoxPadding: 0.2, ...options };\n\n if (useDlibAlignment) {\n return this.alignDlib();\n }\n\n return this.alignMinBbox(minBoxPadding);\n }\n\n private alignDlib(): Box {\n const centers = this.getRefPointsForAlignment();\n\n const [leftEyeCenter, rightEyeCenter, mouthCenter] = centers;\n const distToMouth = (pt: Point) => mouthCenter.sub(pt).magnitude();\n const eyeToMouthDist = (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2;\n\n const size = Math.floor(eyeToMouthDist / relScale);\n\n const refPoint = getCenterPoint(centers);\n // TODO: pad in case rectangle is out of image bounds\n const x = Math.floor(Math.max(0, refPoint.x - (relX * size)));\n const y = Math.floor(Math.max(0, refPoint.y - (relY * size)));\n\n return new Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y));\n }\n\n private alignMinBbox(padding: number): Box {\n const box = minBbox(this.positions);\n return box.pad(box.width * padding, box.height * padding);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n throw new Error('getRefPointsForAlignment not implemented by base class');\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks5 extends FaceLandmarks {\n protected getRefPointsForAlignment(): Point[] {\n const pts = this.positions;\n return [\n pts[0],\n pts[1],\n getCenterPoint([pts[3], pts[4]]),\n ];\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks68 extends FaceLandmarks {\n public getJawOutline(): Point[] {\n return this.positions.slice(0, 17);\n }\n\n public getLeftEyeBrow(): Point[] {\n return this.positions.slice(17, 22);\n }\n\n public getRightEyeBrow(): Point[] {\n return this.positions.slice(22, 27);\n }\n\n public getNose(): Point[] {\n return this.positions.slice(27, 36);\n }\n\n public getLeftEye(): Point[] {\n return this.positions.slice(36, 42);\n }\n\n public getRightEye(): Point[] {\n return this.positions.slice(42, 48);\n }\n\n public getMouth(): Point[] {\n return this.positions.slice(48, 68);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n return [\n this.getLeftEye(),\n this.getRightEye(),\n this.getMouth(),\n ].map(getCenterPoint);\n }\n}\n", "import { round } from '../utils/index';\n\nexport interface IFaceMatch {\n label: string\n distance: number\n}\n\nexport class FaceMatch implements IFaceMatch {\n private _label: string\n\n private _distance: number\n\n constructor(label: string, distance: number) {\n this._label = label;\n this._distance = distance;\n }\n\n public get label(): string { return this._label; }\n\n public get distance(): number { return this._distance; }\n\n public toString(withDistance: boolean = true): string {\n return `${this.label}${withDistance ? ` (${round(this.distance)})` : ''}`;\n }\n}\n", "import { isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { IRect } from './Rect';\n\nexport class LabeledBox extends Box {\n public static assertIsValidLabeledBox(box: any, callee: string) {\n Box.assertIsValidBox(box, callee);\n\n if (!isValidNumber(box.label)) {\n throw new Error(`${callee} - expected property label (${box.label}) to be a number`);\n }\n }\n\n private _label: number\n\n constructor(box: IBoundingBox | IRect | any, label: number) {\n super(box);\n this._label = label;\n }\n\n public get label(): number { return this._label; }\n}\n", "export class LabeledFaceDescriptors {\n private _label: string\n\n private _descriptors: Float32Array[]\n\n constructor(label: string, descriptors: Float32Array[]) {\n if (!(typeof label === 'string')) {\n throw new Error('LabeledFaceDescriptors - constructor expected label to be a string');\n }\n\n if (!Array.isArray(descriptors) || descriptors.some((desc) => !(desc instanceof Float32Array))) {\n throw new Error('LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array');\n }\n\n this._label = label;\n this._descriptors = descriptors;\n }\n\n public get label(): string { return this._label; }\n\n public get descriptors(): Float32Array[] { return this._descriptors; }\n\n public toJSON(): any {\n return {\n label: this.label,\n descriptors: this.descriptors.map((d) => Array.from(d)),\n };\n }\n\n public static fromJSON(json: any): LabeledFaceDescriptors {\n const descriptors = json.descriptors.map((d: any) => new Float32Array(d));\n return new LabeledFaceDescriptors(json.label, descriptors);\n }\n}\n", "import { isValidProbablitiy } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { LabeledBox } from './LabeledBox';\nimport { IRect } from './Rect';\n\nexport class PredictedBox extends LabeledBox {\n public static assertIsValidPredictedBox(box: any, callee: string) {\n LabeledBox.assertIsValidLabeledBox(box, callee);\n\n if (\n !isValidProbablitiy(box.score)\n || !isValidProbablitiy(box.classScore)\n ) {\n throw new Error(`${callee} - expected properties score (${box.score}) and (${box.classScore}) to be a number between [0, 1]`);\n }\n }\n\n private _score: number\n\n private _classScore: number\n\n constructor(box: IBoundingBox | IRect | any, label: number, score: number, classScore: number) {\n super(box, label);\n this._score = score;\n this._classScore = classScore;\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\n\nexport type WithFaceDetection = TSource & {\n detection: FaceDetection\n}\n\nexport function isWithFaceDetection(obj: any): obj is WithFaceDetection<{}> {\n return obj.detection instanceof FaceDetection;\n}\n\nexport function extendWithFaceDetection<\n TSource\n>(\n sourceObj: TSource,\n detection: FaceDetection,\n): WithFaceDetection {\n const extension = { detection };\n return { ...sourceObj, ...extension };\n}\n", "import { Environment } from './types';\n\nexport function createBrowserEnv(): Environment {\n const fetch = window.fetch;\n if (!fetch) throw new Error('fetch - missing fetch implementation for browser environment');\n\n const readFile = () => {\n throw new Error('readFile - filesystem not available for browser environment');\n };\n\n return {\n Canvas: HTMLCanvasElement,\n CanvasRenderingContext2D,\n Image: HTMLImageElement,\n ImageData,\n Video: HTMLVideoElement,\n createCanvasElement: () => document.createElement('canvas'),\n createImageElement: () => document.createElement('img'),\n fetch,\n readFile,\n };\n}\n", "import { FileSystem } from './types';\n\nexport function createFileSystem(fs?: any): FileSystem {\n let requireFsError = '';\n\n if (!fs) {\n try {\n // eslint-disable-next-line global-require\n fs = require('fs');\n } catch (err) {\n requireFsError = err.toString();\n }\n }\n\n const readFile = fs\n ? (filePath: string) => new Promise((resolve, reject) => {\n fs.readFile(filePath, (err: any, buffer: Buffer) => (err ? reject(err) : resolve(buffer)));\n })\n : () => {\n throw new Error(`readFile - failed to require fs in nodejs environment with error: ${requireFsError}`);\n };\n\n return {\n readFile,\n };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { createFileSystem } from './createFileSystem';\nimport { Environment } from './types';\n\nexport function createNodejsEnv(): Environment {\n // eslint-disable-next-line dot-notation\n const Canvas = global['Canvas'] || global.HTMLCanvasElement;\n const Image = global.Image || global.HTMLImageElement;\n\n const createCanvasElement = () => {\n if (Canvas) return new Canvas();\n throw new Error('createCanvasElement - missing Canvas implementation for nodejs environment');\n };\n\n const createImageElement = () => {\n if (Image) return new Image();\n throw new Error('createImageElement - missing Image implementation for nodejs environment');\n };\n\n const fetch = global.fetch;\n // if (!fetch) throw new Error('fetch - missing fetch implementation for nodejs environment');\n\n const fileSystem = createFileSystem();\n\n return {\n Canvas: Canvas || class {},\n CanvasRenderingContext2D: global.CanvasRenderingContext2D || class {},\n Image: Image || class {},\n ImageData: global.ImageData || class {},\n Video: global.HTMLVideoElement || class {},\n createCanvasElement,\n createImageElement,\n fetch,\n ...fileSystem,\n };\n}\n", "export function isBrowser(): boolean {\n return typeof window === 'object'\n && typeof document !== 'undefined'\n && typeof HTMLImageElement !== 'undefined'\n && typeof HTMLCanvasElement !== 'undefined'\n && typeof HTMLVideoElement !== 'undefined'\n && typeof ImageData !== 'undefined'\n && typeof CanvasRenderingContext2D !== 'undefined';\n}\n", "import { createBrowserEnv } from './createBrowserEnv';\nimport { createFileSystem } from './createFileSystem';\nimport { createNodejsEnv } from './createNodejsEnv';\nimport { isBrowser } from './isBrowser';\nimport { isNodejs } from './isNodejs';\nimport { Environment } from './types';\n\nlet environment: Environment | null;\n\nfunction getEnv(): Environment {\n if (!environment) {\n throw new Error('getEnv - environment is not defined, check isNodejs() and isBrowser()');\n }\n return environment;\n}\n\nfunction setEnv(env: Environment) {\n environment = env;\n}\n\nfunction initialize() {\n // check for isBrowser() first to prevent electron renderer process\n // to be initialized with wrong environment due to isNodejs() returning true\n if (isBrowser()) return setEnv(createBrowserEnv());\n if (isNodejs()) return setEnv(createNodejsEnv());\n return null;\n}\n\nfunction monkeyPatch(env: Partial) {\n if (!environment) {\n initialize();\n }\n\n if (!environment) {\n throw new Error('monkeyPatch - environment is not defined, check isNodejs() and isBrowser()');\n }\n\n const { Canvas = environment.Canvas, Image = environment.Image } = env;\n environment.Canvas = Canvas;\n environment.Image = Image;\n environment.createCanvasElement = env.createCanvasElement || (() => new Canvas());\n environment.createImageElement = env.createImageElement || (() => new Image());\n\n environment.ImageData = env.ImageData || environment.ImageData;\n environment.Video = env.Video || environment.Video;\n environment.fetch = env.fetch || environment.fetch;\n environment.readFile = env.readFile || environment.readFile;\n}\n\nexport const env = {\n getEnv,\n setEnv,\n initialize,\n createBrowserEnv,\n createFileSystem,\n createNodejsEnv,\n monkeyPatch,\n isBrowser,\n isNodejs,\n};\n\ninitialize();\n\nexport * from './types';\n", "import { env } from '../env/index';\n\nexport function resolveInput(arg: string | any) {\n if (!env.isNodejs() && typeof arg === 'string') {\n return document.getElementById(arg);\n }\n return arg;\n}\n", "import { env } from '../env/index';\nimport { resolveInput } from './resolveInput';\n\nexport function getContext2dOrThrow(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D): CanvasRenderingContext2D {\n const { Canvas, CanvasRenderingContext2D } = env.getEnv();\n\n if (canvasArg instanceof CanvasRenderingContext2D) {\n return canvasArg;\n }\n\n const canvas = resolveInput(canvasArg);\n\n if (!(canvas instanceof Canvas)) {\n throw new Error('resolveContext2d - expected canvas to be of instance of Canvas');\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('resolveContext2d - canvas 2d context is null');\n }\n\n return ctx;\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IDimensions, IPoint } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { resolveInput } from '../dom/resolveInput';\n\n// eslint-disable-next-line no-shadow\nexport enum AnchorPosition {\n // eslint-disable-next-line no-unused-vars\n TOP_LEFT = 'TOP_LEFT',\n // eslint-disable-next-line no-unused-vars\n TOP_RIGHT = 'TOP_RIGHT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_LEFT = 'BOTTOM_LEFT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_RIGHT = 'BOTTOM_RIGHT'\n}\n\nexport interface IDrawTextFieldOptions {\n anchorPosition?: AnchorPosition\n backgroundColor?: string\n fontColor?: string\n fontSize?: number\n fontStyle?: string\n padding?: number\n}\n\nexport class DrawTextFieldOptions implements IDrawTextFieldOptions {\n public anchorPosition: AnchorPosition\n\n public backgroundColor: string\n\n public fontColor: string\n\n public fontSize: number\n\n public fontStyle: string\n\n public padding: number\n\n constructor(options: IDrawTextFieldOptions = {}) {\n const {\n anchorPosition, backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = options;\n this.anchorPosition = anchorPosition || AnchorPosition.TOP_LEFT;\n this.backgroundColor = backgroundColor || 'rgba(0, 0, 0, 0.5)';\n this.fontColor = fontColor || 'rgba(255, 255, 255, 1)';\n this.fontSize = fontSize || 14;\n this.fontStyle = fontStyle || 'Georgia';\n this.padding = padding || 4;\n }\n}\n\nexport class DrawTextField {\n public text: string[]\n\n public anchor : IPoint\n\n public options: DrawTextFieldOptions\n\n constructor(\n text: string | string[] | DrawTextField,\n anchor: IPoint,\n options: IDrawTextFieldOptions = {},\n ) {\n // eslint-disable-next-line no-nested-ternary\n this.text = typeof text === 'string'\n ? [text]\n : (text instanceof DrawTextField ? text.text : text);\n this.anchor = anchor;\n this.options = new DrawTextFieldOptions(options);\n }\n\n measureWidth(ctx: CanvasRenderingContext2D): number {\n const { padding } = this.options;\n return this.text.map((l) => ctx.measureText(l).width).reduce((w0, w1) => (w0 < w1 ? w1 : w0), 0) + (2 * padding);\n }\n\n measureHeight(): number {\n const { fontSize, padding } = this.options;\n return this.text.length * fontSize + (2 * padding);\n }\n\n getUpperLeft(ctx: CanvasRenderingContext2D, canvasDims?: IDimensions): IPoint {\n const { anchorPosition } = this.options;\n const isShiftLeft = anchorPosition === AnchorPosition.BOTTOM_RIGHT || anchorPosition === AnchorPosition.TOP_RIGHT;\n const isShiftTop = anchorPosition === AnchorPosition.BOTTOM_LEFT || anchorPosition === AnchorPosition.BOTTOM_RIGHT;\n\n const textFieldWidth = this.measureWidth(ctx);\n const textFieldHeight = this.measureHeight();\n const x = (isShiftLeft ? this.anchor.x - textFieldWidth : this.anchor.x);\n const y = isShiftTop ? this.anchor.y - textFieldHeight : this.anchor.y;\n\n // adjust anchor if text box exceeds canvas borders\n if (canvasDims) {\n const { width, height } = canvasDims;\n const newX = Math.max(Math.min(x, width - textFieldWidth), 0);\n const newY = Math.max(Math.min(y, height - textFieldHeight), 0);\n return { x: newX, y: newY };\n }\n return { x, y };\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const canvas = resolveInput(canvasArg);\n const ctx = getContext2dOrThrow(canvas);\n\n const {\n backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = this.options;\n\n ctx.font = `${fontSize}px ${fontStyle}`;\n const maxTextWidth = this.measureWidth(ctx);\n const textHeight = this.measureHeight();\n\n ctx.fillStyle = backgroundColor;\n const upperLeft = this.getUpperLeft(ctx, canvas);\n ctx.fillRect(upperLeft.x, upperLeft.y, maxTextWidth, textHeight);\n\n ctx.fillStyle = fontColor;\n this.text.forEach((textLine, i) => {\n const x = padding + upperLeft.x;\n const y = padding + upperLeft.y + ((i + 1) * fontSize);\n ctx.fillText(textLine, x, y);\n });\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { Box, IBoundingBox, IRect } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport {\n AnchorPosition, DrawTextField, DrawTextFieldOptions, IDrawTextFieldOptions,\n} from './DrawTextField';\n\nexport interface IDrawBoxOptions {\n boxColor?: string\n lineWidth?: number\n drawLabelOptions?: IDrawTextFieldOptions\n label?: string\n}\n\nexport class DrawBoxOptions {\n public boxColor: string\n\n public lineWidth: number\n\n public drawLabelOptions: DrawTextFieldOptions\n\n public label?: string\n\n constructor(options: IDrawBoxOptions = {}) {\n const {\n boxColor, lineWidth, label, drawLabelOptions,\n } = options;\n this.boxColor = boxColor || 'rgba(0, 0, 255, 1)';\n this.lineWidth = lineWidth || 2;\n this.label = label;\n\n const defaultDrawLabelOptions = {\n anchorPosition: AnchorPosition.BOTTOM_LEFT,\n backgroundColor: this.boxColor,\n };\n this.drawLabelOptions = new DrawTextFieldOptions({ ...defaultDrawLabelOptions, ...drawLabelOptions });\n }\n}\n\nexport class DrawBox {\n public box: Box\n\n public options: DrawBoxOptions\n\n constructor(\n box: IBoundingBox | IRect,\n options: IDrawBoxOptions = {},\n ) {\n this.box = new Box(box);\n this.options = new DrawBoxOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const { boxColor, lineWidth } = this.options;\n\n const {\n x, y, width, height,\n } = this.box;\n ctx.strokeStyle = boxColor;\n ctx.lineWidth = lineWidth;\n ctx.strokeRect(x, y, width, height);\n\n const { label } = this.options;\n if (label) {\n new DrawTextField([label], { x: x - (lineWidth / 2), y }, this.options.drawLabelOptions).draw(canvasArg);\n }\n }\n}\n", "import { Box, IBoundingBox, IRect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { round } from '../utils/index';\nimport { DrawBox } from './DrawBox';\n\nexport type TDrawDetectionsInput = IRect | IBoundingBox | FaceDetection | WithFaceDetection<{}>\n\nexport function drawDetections(\n canvasArg: string | HTMLCanvasElement,\n detections: TDrawDetectionsInput | Array,\n) {\n const detectionsArray = Array.isArray(detections) ? detections : [detections];\n\n detectionsArray.forEach((det) => {\n // eslint-disable-next-line no-nested-ternary\n const score = det instanceof FaceDetection\n ? det.score\n : (isWithFaceDetection(det) ? det.detection.score : undefined);\n\n // eslint-disable-next-line no-nested-ternary\n const box = det instanceof FaceDetection\n ? det.box\n : (isWithFaceDetection(det) ? det.detection.box : new Box(det));\n\n const label = score ? `${round(score)}` : undefined;\n new DrawBox(box, { label }).draw(canvasArg);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { FaceExpressions } from './FaceExpressions';\n\nexport class FaceExpressionNet extends FaceProcessor {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceExpressionNet', faceFeatureExtractor);\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n return tf.tidy(() => tf.softmax(this.runNet(input)));\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictExpressions(input: TNetInput) {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n const probabilitesByBatch = await Promise.all(tf.unstack(out).map(async (t) => {\n const data = await t.data();\n t.dispose();\n return data;\n }));\n out.dispose();\n\n const predictionsByBatch = probabilitesByBatch\n .map((probabilites) => new FaceExpressions(probabilites as Float32Array));\n\n return netInput.isBatchInput\n ? predictionsByBatch\n : predictionsByBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_expression_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n\n protected getClassifierChannelsOut(): number {\n return 7;\n }\n}\n", "import { env } from '../env/index';\n\nexport function isMediaLoaded(media: HTMLImageElement | HTMLVideoElement) : boolean {\n const { Image, Video } = env.getEnv();\n\n return (media instanceof Image && media.complete)\n || (media instanceof Video && media.readyState >= 3);\n}\n", "import { env } from '../env/index';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function awaitMediaLoaded(media: HTMLImageElement | HTMLVideoElement | HTMLCanvasElement) {\n // eslint-disable-next-line consistent-return\n return new Promise((resolve, reject) => {\n if (media instanceof env.getEnv().Canvas || isMediaLoaded(media)) {\n return resolve(null);\n }\n\n function onError(e: Event) {\n if (!e.currentTarget) return;\n // eslint-disable-next-line no-use-before-define\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n reject(e);\n }\n\n function onLoad(e: Event) {\n if (!e.currentTarget) return;\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n resolve(e);\n }\n\n media.addEventListener('load', onLoad);\n media.addEventListener('error', onError);\n });\n}\n", "import { env } from '../env/index';\n\nexport function bufferToImage(buf: Blob): Promise {\n return new Promise((resolve, reject) => {\n if (!(buf instanceof Blob)) reject(new Error('bufferToImage - expected buf to be of type: Blob'));\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result !== 'string') reject(new Error('bufferToImage - expected reader.result to be a string, in onload'));\n const img = env.getEnv().createImageElement();\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = reader.result as string;\n };\n reader.onerror = reject;\n reader.readAsDataURL(buf);\n });\n}\n", "import { Dimensions, IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\n\nexport function getMediaDimensions(input: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | IDimensions): Dimensions {\n const { Image, Video } = env.getEnv();\n\n if (input instanceof Image) {\n return new Dimensions(input.naturalWidth, input.naturalHeight);\n }\n if (input instanceof Video) {\n return new Dimensions(input.videoWidth, input.videoHeight);\n }\n return new Dimensions(input.width, input.height);\n}\n", "import { IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function createCanvas({ width, height }: IDimensions): HTMLCanvasElement {\n const { createCanvasElement } = env.getEnv();\n const canvas = createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n\nexport function createCanvasFromMedia(media: HTMLImageElement | HTMLVideoElement | ImageData, dims?: IDimensions): HTMLCanvasElement {\n const { ImageData } = env.getEnv();\n\n if (!(media instanceof ImageData) && !isMediaLoaded(media)) {\n throw new Error('createCanvasFromMedia - media has not finished loading yet');\n }\n\n const { width, height } = dims || getMediaDimensions(media);\n const canvas = createCanvas({ width, height });\n\n if (media instanceof ImageData) {\n getContext2dOrThrow(canvas).putImageData(media, 0, 0);\n } else {\n getContext2dOrThrow(canvas).drawImage(media, 0, 0, width, height);\n }\n return canvas;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { env } from '../env/index';\nimport { isTensor4D } from '../utils/index';\n\nexport async function imageTensorToCanvas(\n imgTensor: tf.Tensor,\n canvas?: HTMLCanvasElement,\n): Promise {\n const targetCanvas = canvas || env.getEnv().createCanvasElement();\n\n const [height, width, numChannels] = imgTensor.shape.slice(isTensor4D(imgTensor) ? 1 : 0);\n const imgTensor3D = tf.tidy(() => imgTensor.as3D(height, width, numChannels).toInt());\n await tf.browser.toPixels(imgTensor3D, targetCanvas);\n\n imgTensor3D.dispose();\n\n return targetCanvas;\n}\n", "import { env } from '../env/index';\n\nexport function isMediaElement(input: any) {\n const { Image, Canvas, Video } = env.getEnv();\n\n return input instanceof Image\n || input instanceof Canvas\n || input instanceof Video;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Dimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { padToSquare } from '../ops/padToSquare';\nimport {\n computeReshapedDimensions, isTensor3D, isTensor4D, range,\n} from '../utils/index';\nimport { createCanvasFromMedia } from './createCanvas';\nimport { imageToSquare } from './imageToSquare';\nimport { TResolvedNetInput } from './types';\n\nexport class NetInput {\n private _imageTensors: Array = []\n\n private _canvases: HTMLCanvasElement[] = []\n\n private _batchSize: number\n\n private _treatAsBatchInput: boolean = false\n\n private _inputDimensions: number[][] = []\n\n private _inputSize: number\n\n constructor(\n inputs: Array,\n treatAsBatchInput: boolean = false,\n ) {\n if (!Array.isArray(inputs)) {\n throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${inputs}`);\n }\n\n this._treatAsBatchInput = treatAsBatchInput;\n this._batchSize = inputs.length;\n\n inputs.forEach((input, idx) => {\n if (isTensor3D(input)) {\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = input.shape;\n return;\n }\n\n if (isTensor4D(input)) {\n const batchSize = (input as any).shape[0];\n if (batchSize !== 1) {\n throw new Error(`NetInput - tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = (input as any).shape.slice(1);\n return;\n }\n\n const canvas = (input as any) instanceof env.getEnv().Canvas ? input : createCanvasFromMedia(input);\n this._canvases[idx] = canvas;\n this._inputDimensions[idx] = [canvas.height, canvas.width, 3];\n });\n }\n\n public get imageTensors(): Array {\n return this._imageTensors;\n }\n\n public get canvases(): HTMLCanvasElement[] {\n return this._canvases;\n }\n\n public get isBatchInput(): boolean {\n return this.batchSize > 1 || this._treatAsBatchInput;\n }\n\n public get batchSize(): number {\n return this._batchSize;\n }\n\n public get inputDimensions(): number[][] {\n return this._inputDimensions;\n }\n\n public get inputSize(): number | undefined {\n return this._inputSize;\n }\n\n public get reshapedInputDimensions(): Dimensions[] {\n return range(this.batchSize, 0, 1).map(\n (_, batchIdx) => this.getReshapedInputDimensions(batchIdx),\n );\n }\n\n public getInput(batchIdx: number): tf.Tensor3D | tf.Tensor4D | HTMLCanvasElement {\n return this.canvases[batchIdx] || this.imageTensors[batchIdx];\n }\n\n public getInputDimensions(batchIdx: number): number[] {\n return this._inputDimensions[batchIdx];\n }\n\n public getInputHeight(batchIdx: number): number {\n return this._inputDimensions[batchIdx][0];\n }\n\n public getInputWidth(batchIdx: number): number {\n return this._inputDimensions[batchIdx][1];\n }\n\n public getReshapedInputDimensions(batchIdx: number): Dimensions {\n if (typeof this.inputSize !== 'number') {\n throw new Error('getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet');\n }\n\n const width = this.getInputWidth(batchIdx);\n const height = this.getInputHeight(batchIdx);\n return computeReshapedDimensions({ width, height }, this.inputSize);\n }\n\n /**\n * Create a batch tensor from all input canvases and tensors\n * with size [batchSize, inputSize, inputSize, 3].\n *\n * @param inputSize Height and width of the tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The batch tensor.\n */\n public toBatchTensor(inputSize: number, isCenterInputs: boolean = true): tf.Tensor4D {\n this._inputSize = inputSize;\n\n return tf.tidy(() => {\n const inputTensors = range(this.batchSize, 0, 1).map((batchIdx) => {\n const input = this.getInput(batchIdx);\n\n if (input instanceof tf.Tensor) {\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n let imgTensor = isTensor4D(input) ? input : input.expandDims();\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n imgTensor = padToSquare(imgTensor, isCenterInputs);\n\n if (imgTensor.shape[1] !== inputSize || imgTensor.shape[2] !== inputSize) {\n imgTensor = tf.image.resizeBilinear(imgTensor, [inputSize, inputSize]);\n }\n\n return imgTensor.as3D(inputSize, inputSize, 3);\n }\n\n if (input instanceof env.getEnv().Canvas) {\n return tf.browser.fromPixels(imageToSquare(input, inputSize, isCenterInputs));\n }\n\n throw new Error(`toBatchTensor - at batchIdx ${batchIdx}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${input}`);\n });\n\n // const batchTensor = tf.stack(inputTensors.map(t => t.toFloat())).as4D(this.batchSize, inputSize, inputSize, 3)\n const batchTensor = tf.stack(inputTensors.map((t) => tf.cast(t, 'float32'))).as4D(this.batchSize, inputSize, inputSize, 3);\n // const batchTensor = tf.stack(inputTensors.map(t => tf.Tensor.as4D(tf.cast(t, 'float32'))), this.batchSize, inputSize, inputSize, 3);\n\n return batchTensor;\n });\n }\n}\n", "import { env } from '../env/index';\nimport { createCanvas, createCanvasFromMedia } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function imageToSquare(input: HTMLImageElement | HTMLCanvasElement, inputSize: number, centerImage: boolean = false) {\n const { Image, Canvas } = env.getEnv();\n\n if (!(input instanceof Image || input instanceof Canvas)) {\n throw new Error('imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement');\n }\n\n const dims = getMediaDimensions(input);\n const scale = inputSize / Math.max(dims.height, dims.width);\n const width = scale * dims.width;\n const height = scale * dims.height;\n\n const targetCanvas = createCanvas({ width: inputSize, height: inputSize });\n const inputCanvas = input instanceof Canvas ? input : createCanvasFromMedia(input);\n\n const offset = Math.abs(width - height) / 2;\n const dx = centerImage && width < height ? offset : 0;\n const dy = centerImage && height < width ? offset : 0;\n getContext2dOrThrow(targetCanvas).drawImage(inputCanvas, dx, dy, width, height);\n\n return targetCanvas;\n}\n", "import { isTensor3D, isTensor4D } from '../utils/index';\nimport { awaitMediaLoaded } from './awaitMediaLoaded';\nimport { isMediaElement } from './isMediaElement';\nimport { NetInput } from './NetInput';\nimport { resolveInput } from './resolveInput';\nimport { TNetInput } from './types';\n\n/**\n * Validates the input to make sure, they are valid net inputs and awaits all media elements\n * to be finished loading.\n *\n * @param input The input, which can be a media element or an array of different media elements.\n * @returns A NetInput instance, which can be passed into one of the neural networks.\n */\nexport async function toNetInput(inputs: TNetInput): Promise {\n if (inputs instanceof NetInput) {\n return inputs;\n }\n\n const inputArgArray = Array.isArray(inputs)\n ? inputs\n : [inputs];\n\n if (!inputArgArray.length) {\n throw new Error('toNetInput - empty array passed as input');\n }\n\n const getIdxHint = (idx: number) => (Array.isArray(inputs) ? ` at input index ${idx}:` : '');\n\n const inputArray = inputArgArray.map(resolveInput);\n\n inputArray.forEach((input, i) => {\n if (!isMediaElement(input) && !isTensor3D(input) && !isTensor4D(input)) {\n if (typeof inputArgArray[i] === 'string') {\n throw new Error(`toNetInput -${getIdxHint(i)} string passed, but could not resolve HTMLElement for element id ${inputArgArray[i]}`);\n }\n\n throw new Error(`toNetInput -${getIdxHint(i)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);\n }\n\n if (isTensor4D(input)) {\n // if tf.Tensor4D is passed in the input array, the batch size has to be 1\n const batchSize = input.shape[0];\n if (batchSize !== 1) {\n throw new Error(`toNetInput -${getIdxHint(i)} tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n }\n });\n\n // wait for all media elements being loaded\n await Promise.all(\n inputArray.map((input) => isMediaElement(input) && awaitMediaLoaded(input)),\n );\n\n return new NetInput(inputArray, Array.isArray(inputs));\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { Rect } from '../classes/Rect';\nimport { env } from '../env/index';\nimport { createCanvas } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { imageTensorToCanvas } from './imageTensorToCanvas';\nimport { toNetInput } from './toNetInput';\nimport { TNetInput } from './types';\n\n/**\n * Extracts the image regions containing the detected faces.\n *\n * @param input The image that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns The Canvases of the corresponding image region for each detected face.\n */\nexport async function extractFaces(\n input: TNetInput,\n detections: Array,\n): Promise {\n const { Canvas } = env.getEnv();\n\n let canvas = input as HTMLCanvasElement;\n\n if (!(input instanceof Canvas)) {\n const netInput = await toNetInput(input);\n\n if (netInput.batchSize > 1) {\n throw new Error('extractFaces - batchSize > 1 not supported');\n }\n\n const tensorOrCanvas = netInput.getInput(0);\n canvas = tensorOrCanvas instanceof Canvas\n ? tensorOrCanvas\n : await imageTensorToCanvas(tensorOrCanvas);\n }\n\n const ctx = getContext2dOrThrow(canvas);\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(canvas.width, canvas.height).box.floor()\n : det),\n )\n .map((box) => box.clipAtImageBorders(canvas.width, canvas.height));\n\n return boxes.map(({\n x, y, width, height,\n }) => {\n const faceImg = createCanvas({ width, height });\n getContext2dOrThrow(faceImg)\n .putImageData(ctx.getImageData(x, y, width, height), 0, 0);\n return faceImg;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isTensor3D, isTensor4D } from '../utils/index';\n\n/**\n * Extracts the tensors of the image regions containing the detected faces.\n * Useful if you want to compute the face descriptors for the face images.\n * Using this method is faster then extracting a canvas for each face and\n * converting them to tensors individually.\n *\n * @param imageTensor The image tensor that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns Tensors of the corresponding image region for each detected face.\n */\nexport async function extractFaceTensors(\n imageTensor: tf.Tensor3D | tf.Tensor4D,\n detections: Array,\n): Promise {\n if (!isTensor3D(imageTensor) && !isTensor4D(imageTensor)) {\n throw new Error('extractFaceTensors - expected image tensor to be 3D or 4D');\n }\n\n if (isTensor4D(imageTensor) && imageTensor.shape[0] > 1) {\n throw new Error('extractFaceTensors - batchSize > 1 not supported');\n }\n\n return tf.tidy(() => {\n const [imgHeight, imgWidth, numChannels] = imageTensor.shape.slice(isTensor4D(imageTensor) ? 1 : 0);\n\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(imgWidth, imgHeight).box\n : det),\n )\n .map((box) => box.clipAtImageBorders(imgWidth, imgHeight));\n\n const faceTensors = boxes.map(({\n x, y, width, height,\n }) => tf.slice3d(imageTensor.as3D(imgHeight, imgWidth, numChannels), [y, x, 0], [height, width, numChannels]));\n\n return faceTensors;\n });\n}\n", "import { env } from '../env/index';\n\nexport async function fetchOrThrow(\n url: string,\n // eslint-disable-next-line no-undef\n init?: RequestInit,\n): Promise {\n const { fetch } = env.getEnv();\n const res = await fetch(url, init);\n if (!(res.status < 400)) {\n throw new Error(`failed to fetch: (${res.status}) ${res.statusText}, from url: ${res.url}`);\n }\n return res;\n}\n", "import { bufferToImage } from './bufferToImage';\nimport { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchImage(uri: string): Promise {\n const res = await fetchOrThrow(uri);\n const blob = await (res).blob();\n\n if (!blob.type.startsWith('image/')) {\n throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${blob.type}, for url: ${res.url}`);\n }\n return bufferToImage(blob);\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchJson(uri: string): Promise {\n return (await fetchOrThrow(uri)).json();\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchNetWeights(uri: string): Promise {\n return new Float32Array(await (await fetchOrThrow(uri)).arrayBuffer());\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { getModelUris } from '../common/getModelUris';\nimport { fetchJson } from './fetchJson';\n\nexport async function loadWeightMap(\n uri: string | undefined,\n defaultModelName: string,\n): Promise {\n const { manifestUri, modelBaseUri } = getModelUris(uri, defaultModelName);\n const manifest = await fetchJson(manifestUri);\n // if (manifest['weightsManifest']) manifest = manifest['weightsManifest'];\n return tf.io.loadWeights(manifest, modelBaseUri);\n}\n", "export function getModelUris(uri: string | undefined, defaultModelName: string) {\n const defaultManifestFilename = `${defaultModelName}-weights_manifest.json`;\n\n if (!uri) {\n return {\n modelBaseUri: '',\n manifestUri: defaultManifestFilename,\n };\n }\n\n if (uri === '/') {\n return {\n modelBaseUri: '/',\n manifestUri: `/${defaultManifestFilename}`,\n };\n }\n // eslint-disable-next-line no-nested-ternary\n const protocol = uri.startsWith('http://') ? 'http://' : uri.startsWith('https://') ? 'https://' : '';\n uri = uri.replace(protocol, '');\n\n const parts = uri.split('/').filter((s) => s);\n\n const manifestFile = uri.endsWith('.json')\n ? parts[parts.length - 1]\n : defaultManifestFilename;\n\n let modelBaseUri = protocol + (uri.endsWith('.json') ? parts.slice(0, parts.length - 1) : parts).join('/');\n modelBaseUri = uri.startsWith('/') ? `/${modelBaseUri}` : modelBaseUri;\n\n return {\n modelBaseUri,\n manifestUri: modelBaseUri === '/' ? `/${manifestFile}` : `${modelBaseUri}/${manifestFile}`,\n };\n}\n", "import { IDimensions } from '../classes/index';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function matchDimensions(input: IDimensions, reference: IDimensions, useMediaDimensions: boolean = false) {\n const { width, height } = useMediaDimensions\n ? getMediaDimensions(reference)\n : reference;\n input.width = width;\n input.height = height;\n return { width, height };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock4 } from './denseBlock';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { FaceFeatureExtractorParams, IFaceFeatureExtractor } from './types';\n\nexport class FaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('FaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock4(normalized, params.dense0, true);\n out = denseBlock4(out, params.dense1);\n out = denseBlock4(out, params.dense2);\n out = denseBlock4(out, params.dense3);\n out = tf.avgPool(out, [7, 7], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../dist/tfjs.esm.js';\n\nimport { ParamMapping } from './common/index';\nimport { getModelUris } from './common/getModelUris';\nimport { loadWeightMap } from './dom/index';\nimport { env } from './env/index';\n\nexport abstract class NeuralNetwork {\n\n protected _params: TNetParams | undefined = undefined\n protected _paramMappings: ParamMapping[] = []\n\n constructor(protected _name: string) {\n }\n\n public get params(): TNetParams | undefined { return this._params }\n public get paramMappings(): ParamMapping[] { return this._paramMappings }\n public get isLoaded(): boolean { return !!this.params }\n\n public getParamFromPath(paramPath: string): tf.Tensor {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n return obj[objProp]\n }\n\n public reassignParamFromPath(paramPath: string, tensor: tf.Tensor) {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n obj[objProp].dispose()\n obj[objProp] = tensor\n }\n\n public getParamList() {\n return this._paramMappings.map(({ paramPath }) => ({\n path: paramPath,\n tensor: this.getParamFromPath(paramPath)\n }))\n }\n\n public getTrainableParams() {\n return this.getParamList().filter(param => param.tensor instanceof tf.Variable)\n }\n\n public getFrozenParams() {\n return this.getParamList().filter(param => !(param.tensor instanceof tf.Variable))\n }\n\n public variable() {\n this.getFrozenParams().forEach(({ path, tensor }) => {\n this.reassignParamFromPath(path, tensor.variable())\n })\n }\n\n public freeze() {\n this.getTrainableParams().forEach(({ path, tensor: variable }) => {\n const tensor = tf.tensor(variable.dataSync())\n variable.dispose()\n this.reassignParamFromPath(path, tensor)\n })\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.getParamList().forEach(param => {\n if (throwOnRedispose && param.tensor.isDisposed) {\n throw new Error(`param tensor has already been disposed for path ${param.path}`)\n }\n param.tensor.dispose()\n })\n this._params = undefined\n }\n\n public serializeParams(): Float32Array {\n return new Float32Array(\n this.getParamList()\n .map(({ tensor }) => Array.from(tensor.dataSync()) as number[])\n .reduce((flat, arr) => flat.concat(arr))\n )\n }\n\n public async load(weightsOrUrl: Float32Array | string | undefined): Promise {\n if (weightsOrUrl instanceof Float32Array) {\n this.extractWeights(weightsOrUrl)\n return\n }\n\n await this.loadFromUri(weightsOrUrl)\n }\n\n public async loadFromUri(uri: string | undefined) {\n if (uri && typeof uri !== 'string') {\n throw new Error(`${this._name}.loadFromUri - expected model uri`)\n }\n\n const weightMap = await loadWeightMap(uri, this.getDefaultModelName())\n this.loadFromWeightMap(weightMap)\n }\n\n public async loadFromDisk(filePath: string | undefined) {\n if (filePath && typeof filePath !== 'string') {\n throw new Error(`${this._name}.loadFromDisk - expected model file path`)\n }\n\n const { readFile } = env.getEnv()\n\n const { manifestUri, modelBaseUri } = getModelUris(filePath, this.getDefaultModelName())\n\n const fetchWeightsFromDisk = (filePaths: string[]) => Promise.all(\n filePaths.map(filePath => readFile(filePath).then(buf => buf.buffer))\n )\n const loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk)\n const manifest = JSON.parse((await readFile(manifestUri)).toString())\n const weightMap = await loadWeights(manifest, modelBaseUri)\n\n this.loadFromWeightMap(weightMap)\n }\n\n public loadFromWeightMap(weightMap: tf.NamedTensorMap) {\n const {\n paramMappings,\n params\n } = this.extractParamsFromWeigthMap(weightMap)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n public extractWeights(weights: Float32Array) {\n const {\n paramMappings,\n params\n } = this.extractParams(weights)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n private traversePropertyPath(paramPath: string) {\n if (!this.params) {\n throw new Error(`traversePropertyPath - model has no loaded params`)\n }\n\n const result = paramPath.split('/').reduce((res: { nextObj: any, obj?: any, objProp?: string }, objProp) => {\n if (!res.nextObj.hasOwnProperty(objProp)) {\n throw new Error(`traversePropertyPath - object does not have property ${objProp}, for path ${paramPath}`)\n }\n\n return { obj: res.nextObj, objProp, nextObj: res.nextObj[objProp] }\n }, { nextObj: this.params })\n\n const { obj, objProp } = result\n if (!obj || !objProp || !(obj[objProp] instanceof tf.Tensor)) {\n throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${paramPath}`)\n }\n\n return { obj, objProp }\n }\n\n protected abstract getDefaultModelName(): string\n protected abstract extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TNetParams, paramMappings: ParamMapping[] }\n protected abstract extractParams(weights: Float32Array): { params: TNetParams, paramMappings: ParamMapping[] }\n}", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams, SeparableConvParams } from '../common/index';\nimport { depthwiseSeparableConv } from '../common/depthwiseSeparableConv';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function denseBlock3(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock3Params,\n isFirstLayer: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, [2, 2], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, [2, 2]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n });\n}\n\nexport function denseBlock4(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock4Params,\n isFirstLayer: boolean = false,\n isScaleDown: boolean = true,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, isScaleDown ? [2, 2] : [1, 1], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, isScaleDown ? [2, 2] : [1, 1]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n const in4 = tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n const out4 = depthwiseSeparableConv(in4, denseBlockParams.conv3, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, tf.add(out3, out4)))) as tf.Tensor4D;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { SeparableConvParams } from './types';\n\nexport function depthwiseSeparableConv(\n x: tf.Tensor4D,\n params: SeparableConvParams,\n stride: [number, number],\n): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same');\n out = tf.add(out, params.bias);\n return out;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams } from './types';\n\nexport function convLayer(\n x: tf.Tensor4D,\n params: ConvParams,\n padding: 'valid' | 'same' = 'same',\n withRelu: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out = tf.add(\n tf.conv2d(x, params.filters, [1, 1], padding),\n params.bias,\n ) as tf.Tensor4D;\n\n return withRelu ? tf.relu(out) : out;\n });\n}\n", "import { ParamMapping } from './types';\n\nexport function disposeUnusedWeightTensors(weightMap: any, paramMappings: ParamMapping[]) {\n Object.keys(weightMap).forEach((path) => {\n if (!paramMappings.some((pm) => pm.originalPath === path)) {\n weightMap[path].dispose();\n }\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams, ExtractWeightsFunction, ParamMapping } from './types';\n\nexport function extractConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams => {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ExtractWeightsFunction, FCParams, ParamMapping } from './types';\n\nexport function extractFCParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): FCParams => {\n const fc_weights = tf.tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]);\n const fc_bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return {\n weights: fc_weights,\n bias: fc_bias,\n };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ExtractWeightsFunction, ParamMapping, SeparableConvParams } from './types';\n\nexport function extractSeparableConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (channelsIn: number, channelsOut: number, mappedPrefix: string): SeparableConvParams => {\n const depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]);\n const pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]);\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/depthwise_filter` },\n { paramPath: `${mappedPrefix}/pointwise_filter` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n\nexport function loadSeparableConvParamsFactory(\n // eslint-disable-next-line no-unused-vars\n extractWeightEntry: (originalPath: string, paramRank: number) => T,\n) {\n return (prefix: string): SeparableConvParams => {\n const depthwise_filter = extractWeightEntry(`${prefix}/depthwise_filter`, 4);\n const pointwise_filter = extractWeightEntry(`${prefix}/pointwise_filter`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\n// eslint-disable-next-line no-unused-vars\nexport type ExtractWeightsFunction = (numWeights: number) => Float32Array\n\nexport type ParamMapping = {\n originalPath?: string\n paramPath: string\n}\n\nexport type ConvParams = {\n filters: tf.Tensor4D\n bias: tf.Tensor1D\n}\n\nexport type FCParams = {\n weights: tf.Tensor2D\n bias: tf.Tensor1D\n}\n\nexport class SeparableConvParams {\n // eslint-disable-next-line no-useless-constructor\n constructor(\n // eslint-disable-next-line no-unused-vars\n public depthwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public pointwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public bias: tf.Tensor1D,\n // eslint-disable-next-line no-empty-function\n ) {}\n}\n", "import { isTensor } from '../utils/index';\nimport { ParamMapping } from './types';\n\nexport function extractWeightEntryFactory(weightMap: any, paramMappings: ParamMapping[]) {\n return (originalPath: string, paramRank: number, mappedPath?: string) => {\n const tensor = weightMap[originalPath];\n\n if (!isTensor(tensor, paramRank)) {\n throw new Error(`expected weightMap[${originalPath}] to be a Tensor${paramRank}D, instead have ${tensor}`);\n }\n\n paramMappings.push(\n { originalPath, paramPath: mappedPath || originalPath },\n );\n\n return tensor;\n };\n}\n", "export function extractWeightsFactory(weights: Float32Array) {\n let remainingWeights = weights;\n\n function extractWeights(numWeights: number): Float32Array {\n const ret = remainingWeights.slice(0, numWeights);\n remainingWeights = remainingWeights.slice(numWeights);\n return ret;\n }\n\n function getRemainingWeights(): Float32Array {\n return remainingWeights;\n }\n\n return {\n extractWeights,\n getRemainingWeights,\n };\n}\n", "import {\n extractConvParamsFactory,\n extractSeparableConvParamsFactory,\n ExtractWeightsFunction,\n ParamMapping,\n} from '../common/index';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractDenseBlock3Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv0`)\n : extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/conv0`);\n const conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv1`);\n const conv2 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const { conv0, conv1, conv2 } = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer);\n const conv3 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock4Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock4Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock4Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock4Params(64, 128, 'dense2');\n const dense3 = extractDenseBlock4Params(128, 256, 'dense3');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: {\n dense0, dense1, dense2, dense3,\n },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams } from './types';\n\n// eslint-disable-next-line no-unused-vars\nexport function loadConvParamsFactory(extractWeightEntry: (originalPath: string, paramRank: number) => T) {\n return (prefix: string): ConvParams => {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return { filters, bias };\n };\n}\n", "import { extractWeightEntryFactory, loadSeparableConvParamsFactory, ParamMapping } from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractDenseBlock3Params(prefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(prefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n const conv3 = extractSeparableConvParams(`${prefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock4Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock4Params('dense0', true),\n dense1: extractDenseBlock4Params('dense1'),\n dense2: extractDenseBlock4Params('dense2'),\n dense3: extractDenseBlock4Params('dense3'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { NetInput } from '../dom/index';\nimport {\n FaceFeatureExtractorParams,\n IFaceFeatureExtractor,\n TinyFaceFeatureExtractorParams,\n} from '../faceFeatureExtractor/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { NetParams } from './types';\nimport { seperateWeightMaps } from './util';\n\nexport abstract class FaceProcessor<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends NeuralNetwork {\n protected _faceFeatureExtractor: IFaceFeatureExtractor\n\n constructor(_name: string, faceFeatureExtractor: IFaceFeatureExtractor) {\n super(_name);\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): IFaceFeatureExtractor {\n return this._faceFeatureExtractor;\n }\n\n protected abstract getDefaultModelName(): string\n\n protected abstract getClassifierChannelsIn(): number\n\n protected abstract getClassifierChannelsOut(): number\n\n public runNet(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n return fullyConnectedLayer(bottleneckFeatures.as2D(bottleneckFeatures.shape[0], -1), params.fc);\n });\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights, this.getClassifierChannelsIn(), this.getClassifierChannelsOut());\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const cIn = this.getClassifierChannelsIn();\n const cOut = this.getClassifierChannelsOut();\n const classifierWeightSize = (cOut * cIn) + cOut;\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FCParams } from './types';\n\nexport function fullyConnectedLayer(\n x: tf.Tensor2D,\n params: FCParams,\n): tf.Tensor2D {\n return tf.tidy(() => tf.add(\n tf.matMul(x, params.weights),\n params.bias,\n ));\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array, channelsIn: number, channelsOut: number): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const fc = extractFCParams(channelsIn, channelsOut, 'fc');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: extractFcParams('fc'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nexport function seperateWeightMaps(weightMap: tf.NamedTensorMap) {\n const featureExtractorMap: tf.NamedTensorMap = {};\n const classifierMap: tf.NamedTensorMap = {};\n\n Object.keys(weightMap).forEach((key) => {\n const map = key.startsWith('fc') ? classifierMap : featureExtractorMap;\n map[key] = weightMap[key];\n });\n\n return { featureExtractorMap, classifierMap };\n}\n", "export const FACE_EXPRESSION_LABELS = ['neutral', 'happy', 'sad', 'angry', 'fearful', 'disgusted', 'surprised'];\n\nexport class FaceExpressions {\n public neutral: number\n\n public happy: number\n\n public sad: number\n\n public angry: number\n\n public fearful: number\n\n public disgusted: number\n\n public surprised: number\n\n constructor(probabilities: number[] | Float32Array) {\n if (probabilities.length !== 7) {\n throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${probabilities.length}`);\n }\n\n FACE_EXPRESSION_LABELS.forEach((expression, idx) => {\n this[expression] = probabilities[idx];\n });\n }\n\n asSortedArray() {\n return FACE_EXPRESSION_LABELS\n .map((expression) => ({ expression, probability: this[expression] as number }))\n .sort((e0, e1) => e1.probability - e0.probability);\n }\n}\n", "import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\n\nexport type WithFaceExpressions = TSource & {\n expressions: FaceExpressions\n}\n\nexport function isWithFaceExpressions(obj: any): obj is WithFaceExpressions<{}> {\n return obj.expressions instanceof FaceExpressions;\n}\n\nexport function extendWithFaceExpressions<\n TSource\n>(\n sourceObj: TSource,\n expressions: FaceExpressions,\n): WithFaceExpressions {\n const extension = { expressions };\n return { ...sourceObj, ...extension };\n}\n", "import { IPoint, Point } from '../classes/index';\nimport { FaceExpressions } from '../faceExpressionNet/index';\nimport { isWithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { round } from '../utils/index';\nimport { DrawTextField } from './DrawTextField';\n\nexport type DrawFaceExpressionsInput = FaceExpressions | WithFaceExpressions<{}>\n\nexport function drawFaceExpressions(\n canvasArg: string | HTMLCanvasElement,\n faceExpressions: DrawFaceExpressionsInput | Array,\n minConfidence = 0.1,\n textFieldAnchor?: IPoint,\n) {\n const faceExpressionsArray = Array.isArray(faceExpressions) ? faceExpressions : [faceExpressions];\n\n faceExpressionsArray.forEach((e) => {\n // eslint-disable-next-line no-nested-ternary\n const expr = e instanceof FaceExpressions\n ? e\n : (isWithFaceExpressions(e) ? e.expressions : undefined);\n if (!expr) {\n throw new Error('drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof');\n }\n\n const sorted = expr.asSortedArray();\n const resultsToDisplay = sorted.filter((exprLocal) => exprLocal.probability > minConfidence);\n\n const anchor = isWithFaceDetection(e)\n ? e.detection.box.bottomLeft\n : (textFieldAnchor || new Point(0, 0));\n\n const drawTextField = new DrawTextField(\n resultsToDisplay.map((exprLocal) => `${exprLocal.expression} (${round(exprLocal.probability)})`),\n anchor,\n );\n drawTextField.draw(canvasArg);\n });\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { isWithFaceDetection, WithFaceDetection } from './WithFaceDetection';\n\nexport type WithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 > = TSource & {\n landmarks: TFaceLandmarks\n unshiftedLandmarks: TFaceLandmarks\n alignedRect: FaceDetection\n }\n\nexport function isWithFaceLandmarks(obj: any): obj is WithFaceLandmarks, FaceLandmarks> {\n return isWithFaceDetection(obj)\n // eslint-disable-next-line dot-notation\n && obj['landmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['unshiftedLandmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['alignedRect'] instanceof FaceDetection;\n}\n\nexport function extendWithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 >(sourceObj: TSource, unshiftedLandmarks: TFaceLandmarks): WithFaceLandmarks {\n const { box: shift } = sourceObj.detection;\n const landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y);\n\n const rect = landmarks.align();\n const { imageDims } = sourceObj.detection;\n const alignedRect = new FaceDetection(sourceObj.detection.score, rect.rescale(imageDims.reverse()), imageDims);\n\n const extension = {\n landmarks,\n unshiftedLandmarks,\n alignedRect,\n };\n\n return { ...sourceObj, ...extension };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IPoint } from '../classes/index';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { drawContour } from './drawContour';\n\nexport interface IDrawFaceLandmarksOptions {\n drawLines?: boolean\n drawPoints?: boolean\n lineWidth?: number\n pointSize?: number\n lineColor?: string\n pointColor?: string\n}\n\nexport class DrawFaceLandmarksOptions {\n public drawLines: boolean\n\n public drawPoints: boolean\n\n public lineWidth: number\n\n public pointSize: number\n\n public lineColor: string\n\n public pointColor: string\n\n constructor(options: IDrawFaceLandmarksOptions = {}) {\n const {\n drawLines = true, drawPoints = true, lineWidth, lineColor, pointSize, pointColor,\n } = options;\n this.drawLines = drawLines;\n this.drawPoints = drawPoints;\n this.lineWidth = lineWidth || 1;\n this.pointSize = pointSize || 2;\n this.lineColor = lineColor || 'rgba(0, 255, 255, 1)';\n this.pointColor = pointColor || 'rgba(255, 0, 255, 1)';\n }\n}\n\nexport class DrawFaceLandmarks {\n public faceLandmarks: FaceLandmarks\n\n public options: DrawFaceLandmarksOptions\n\n constructor(\n faceLandmarks: FaceLandmarks,\n options: IDrawFaceLandmarksOptions = {},\n ) {\n this.faceLandmarks = faceLandmarks;\n this.options = new DrawFaceLandmarksOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const {\n drawLines, drawPoints, lineWidth, lineColor, pointSize, pointColor,\n } = this.options;\n\n if (drawLines && this.faceLandmarks instanceof FaceLandmarks68) {\n ctx.strokeStyle = lineColor;\n ctx.lineWidth = lineWidth;\n drawContour(ctx, this.faceLandmarks.getJawOutline());\n drawContour(ctx, this.faceLandmarks.getLeftEyeBrow());\n drawContour(ctx, this.faceLandmarks.getRightEyeBrow());\n drawContour(ctx, this.faceLandmarks.getNose());\n drawContour(ctx, this.faceLandmarks.getLeftEye(), true);\n drawContour(ctx, this.faceLandmarks.getRightEye(), true);\n drawContour(ctx, this.faceLandmarks.getMouth(), true);\n }\n\n if (drawPoints) {\n ctx.strokeStyle = pointColor;\n ctx.fillStyle = pointColor;\n\n const drawPoint = (pt: IPoint) => {\n ctx.beginPath();\n ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI);\n ctx.fill();\n };\n this.faceLandmarks.positions.forEach(drawPoint);\n }\n }\n}\n\nexport type DrawFaceLandmarksInput = FaceLandmarks | WithFaceLandmarks>\n\nexport function drawFaceLandmarks(\n canvasArg: string | HTMLCanvasElement,\n faceLandmarks: DrawFaceLandmarksInput | Array,\n) {\n const faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks];\n faceLandmarksArray.forEach((f) => {\n // eslint-disable-next-line no-nested-ternary\n const landmarks = f instanceof FaceLandmarks\n ? f\n : (isWithFaceLandmarks(f) ? f.landmarks : undefined);\n if (!landmarks) {\n throw new Error('drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof');\n }\n\n new DrawFaceLandmarks(landmarks).draw(canvasArg);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { seperateWeightMaps } from '../faceProcessor/util';\nimport { TinyXception } from '../xception/TinyXception';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport {\n AgeAndGenderPrediction, Gender, NetOutput, NetParams,\n} from './types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\n\nexport class AgeGenderNet extends NeuralNetwork {\n private _faceFeatureExtractor: TinyXception\n\n constructor(faceFeatureExtractor: TinyXception = new TinyXception(2)) {\n super('AgeGenderNet');\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): TinyXception {\n return this._faceFeatureExtractor;\n }\n\n public runNet(input: NetInput | tf.Tensor4D): NetOutput {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n\n const pooled = tf.avgPool(bottleneckFeatures, [7, 7], [2, 2], 'valid').as2D(bottleneckFeatures.shape[0], -1);\n const age = fullyConnectedLayer(pooled, params.fc.age).as1D();\n const gender = fullyConnectedLayer(pooled, params.fc.gender);\n return { age, gender };\n });\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): NetOutput {\n return tf.tidy(() => {\n const { age, gender } = this.runNet(input);\n return { age, gender: tf.softmax(gender) };\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictAgeAndGender(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n\n const ages = tf.unstack(out.age);\n const genders = tf.unstack(out.gender);\n const ageAndGenderTensors = ages.map((ageTensor, i) => ({\n ageTensor,\n genderTensor: genders[i],\n }));\n\n const predictionsByBatch = await Promise.all(\n ageAndGenderTensors.map(async ({ ageTensor, genderTensor }) => {\n const age = (await ageTensor.data())[0];\n const probMale = (await genderTensor.data())[0];\n const isMale = probMale > 0.5;\n const gender = isMale ? Gender.MALE : Gender.FEMALE;\n const genderProbability = isMale ? probMale : (1 - probMale);\n\n ageTensor.dispose();\n genderTensor.dispose();\n return { age, gender, genderProbability };\n }),\n );\n out.age.dispose();\n out.gender.dispose();\n\n return netInput.isBatchInput ? predictionsByBatch as AgeAndGenderPrediction[] : predictionsByBatch[0] as AgeAndGenderPrediction;\n }\n\n protected getDefaultModelName(): string {\n return 'age_gender_model';\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights);\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const classifierWeightSize = (512 * 1 + 1) + (512 * 2 + 2);\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams, depthwiseSeparableConv } from '../common/index';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { range } from '../utils/index';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction conv(x: tf.Tensor4D, params: ConvParams, stride: [number, number]): tf.Tensor4D {\n return tf.add(tf.conv2d(x, params.filters, stride, 'same'), params.bias);\n}\n\nfunction reductionBlock(x: tf.Tensor4D, params: ReductionBlockParams, isActivateInput: boolean = true): tf.Tensor4D {\n let out = isActivateInput ? tf.relu(x) : x;\n out = depthwiseSeparableConv(out, params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = tf.maxPool(out, [3, 3], [2, 2], 'same');\n out = tf.add(out, conv(x, params.expansion_conv, [2, 2]));\n return out;\n}\n\nfunction mainBlock(x: tf.Tensor4D, params: MainBlockParams): tf.Tensor4D {\n let out = depthwiseSeparableConv(tf.relu(x), params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv2, [1, 1]);\n out = tf.add(out, x);\n return out;\n}\n\nexport class TinyXception extends NeuralNetwork {\n private _numMainBlocks: number\n\n constructor(numMainBlocks: number) {\n super('TinyXception');\n this._numMainBlocks = numMainBlocks;\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyXception - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = tf.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));\n out = reductionBlock(out, params.entry_flow.reduction_block_0, false);\n out = reductionBlock(out, params.entry_flow.reduction_block_1);\n\n range(this._numMainBlocks, 0, 1).forEach((idx) => {\n out = mainBlock(out, params.middle_flow[`main_block_${idx}`]);\n });\n\n out = reductionBlock(out, params.exit_flow.reduction_block);\n out = tf.relu(depthwiseSeparableConv(out, params.exit_flow.separable_conv, [1, 1]));\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_xception_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this._numMainBlocks);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights, this._numMainBlocks);\n }\n}\n", "import { extractConvParamsFactory, extractSeparableConvParamsFactory, extractWeightsFactory } from '../common/index';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractReductionBlockParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(channels: number, mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParams(weights: Float32Array, numMainBlocks: number): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const entry_flow_conv_in = extractConvParams(3, 32, 3, 'entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams(32, 64, 'entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams(64, 128, 'entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(128, `middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams(128, 256, 'exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams(256, 512, 'exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { entry_flow, middle_flow, exit_flow },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n disposeUnusedWeightTensors,\n extractWeightEntryFactory,\n loadSeparableConvParamsFactory,\n ParamMapping,\n} from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractReductionBlockParams(mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(`${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(`${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n numMainBlocks: number,\n): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const entry_flow_conv_in = extractConvParams('entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams('entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams('entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(`middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams('exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams('exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params: { entry_flow, middle_flow, exit_flow }, paramMappings };\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const age = extractFCParams(512, 1, 'fc/age');\n const gender = extractFCParams(512, 2, 'fc/gender');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc: { age, gender } },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: {\n age: extractFcParams('fc/age'),\n gender: extractFcParams('fc/gender'),\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FCParams } from '../common/index';\n\n// eslint-disable-next-line no-shadow\nexport enum Gender {\n // eslint-disable-next-line no-unused-vars\n FEMALE = 'female',\n // eslint-disable-next-line no-unused-vars\n MALE = 'male'\n}\n\nexport type AgeAndGenderPrediction = {\n age: number\n gender: Gender\n genderProbability: number\n}\n\nexport type NetOutput = { age: tf.Tensor1D, gender: tf.Tensor2D }\n\nexport type NetParams = {\n fc: {\n age: FCParams\n gender: FCParams\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { IDimensions, Point } from '../classes/index';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractorParams, TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { isEven } from '../utils/index';\n\nexport abstract class FaceLandmark68NetBase<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends FaceProcessor {\n public postProcess(output: tf.Tensor2D, inputSize: number, originalDimensions: IDimensions[]): tf.Tensor2D {\n const inputDimensions = originalDimensions.map(({ width, height }) => {\n const scale = inputSize / Math.max(height, width);\n return {\n width: width * scale,\n height: height * scale,\n };\n });\n\n const batchSize = inputDimensions.length;\n\n return tf.tidy(() => {\n const createInterleavedTensor = (fillX: number, fillY: number) => tf.stack([tf.fill([68], fillX, 'float32'), tf.fill([68], fillY, 'float32')], 1).as2D(1, 136).as1D();\n\n // eslint-disable-next-line no-unused-vars\n const getPadding = (batchIdx: number, cond: (w: number, h: number) => boolean): number => {\n const { width, height } = inputDimensions[batchIdx];\n return cond(width, height) ? Math.abs(width - height) / 2 : 0;\n };\n\n const getPaddingX = (batchIdx: number) => getPadding(batchIdx, (w, h) => w < h);\n const getPaddingY = (batchIdx: number) => getPadding(batchIdx, (w, h) => h < w);\n\n const landmarkTensors = output\n .mul(tf.fill([batchSize, 136], inputSize, 'float32'))\n .sub(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n getPaddingX(batchIdx),\n getPaddingY(batchIdx),\n ))))\n .div(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n inputDimensions[batchIdx].width,\n inputDimensions[batchIdx].height,\n ))));\n\n return landmarkTensors as tf.Tensor2D;\n });\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n return tf.tidy(() => {\n const out = this.runNet(input);\n return this.postProcess(\n out,\n input.inputSize as number,\n input.inputDimensions.map(([height, width]) => ({ height, width })),\n );\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async detectLandmarks(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const landmarkTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const landmarksForBatch = await Promise.all(landmarkTensors.map(\n async (landmarkTensor, batchIdx) => {\n const landmarksArray = Array.from(await landmarkTensor.data());\n const xCoords = landmarksArray.filter((_, i) => isEven(i));\n const yCoords = landmarksArray.filter((_, i) => !isEven(i));\n\n return new FaceLandmarks68(\n Array(68).fill(0).map((_, i) => new Point(xCoords[i] as number, yCoords[i] as number)),\n {\n height: netInput.getInputHeight(batchIdx),\n width: netInput.getInputWidth(batchIdx),\n },\n );\n },\n ));\n\n landmarkTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput ? landmarksForBatch as FaceLandmarks68[] : landmarksForBatch[0] as FaceLandmarks68;\n }\n\n protected getClassifierChannelsOut(): number {\n return 136;\n }\n}\n", "import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68Net extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceLandmark68Net', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock3 } from './denseBlock';\nimport { extractParamsFromWeigthMapTiny } from './extractParamsFromWeigthMapTiny';\nimport { extractParamsTiny } from './extractParamsTiny';\nimport { IFaceFeatureExtractor, TinyFaceFeatureExtractorParams } from './types';\n\nexport class TinyFaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('TinyFaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyFaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock3(normalized, params.dense0, true);\n out = denseBlock3(out, params.dense1);\n out = denseBlock3(out, params.dense2);\n out = tf.avgPool(out, [14, 14], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_tiny_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMapTiny(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParamsTiny(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMapTiny(\n weightMap: tf.NamedTensorMap,\n): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock3Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock3Params('dense0', true),\n dense1: extractDenseBlock3Params('dense1'),\n dense2: extractDenseBlock3Params('dense2'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsTiny(weights: Float32Array): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock3Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock3Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock3Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock3Params(64, 128, 'dense2');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { dense0, dense1, dense2 },\n };\n}\n", "import { TinyFaceFeatureExtractor } from '../faceFeatureExtractor/TinyFaceFeatureExtractor';\nimport { TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68TinyNet extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: TinyFaceFeatureExtractor = new TinyFaceFeatureExtractor()) {\n super('FaceLandmark68TinyNet', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_tiny_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 128;\n }\n}\n", "import { FaceLandmark68Net } from './FaceLandmark68Net';\n\nexport * from './FaceLandmark68Net';\nexport * from './FaceLandmark68TinyNet';\n\nexport class FaceLandmarkNet extends FaceLandmark68Net {}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { convDown } from './convLayer';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { residual, residualDown } from './residualLayer';\nimport { NetParams } from './types';\n\nexport class FaceRecognitionNet extends NeuralNetwork {\n constructor() {\n super('FaceRecognitionNet');\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceRecognitionNet - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(150, true).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(150, true), 'float32');\n\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = convDown(normalized, params.conv32_down);\n out = tf.maxPool(out, 3, 2, 'valid');\n\n out = residual(out, params.conv32_1);\n out = residual(out, params.conv32_2);\n out = residual(out, params.conv32_3);\n\n out = residualDown(out, params.conv64_down);\n out = residual(out, params.conv64_1);\n out = residual(out, params.conv64_2);\n out = residual(out, params.conv64_3);\n\n out = residualDown(out, params.conv128_down);\n out = residual(out, params.conv128_1);\n out = residual(out, params.conv128_2);\n\n out = residualDown(out, params.conv256_down);\n out = residual(out, params.conv256_1);\n out = residual(out, params.conv256_2);\n out = residualDown(out, params.conv256_down_out);\n\n const globalAvg = out.mean([1, 2]) as tf.Tensor2D;\n const fullyConnected = tf.matMul(globalAvg, params.fc);\n\n return fullyConnected;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async computeFaceDescriptor(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n\n const faceDescriptorTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const faceDescriptorsForBatch = await Promise.all(faceDescriptorTensors.map(\n (t) => t.data(),\n )) as Float32Array[];\n\n faceDescriptorTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput\n ? faceDescriptorsForBatch\n : faceDescriptorsForBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_recognition_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { scale } from './scaleLayer';\nimport { ConvLayerParams } from './types';\n\nfunction convLayer(\n x: tf.Tensor4D,\n params: ConvLayerParams,\n strides: [number, number],\n withRelu: boolean,\n padding: 'valid' | 'same' = 'same',\n): tf.Tensor4D {\n const { filters, bias } = params.conv;\n\n let out = tf.conv2d(x, filters, strides, padding);\n out = tf.add(out, bias);\n out = scale(out, params.scale);\n return withRelu ? tf.relu(out) : out;\n}\n\nexport function conv(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], true);\n}\n\nexport function convNoRelu(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], false);\n}\n\nexport function convDown(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [2, 2], true, 'valid');\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ScaleLayerParams } from './types';\n\nexport function scale(x: tf.Tensor4D, params: ScaleLayerParams): tf.Tensor4D {\n return tf.add(tf.mul(x, params.weights), params.biases);\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n ConvParams, extractWeightsFactory, ExtractWeightsFunction, ParamMapping,\n} from '../common/index';\nimport { isFloat } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractFilterValues(numFilterValues: number, numFilters: number, filterSize: number): tf.Tensor4D {\n const weights = extractWeights(numFilterValues);\n const depth = weights.length / (numFilters * filterSize * filterSize);\n\n if (isFloat(depth)) {\n throw new Error(`depth has to be an integer: ${depth}, weights.length: ${weights.length}, numFilters: ${numFilters}, filterSize: ${filterSize}`);\n }\n\n return tf.tidy(\n () => tf.transpose(\n tf.tensor4d(weights, [numFilters, depth, filterSize, filterSize]),\n [2, 3, 1, 0],\n ),\n );\n }\n\n function extractConvParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams {\n const filters = extractFilterValues(numFilterValues, numFilters, filterSize);\n const bias = tf.tensor1d(extractWeights(numFilters));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n }\n\n function extractScaleLayerParams(numWeights: number, mappedPrefix: string): ScaleLayerParams {\n const weights = tf.tensor1d(extractWeights(numWeights));\n const biases = tf.tensor1d(extractWeights(numWeights));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/biases` },\n );\n\n return {\n weights,\n biases,\n };\n }\n\n function extractConvLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvLayerParams {\n const conv = extractConvParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv`);\n const scale = extractScaleLayerParams(numFilters, `${mappedPrefix}/scale`);\n\n return { conv, scale };\n }\n\n function extractResidualLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n isDown: boolean = false,\n ): ResidualLayerParams {\n const conv1 = extractConvLayerParams((isDown ? 0.5 : 1) * numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv1`);\n const conv2 = extractConvLayerParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv2`);\n\n return { conv1, conv2 };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const conv32_down = extractConvLayerParams(4704, 32, 7, 'conv32_down');\n const conv32_1 = extractResidualLayerParams(9216, 32, 3, 'conv32_1');\n const conv32_2 = extractResidualLayerParams(9216, 32, 3, 'conv32_2');\n const conv32_3 = extractResidualLayerParams(9216, 32, 3, 'conv32_3');\n\n const conv64_down = extractResidualLayerParams(36864, 64, 3, 'conv64_down', true);\n const conv64_1 = extractResidualLayerParams(36864, 64, 3, 'conv64_1');\n const conv64_2 = extractResidualLayerParams(36864, 64, 3, 'conv64_2');\n const conv64_3 = extractResidualLayerParams(36864, 64, 3, 'conv64_3');\n\n const conv128_down = extractResidualLayerParams(147456, 128, 3, 'conv128_down', true);\n const conv128_1 = extractResidualLayerParams(147456, 128, 3, 'conv128_1');\n const conv128_2 = extractResidualLayerParams(147456, 128, 3, 'conv128_2');\n\n const conv256_down = extractResidualLayerParams(589824, 256, 3, 'conv256_down', true);\n const conv256_1 = extractResidualLayerParams(589824, 256, 3, 'conv256_1');\n const conv256_2 = extractResidualLayerParams(589824, 256, 3, 'conv256_2');\n const conv256_down_out = extractResidualLayerParams(589824, 256, 3, 'conv256_down_out');\n\n const fc = tf.tidy(\n () => tf.transpose(tf.tensor2d(extractWeights(256 * 128), [128, 256]), [1, 0]),\n );\n paramMappings.push({ paramPath: 'fc' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping } from '../common/index';\nimport { isTensor2D } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractScaleLayerParams(prefix: string): ScaleLayerParams {\n const weights = extractWeightEntry(`${prefix}/scale/weights`, 1);\n const biases = extractWeightEntry(`${prefix}/scale/biases`, 1);\n\n return { weights, biases };\n }\n\n function extractConvLayerParams(prefix: string): ConvLayerParams {\n const filters = extractWeightEntry(`${prefix}/conv/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/conv/bias`, 1);\n const scale = extractScaleLayerParams(prefix);\n\n return { conv: { filters, bias }, scale };\n }\n\n function extractResidualLayerParams(prefix: string): ResidualLayerParams {\n return {\n conv1: extractConvLayerParams(`${prefix}/conv1`),\n conv2: extractConvLayerParams(`${prefix}/conv2`),\n };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const conv32_down = extractConvLayerParams('conv32_down');\n const conv32_1 = extractResidualLayerParams('conv32_1');\n const conv32_2 = extractResidualLayerParams('conv32_2');\n const conv32_3 = extractResidualLayerParams('conv32_3');\n\n const conv64_down = extractResidualLayerParams('conv64_down');\n const conv64_1 = extractResidualLayerParams('conv64_1');\n const conv64_2 = extractResidualLayerParams('conv64_2');\n const conv64_3 = extractResidualLayerParams('conv64_3');\n\n const conv128_down = extractResidualLayerParams('conv128_down');\n const conv128_1 = extractResidualLayerParams('conv128_1');\n const conv128_2 = extractResidualLayerParams('conv128_2');\n\n const conv256_down = extractResidualLayerParams('conv256_down');\n const conv256_1 = extractResidualLayerParams('conv256_1');\n const conv256_2 = extractResidualLayerParams('conv256_2');\n const conv256_down_out = extractResidualLayerParams('conv256_down_out');\n\n const { fc } = weightMap;\n paramMappings.push({ originalPath: 'fc', paramPath: 'fc' });\n\n if (!isTensor2D(fc)) {\n throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${fc}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { conv, convDown, convNoRelu } from './convLayer';\nimport { ResidualLayerParams } from './types';\n\nexport function residual(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = conv(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n out = tf.add(out, x);\n out = tf.relu(out);\n return out;\n}\n\nexport function residualDown(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = convDown(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n\n let pooled = tf.avgPool(x, 2, 2, 'valid') as tf.Tensor4D;\n const zeros = tf.zeros(pooled.shape);\n const isPad = pooled.shape[3] !== out.shape[3];\n const isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2];\n\n if (isAdjustShape) {\n const padShapeX = [...out.shape] as [number, number, number, number];\n padShapeX[1] = 1;\n const zerosW = tf.zeros(padShapeX);\n out = tf.concat([out, zerosW], 1);\n\n const padShapeY = [...out.shape] as [number, number, number, number];\n padShapeY[2] = 1;\n const zerosH = tf.zeros(padShapeY);\n out = tf.concat([out, zerosH], 2);\n }\n\n pooled = isPad ? tf.concat([pooled, zeros], 3) : pooled;\n out = tf.add(pooled, out) as tf.Tensor4D;\n\n out = tf.relu(out);\n return out;\n}\n", "import { FaceRecognitionNet } from './FaceRecognitionNet';\n\nexport * from './FaceRecognitionNet';\n\nexport function createFaceRecognitionNet(weights: Float32Array) {\n const net = new FaceRecognitionNet();\n net.extractWeights(weights);\n return net;\n}\n", "export type WithFaceDescriptor = TSource & {\n descriptor: Float32Array\n}\n\nexport function extendWithFaceDescriptor<\n TSource\n>(\n sourceObj: TSource,\n descriptor: Float32Array,\n): WithFaceDescriptor {\n const extension = { descriptor };\n return { ...sourceObj, ...extension };\n}\n", "export type WithAge = TSource & {\n age: number\n}\n\nexport function isWithAge(obj: any): obj is WithAge<{}> {\n return typeof obj.age === 'number';\n}\n\nexport function extendWithAge<\n TSource\n>(\n sourceObj: TSource,\n age: number,\n): WithAge {\n const extension = { age };\n return { ...sourceObj, ...extension };\n}\n", "import { Gender } from '../ageGenderNet/types';\nimport { isValidProbablitiy } from '../utils/index';\n\nexport type WithGender = TSource & {\n gender: Gender\n genderProbability: number\n}\n\nexport function isWithGender(obj: any): obj is WithGender<{}> {\n return (obj.gender === Gender.MALE || obj.gender === Gender.FEMALE)\n && isValidProbablitiy(obj.genderProbability);\n}\n\nexport function extendWithGender<\n TSource\n>(\n sourceObj: TSource,\n gender: Gender,\n genderProbability: number,\n): WithGender {\n const extension = { gender, genderProbability };\n return { ...sourceObj, ...extension };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { mobileNetV1 } from './mobileNetV1';\nimport { nonMaxSuppression } from './nonMaxSuppression';\nimport { outputLayer } from './outputLayer';\nimport { predictionLayer } from './predictionLayer';\nimport { ISsdMobilenetv1Options, SsdMobilenetv1Options } from './SsdMobilenetv1Options';\nimport { NetParams } from './types';\n\nexport class SsdMobilenetv1 extends NeuralNetwork {\n constructor() {\n super('SsdMobilenetv1');\n }\n\n public forwardInput(input: NetInput) {\n const { params } = this;\n\n if (!params) {\n throw new Error('SsdMobilenetv1 - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(512, false).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(512, false), 'float32');\n\n const x = tf.sub(tf.mul(batchTensor, tf.scalar(0.007843137718737125)), tf.scalar(1)) as tf.Tensor4D;\n const features = mobileNetV1(x, params.mobilenetv1);\n\n const {\n boxPredictions,\n classPredictions,\n } = predictionLayer(features.out, features.conv11, params.prediction_layer);\n\n return outputLayer(boxPredictions, classPredictions, params.output_layer);\n });\n }\n\n public async forward(input: TNetInput) {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async locateFaces(\n input: TNetInput,\n options: ISsdMobilenetv1Options = {},\n ): Promise {\n const { maxResults, minConfidence } = new SsdMobilenetv1Options(options);\n\n const netInput = await toNetInput(input);\n\n const {\n boxes: _boxes,\n scores: _scores,\n } = this.forwardInput(netInput);\n\n // TODO batches\n const boxes = _boxes[0];\n const scores = _scores[0];\n for (let i = 1; i < _boxes.length; i++) {\n _boxes[i].dispose();\n _scores[i].dispose();\n }\n\n // TODO find a better way to filter by minConfidence\n const scoresData = Array.from(await scores.data());\n\n const iouThreshold = 0.5;\n const indices = nonMaxSuppression(\n boxes,\n scoresData as number[],\n maxResults,\n iouThreshold,\n minConfidence,\n );\n\n const reshapedDims = netInput.getReshapedInputDimensions(0);\n const inputSize = netInput.inputSize as number;\n const padX = inputSize / reshapedDims.width;\n const padY = inputSize / reshapedDims.height;\n\n const boxesData = boxes.arraySync();\n const results = indices\n .map((idx) => {\n const [top, bottom] = [\n Math.max(0, boxesData[idx][0]),\n Math.min(1.0, boxesData[idx][2]),\n ].map((val) => val * padY);\n const [left, right] = [\n Math.max(0, boxesData[idx][1]),\n Math.min(1.0, boxesData[idx][3]),\n ].map((val) => val * padX);\n return new FaceDetection(\n scoresData[idx] as number,\n new Rect(\n left,\n top,\n right - left,\n bottom - top,\n ),\n {\n height: netInput.getInputHeight(0),\n width: netInput.getInputWidth(0),\n },\n );\n });\n\n boxes.dispose();\n scores.dispose();\n\n return results;\n }\n\n protected getDefaultModelName(): string {\n return 'ssd_mobilenetv1_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n ExtractWeightsFunction, ParamMapping, ConvParams, extractWeightsFactory,\n} from '../common/index';\nimport {\n MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractDepthwiseConvParams(numChannels: number, mappedPrefix: string): MobileNetV1.DepthwiseConvParams {\n const filters = tf.tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]);\n const batch_norm_scale = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_offset = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_mean = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_variance = tf.tensor1d(extractWeights(numChannels));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/batch_norm_scale` },\n { paramPath: `${mappedPrefix}/batch_norm_offset` },\n { paramPath: `${mappedPrefix}/batch_norm_mean` },\n { paramPath: `${mappedPrefix}/batch_norm_variance` },\n );\n\n return {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n };\n }\n\n function extractConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n isPointwiseConv?: boolean,\n ): ConvParams {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/${isPointwiseConv ? 'batch_norm_offset' : 'bias'}` },\n );\n\n return { filters, bias };\n }\n\n function extractPointwiseConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): PointwiseConvParams {\n const {\n filters,\n bias,\n } = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true);\n\n return {\n filters,\n batch_norm_offset: bias,\n };\n }\n\n function extractConvPairParams(\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): MobileNetV1.ConvPairParams {\n const depthwise_conv = extractDepthwiseConvParams(channelsIn, `${mappedPrefix}/depthwise_conv`);\n const pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/pointwise_conv`);\n\n return { depthwise_conv, pointwise_conv };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n const conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0');\n\n const conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1');\n const conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2');\n const conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3');\n const conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4');\n const conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5');\n const conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6');\n const conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7');\n const conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8');\n const conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9');\n const conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10');\n const conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11');\n const conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12');\n const conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13');\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n conv_8,\n conv_9,\n conv_10,\n conv_11,\n conv_12,\n conv_13,\n };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n const conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0');\n const conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1');\n const conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2');\n const conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3');\n const conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4');\n const conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5');\n const conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6');\n const conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7');\n\n const box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor');\n const class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor');\n const box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor');\n const class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor');\n const box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor');\n const class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor');\n const box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor');\n const class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor');\n const box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor');\n const class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor');\n const box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor');\n const class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor');\n\n const box_predictor_0 = {\n box_encoding_predictor: box_encoding_0_predictor,\n class_predictor: class_predictor_0,\n };\n const box_predictor_1 = {\n box_encoding_predictor: box_encoding_1_predictor,\n class_predictor: class_predictor_1,\n };\n const box_predictor_2 = {\n box_encoding_predictor: box_encoding_2_predictor,\n class_predictor: class_predictor_2,\n };\n const box_predictor_3 = {\n box_encoding_predictor: box_encoding_3_predictor,\n class_predictor: class_predictor_3,\n };\n const box_predictor_4 = {\n box_encoding_predictor: box_encoding_4_predictor,\n class_predictor: class_predictor_4,\n };\n const box_predictor_5 = {\n box_encoding_predictor: box_encoding_5_predictor,\n class_predictor: class_predictor_5,\n };\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n box_predictor_0,\n box_predictor_1,\n box_predictor_2,\n box_predictor_3,\n box_predictor_4,\n box_predictor_5,\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const mobilenetv1 = extractMobilenetV1Params();\n const prediction_layer = extractPredictionLayerParams();\n const extra_dim = tf.tensor3d(\n extractWeights(5118 * 4),\n [1, 5118, 4],\n );\n const output_layer = {\n extra_dim,\n };\n\n paramMappings.push({ paramPath: 'output_layer/extra_dim' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n params: {\n mobilenetv1,\n prediction_layer,\n output_layer,\n },\n paramMappings,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n ConvParams, disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping,\n} from '../common/index';\nimport { isTensor3D } from '../utils/index';\nimport {\n BoxPredictionParams, MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractPointwiseConvParams(prefix: string, idx: number, mappedPrefix: string): PointwiseConvParams {\n const filters = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/weights`, 4, `${mappedPrefix}/filters`);\n const batch_norm_offset = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/convolution_bn_offset`, 1, `${mappedPrefix}/batch_norm_offset`);\n\n return { filters, batch_norm_offset };\n }\n\n function extractConvPairParams(idx: number): MobileNetV1.ConvPairParams {\n const mappedPrefix = `mobilenetv1/conv_${idx}`;\n const prefixDepthwiseConv = `MobilenetV1/Conv2d_${idx}_depthwise`;\n const mappedPrefixDepthwiseConv = `${mappedPrefix}/depthwise_conv`;\n const mappedPrefixPointwiseConv = `${mappedPrefix}/pointwise_conv`;\n\n const filters = extractWeightEntry(`${prefixDepthwiseConv}/depthwise_weights`, 4, `${mappedPrefixDepthwiseConv}/filters`);\n const batch_norm_scale = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/gamma`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_scale`);\n const batch_norm_offset = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/beta`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_offset`);\n const batch_norm_mean = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_mean`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_mean`);\n const batch_norm_variance = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_variance`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_variance`);\n\n return {\n depthwise_conv: {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n },\n pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv),\n };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n return {\n conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'),\n conv_1: extractConvPairParams(1),\n conv_2: extractConvPairParams(2),\n conv_3: extractConvPairParams(3),\n conv_4: extractConvPairParams(4),\n conv_5: extractConvPairParams(5),\n conv_6: extractConvPairParams(6),\n conv_7: extractConvPairParams(7),\n conv_8: extractConvPairParams(8),\n conv_9: extractConvPairParams(9),\n conv_10: extractConvPairParams(10),\n conv_11: extractConvPairParams(11),\n conv_12: extractConvPairParams(12),\n conv_13: extractConvPairParams(13),\n };\n }\n\n function extractConvParams(prefix: string, mappedPrefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/weights`, 4, `${mappedPrefix}/filters`);\n const bias = extractWeightEntry(`${prefix}/biases`, 1, `${mappedPrefix}/bias`);\n\n return { filters, bias };\n }\n\n function extractBoxPredictorParams(idx: number): BoxPredictionParams {\n const box_encoding_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/BoxEncodingPredictor`,\n `prediction_layer/box_predictor_${idx}/box_encoding_predictor`,\n );\n const class_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/ClassPredictor`,\n `prediction_layer/box_predictor_${idx}/class_predictor`,\n );\n\n return { box_encoding_predictor, class_predictor };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n return {\n conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'),\n conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'),\n conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'),\n conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'),\n conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'),\n conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'),\n conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'),\n conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'),\n box_predictor_0: extractBoxPredictorParams(0),\n box_predictor_1: extractBoxPredictorParams(1),\n box_predictor_2: extractBoxPredictorParams(2),\n box_predictor_3: extractBoxPredictorParams(3),\n box_predictor_4: extractBoxPredictorParams(4),\n box_predictor_5: extractBoxPredictorParams(5),\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const extra_dim = weightMap['Output/extra_dim'];\n paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' });\n\n if (!isTensor3D(extra_dim)) {\n throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${extra_dim}`);\n }\n\n const params = {\n mobilenetv1: extractMobilenetV1Params(),\n prediction_layer: extractPredictionLayerParams(),\n output_layer: {\n extra_dim,\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { MobileNetV1 } from './types';\n\nconst epsilon = 0.0010000000474974513;\n\nfunction depthwiseConvLayer(\n x: tf.Tensor4D,\n params: MobileNetV1.DepthwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.depthwiseConv2d(x, params.filters, strides, 'same');\n out = tf.batchNorm(\n out,\n params.batch_norm_mean,\n params.batch_norm_variance,\n params.batch_norm_offset,\n params.batch_norm_scale,\n epsilon,\n );\n return tf.clipByValue(out, 0, 6);\n });\n}\n\nfunction getStridesForLayerIdx(layerIdx: number): [number, number] {\n return [2, 4, 6, 12].some((idx) => idx === layerIdx) ? [2, 2] : [1, 1];\n}\n\nexport function mobileNetV1(x: tf.Tensor4D, params: MobileNetV1.Params) {\n return tf.tidy(() => {\n let conv11;\n let out = pointwiseConvLayer(x, params.conv_0, [2, 2]);\n\n const convPairParams = [\n params.conv_1,\n params.conv_2,\n params.conv_3,\n params.conv_4,\n params.conv_5,\n params.conv_6,\n params.conv_7,\n params.conv_8,\n params.conv_9,\n params.conv_10,\n params.conv_11,\n params.conv_12,\n params.conv_13,\n ];\n\n convPairParams.forEach((param, i) => {\n const layerIdx = i + 1;\n const depthwiseConvStrides = getStridesForLayerIdx(layerIdx);\n out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides);\n out = pointwiseConvLayer(out, param.pointwise_conv, [1, 1]);\n if (layerIdx === 11) {\n conv11 = out;\n }\n });\n\n if (conv11 === null) {\n throw new Error('mobileNetV1 - output of conv layer 11 is null');\n }\n\n return {\n out,\n conv11: conv11 as any,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { PointwiseConvParams } from './types';\n\nexport function pointwiseConvLayer(\n x: tf.Tensor4D,\n params: PointwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.conv2d(x, params.filters, strides, 'same');\n out = tf.add(out, params.batch_norm_offset);\n return tf.clipByValue(out, 0, 6);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nfunction IOU(boxes: tf.Tensor2D, i: number, j: number) {\n const boxesData = boxes.arraySync();\n const yminI = Math.min(boxesData[i][0], boxesData[i][2]);\n const xminI = Math.min(boxesData[i][1], boxesData[i][3]);\n const ymaxI = Math.max(boxesData[i][0], boxesData[i][2]);\n const xmaxI = Math.max(boxesData[i][1], boxesData[i][3]);\n const yminJ = Math.min(boxesData[j][0], boxesData[j][2]);\n const xminJ = Math.min(boxesData[j][1], boxesData[j][3]);\n const ymaxJ = Math.max(boxesData[j][0], boxesData[j][2]);\n const xmaxJ = Math.max(boxesData[j][1], boxesData[j][3]);\n const areaI = (ymaxI - yminI) * (xmaxI - xminI);\n const areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ);\n if (areaI <= 0 || areaJ <= 0) {\n return 0.0;\n }\n const intersectionYmin = Math.max(yminI, yminJ);\n const intersectionXmin = Math.max(xminI, xminJ);\n const intersectionYmax = Math.min(ymaxI, ymaxJ);\n const intersectionXmax = Math.min(xmaxI, xmaxJ);\n const intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0)\n * Math.max(intersectionXmax - intersectionXmin, 0.0);\n return intersectionArea / (areaI + areaJ - intersectionArea);\n}\n\nexport function nonMaxSuppression(\n boxes: tf.Tensor2D,\n scores: number[],\n maxOutputSize: number,\n iouThreshold: number,\n scoreThreshold: number,\n): number[] {\n const numBoxes = boxes.shape[0];\n const outputSize = Math.min(\n maxOutputSize,\n numBoxes,\n );\n\n const candidates = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .filter((c) => c.score > scoreThreshold)\n .sort((c1, c2) => c2.score - c1.score);\n\n const suppressFunc = (x: number) => (x <= iouThreshold ? 1 : 0);\n\n const selected: number[] = [];\n\n candidates.forEach((c) => {\n if (selected.length >= outputSize) {\n return;\n }\n const originalScore = c.score;\n\n for (let j = selected.length - 1; j >= 0; --j) {\n const iou = IOU(boxes, c.boxIndex, selected[j]);\n if (iou === 0.0) continue;\n c.score *= suppressFunc(iou);\n if (c.score <= scoreThreshold) break;\n }\n if (originalScore === c.score) {\n selected.push(c.boxIndex);\n }\n });\n\n return selected;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { OutputLayerParams } from './types';\n\nfunction getCenterCoordinatesAndSizesLayer(x: tf.Tensor2D) {\n const vec = tf.unstack(tf.transpose(x, [1, 0]));\n\n const sizes = [\n tf.sub(vec[2], vec[0]),\n tf.sub(vec[3], vec[1]),\n ];\n\n const centers = [\n tf.add(vec[0], tf.div(sizes[0], tf.scalar(2))),\n tf.add(vec[1], tf.div(sizes[1], tf.scalar(2))),\n ];\n\n return {\n sizes,\n centers,\n };\n}\n\nfunction decodeBoxesLayer(x0: tf.Tensor2D, x1: tf.Tensor2D) {\n const {\n sizes,\n centers,\n } = getCenterCoordinatesAndSizesLayer(x0);\n\n const vec = tf.unstack(tf.transpose(x1, [1, 0]));\n\n const div0_out = tf.div(tf.mul(tf.exp(tf.div(vec[2], tf.scalar(5))), sizes[0]), tf.scalar(2));\n const add0_out = tf.add(tf.mul(tf.div(vec[0], tf.scalar(10)), sizes[0]), centers[0]);\n\n const div1_out = tf.div(tf.mul(tf.exp(tf.div(vec[3], tf.scalar(5))), sizes[1]), tf.scalar(2));\n const add1_out = tf.add(tf.mul(tf.div(vec[1], tf.scalar(10)), sizes[1]), centers[1]);\n\n return tf.transpose(\n tf.stack([\n tf.sub(add0_out, div0_out),\n tf.sub(add1_out, div1_out),\n tf.add(add0_out, div0_out),\n tf.add(add1_out, div1_out),\n ]),\n [1, 0],\n );\n}\n\nexport function outputLayer(\n boxPredictions: tf.Tensor4D,\n classPredictions: tf.Tensor4D,\n params: OutputLayerParams,\n) {\n return tf.tidy(() => {\n const batchSize = boxPredictions.shape[0];\n\n let boxes = decodeBoxesLayer(\n tf.reshape(tf.tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]) as tf.Tensor2D,\n tf.reshape(boxPredictions, [-1, 4]) as tf.Tensor2D,\n );\n boxes = tf.reshape(\n boxes,\n [batchSize, (boxes.shape[0] / batchSize), 4],\n );\n\n const scoresAndClasses = tf.sigmoid(tf.slice(classPredictions, [0, 0, 1], [-1, -1, -1]));\n let scores = tf.slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]) as tf.Tensor;\n\n scores = tf.reshape(\n scores,\n [batchSize, scores.shape[1] as number],\n );\n\n const boxesByBatch = tf.unstack(boxes) as tf.Tensor2D[];\n const scoresByBatch = tf.unstack(scores) as tf.Tensor1D[];\n\n return {\n boxes: boxesByBatch,\n scores: scoresByBatch,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { boxPredictionLayer } from './boxPredictionLayer';\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { PredictionLayerParams } from './types';\n\nexport function predictionLayer(\n x: tf.Tensor4D,\n conv11: tf.Tensor4D,\n params: PredictionLayerParams,\n) {\n return tf.tidy(() => {\n const conv0 = pointwiseConvLayer(x, params.conv_0, [1, 1]);\n const conv1 = pointwiseConvLayer(conv0, params.conv_1, [2, 2]);\n const conv2 = pointwiseConvLayer(conv1, params.conv_2, [1, 1]);\n const conv3 = pointwiseConvLayer(conv2, params.conv_3, [2, 2]);\n const conv4 = pointwiseConvLayer(conv3, params.conv_4, [1, 1]);\n const conv5 = pointwiseConvLayer(conv4, params.conv_5, [2, 2]);\n const conv6 = pointwiseConvLayer(conv5, params.conv_6, [1, 1]);\n const conv7 = pointwiseConvLayer(conv6, params.conv_7, [2, 2]);\n\n const boxPrediction0 = boxPredictionLayer(conv11, params.box_predictor_0);\n const boxPrediction1 = boxPredictionLayer(x, params.box_predictor_1);\n const boxPrediction2 = boxPredictionLayer(conv1, params.box_predictor_2);\n const boxPrediction3 = boxPredictionLayer(conv3, params.box_predictor_3);\n const boxPrediction4 = boxPredictionLayer(conv5, params.box_predictor_4);\n const boxPrediction5 = boxPredictionLayer(conv7, params.box_predictor_5);\n\n const boxPredictions = tf.concat([\n boxPrediction0.boxPredictionEncoding,\n boxPrediction1.boxPredictionEncoding,\n boxPrediction2.boxPredictionEncoding,\n boxPrediction3.boxPredictionEncoding,\n boxPrediction4.boxPredictionEncoding,\n boxPrediction5.boxPredictionEncoding,\n ], 1) as tf.Tensor4D;\n\n const classPredictions = tf.concat([\n boxPrediction0.classPrediction,\n boxPrediction1.classPrediction,\n boxPrediction2.classPrediction,\n boxPrediction3.classPrediction,\n boxPrediction4.classPrediction,\n boxPrediction5.classPrediction,\n ], 1) as tf.Tensor4D;\n\n return {\n boxPredictions,\n classPredictions,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { convLayer } from '../common/index';\nimport { BoxPredictionParams } from './types';\n\nexport function boxPredictionLayer(\n x: tf.Tensor4D,\n params: BoxPredictionParams,\n) {\n return tf.tidy(() => {\n const batchSize = x.shape[0];\n\n const boxPredictionEncoding = tf.reshape(\n convLayer(x, params.box_encoding_predictor),\n [batchSize, -1, 1, 4],\n );\n const classPrediction = tf.reshape(\n convLayer(x, params.class_predictor),\n [batchSize, -1, 3],\n );\n\n return {\n boxPredictionEncoding,\n classPrediction,\n };\n });\n}\n", "export interface ISsdMobilenetv1Options {\n minConfidence?: number\n maxResults?: number\n}\n\nexport class SsdMobilenetv1Options {\n protected _name: string = 'SsdMobilenetv1Options'\n\n private _minConfidence: number\n\n private _maxResults: number\n\n constructor({ minConfidence, maxResults }: ISsdMobilenetv1Options = {}) {\n this._minConfidence = minConfidence || 0.5;\n this._maxResults = maxResults || 100;\n\n if (typeof this._minConfidence !== 'number' || this._minConfidence <= 0 || this._minConfidence >= 1) {\n throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);\n }\n\n if (typeof this._maxResults !== 'number') {\n throw new Error(`${this._name} - expected maxResults to be a number`);\n }\n }\n\n get minConfidence(): number { return this._minConfidence; }\n\n get maxResults(): number { return this._maxResults; }\n}\n", "import { SsdMobilenetv1 } from './SsdMobilenetv1';\n\nexport * from './SsdMobilenetv1';\nexport * from './SsdMobilenetv1Options';\n\nexport function createSsdMobilenetv1(weights: Float32Array) {\n const net = new SsdMobilenetv1();\n net.extractWeights(weights);\n return net;\n}\n\nexport function createFaceDetectionNet(weights: Float32Array) {\n return createSsdMobilenetv1(weights);\n}\n\n// alias for backward compatibily\nexport class FaceDetectionNet extends SsdMobilenetv1 {}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(0.738768, 0.874946),\n new Point(2.42204, 2.65704),\n new Point(4.30971, 7.04493),\n new Point(10.246, 4.59428),\n new Point(12.6868, 11.8741),\n];\n\nexport const BOX_ANCHORS_SEPARABLE = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB_SEPARABLE: [number, number, number] = [117.001, 114.697, 97.404];\n\nexport const DEFAULT_MODEL_NAME = 'tiny_yolov2_model';\nexport const DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model';\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { BoundingBox } from '../classes/BoundingBox';\nimport { Dimensions } from '../classes/Dimensions';\nimport { ObjectDetection } from '../classes/ObjectDetection';\nimport { convLayer } from '../common/index';\nimport { ConvParams, SeparableConvParams } from '../common/types';\nimport { toNetInput } from '../dom/index';\nimport { NetInput } from '../dom/NetInput';\nimport { TNetInput } from '../dom/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { sigmoid } from '../ops/index';\nimport { nonMaxSuppression } from '../ops/nonMaxSuppression';\nimport { normalize } from '../ops/normalize';\nimport { TinyYolov2Config, validateConfig } from './config';\nimport { convWithBatchNorm } from './convWithBatchNorm';\nimport { depthwiseSeparableConv } from './depthwiseSeparableConv';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { leaky } from './leaky';\nimport { ITinyYolov2Options, TinyYolov2Options } from './TinyYolov2Options';\nimport { DefaultTinyYolov2NetParams, MobilenetParams, TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2Base extends NeuralNetwork {\n public static DEFAULT_FILTER_SIZES = [\n 3, 16, 32, 64, 128, 256, 512, 1024, 1024,\n ]\n\n private _config: TinyYolov2Config\n\n constructor(config: TinyYolov2Config) {\n super('TinyYolov2');\n validateConfig(config);\n this._config = config;\n }\n\n public get config(): TinyYolov2Config {\n return this._config;\n }\n\n public get withClassScores(): boolean {\n return this.config.withClassScores || this.config.classes.length > 1;\n }\n\n public get boxEncodingSize(): number {\n return 5 + (this.withClassScores ? this.config.classes.length : 0);\n }\n\n public runTinyYolov2(x: tf.Tensor4D, params: DefaultTinyYolov2NetParams): tf.Tensor4D {\n let out = convWithBatchNorm(x, params.conv0);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = convWithBatchNorm(out, params.conv6);\n out = convWithBatchNorm(out, params.conv7);\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public runMobilenet(x: tf.Tensor4D, params: MobilenetParams): tf.Tensor4D {\n let out = this.config.isFirstLayerConv2d\n ? leaky(convLayer(x, params.conv0 as ConvParams, 'valid', false))\n : depthwiseSeparableConv(x, params.conv0 as SeparableConvParams);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = params.conv6 ? depthwiseSeparableConv(out, params.conv6) : out;\n out = params.conv7 ? depthwiseSeparableConv(out, params.conv7) : out;\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public forwardInput(input: NetInput, inputSize: number): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyYolov2 - load model before inference');\n }\n\n return tf.tidy(() => {\n // let batchTensor = input.toBatchTensor(inputSize, false).toFloat()\n let batchTensor = tf.cast(input.toBatchTensor(inputSize, false), 'float32');\n batchTensor = this.config.meanRgb\n ? normalize(batchTensor, this.config.meanRgb)\n : batchTensor;\n batchTensor = batchTensor.div(tf.scalar(256)) as tf.Tensor4D;\n\n return this.config.withSeparableConvs\n ? this.runMobilenet(batchTensor, params as MobilenetParams)\n : this.runTinyYolov2(batchTensor, params as DefaultTinyYolov2NetParams);\n });\n }\n\n public async forward(input: TNetInput, inputSize: number): Promise {\n return this.forwardInput(await toNetInput(input), inputSize);\n }\n\n public async detect(input: TNetInput, forwardParams: ITinyYolov2Options = {}): Promise {\n const { inputSize, scoreThreshold } = new TinyYolov2Options(forwardParams);\n\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput, inputSize);\n const out0 = tf.tidy(() => tf.unstack(out)[0].expandDims()) as tf.Tensor4D;\n\n const inputDimensions = {\n width: netInput.getInputWidth(0),\n height: netInput.getInputHeight(0),\n };\n\n const results = await this.extractBoxes(out0, netInput.getReshapedInputDimensions(0), scoreThreshold);\n out.dispose();\n out0.dispose();\n\n const boxes = results.map((res) => res.box);\n const scores = results.map((res) => res.score);\n const classScores = results.map((res) => res.classScore);\n const classNames = results.map((res) => this.config.classes[res.label]);\n\n const indices = nonMaxSuppression(\n boxes.map((box) => box.rescale(inputSize)),\n scores,\n this.config.iouThreshold,\n true,\n );\n\n const detections = indices.map((idx) => new ObjectDetection(\n scores[idx],\n classScores[idx],\n classNames[idx],\n boxes[idx],\n inputDimensions,\n ));\n\n return detections;\n }\n\n protected getDefaultModelName(): string {\n return '';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this.config);\n }\n\n protected extractParams(weights: Float32Array) {\n const filterSizes = this.config.filterSizes || TinyYolov2Base.DEFAULT_FILTER_SIZES;\n\n const numFilters = filterSizes ? filterSizes.length : undefined;\n if (numFilters !== 7 && numFilters !== 8 && numFilters !== 9) {\n throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${numFilters} filterSizes in config`);\n }\n return extractParams(weights, this.config, this.boxEncodingSize, filterSizes);\n }\n\n protected async extractBoxes(\n outputTensor: tf.Tensor4D,\n inputBlobDimensions: Dimensions,\n scoreThreshold?: number,\n ) {\n const { width, height } = inputBlobDimensions;\n const inputSize = Math.max(width, height);\n const correctionFactorX = inputSize / width;\n const correctionFactorY = inputSize / height;\n\n const numCells = outputTensor.shape[1];\n const numBoxes = this.config.anchors.length;\n\n const [boxesTensor, scoresTensor, classScoresTensor] = tf.tidy(() => {\n const reshaped = outputTensor.reshape([numCells, numCells, numBoxes, this.boxEncodingSize]);\n\n const boxes = reshaped.slice([0, 0, 0, 0], [numCells, numCells, numBoxes, 4]);\n const scores = reshaped.slice([0, 0, 0, 4], [numCells, numCells, numBoxes, 1]);\n const classScores = this.withClassScores\n ? tf.softmax(reshaped.slice([0, 0, 0, 5], [numCells, numCells, numBoxes, this.config.classes.length]), 3)\n : tf.scalar(0);\n return [boxes, scores, classScores];\n });\n\n const results = [] as any;\n\n const scoresData = await scoresTensor.array();\n const boxesData = await boxesTensor.array();\n for (let row = 0; row < numCells; row++) {\n for (let col = 0; col < numCells; col++) {\n for (let anchor = 0; anchor < numBoxes; anchor++) {\n const score = sigmoid(scoresData[row][col][anchor][0]);\n if (!scoreThreshold || score > scoreThreshold) {\n const ctX = ((col + sigmoid(boxesData[row][col][anchor][0])) / numCells) * correctionFactorX;\n const ctY = ((row + sigmoid(boxesData[row][col][anchor][1])) / numCells) * correctionFactorY;\n const widthLocal = ((Math.exp(boxesData[row][col][anchor][2]) * this.config.anchors[anchor].x) / numCells) * correctionFactorX;\n const heightLocal = ((Math.exp(boxesData[row][col][anchor][3]) * this.config.anchors[anchor].y) / numCells) * correctionFactorY;\n\n const x = (ctX - (widthLocal / 2));\n const y = (ctY - (heightLocal / 2));\n\n const pos = { row, col, anchor };\n const { classScore, label } = this.withClassScores\n ? await this.extractPredictedClass(classScoresTensor as tf.Tensor4D, pos)\n : { classScore: 1, label: 0 };\n\n results.push({\n box: new BoundingBox(x, y, x + widthLocal, y + heightLocal),\n score,\n classScore: score * classScore,\n label,\n ...pos,\n });\n }\n }\n }\n }\n\n boxesTensor.dispose();\n scoresTensor.dispose();\n classScoresTensor.dispose();\n\n return results;\n }\n\n private async extractPredictedClass(classesTensor: tf.Tensor4D, pos: { row: number, col: number, anchor: number }) {\n const { row, col, anchor } = pos;\n const classesData = await classesTensor.array();\n return Array(this.config.classes.length).fill(0)\n .map((_, i) => classesData[row][col][anchor][i])\n .map((classScore, label) => ({\n classScore,\n label,\n }))\n .reduce((max, curr) => (max.classScore > curr.classScore ? max : curr));\n }\n}\n", "import { Point } from '../classes/Point';\n\nexport type TinyYolov2Config = {\n withSeparableConvs: boolean\n iouThreshold: number\n anchors: Point[]\n classes: string[]\n meanRgb?: [number, number, number]\n withClassScores?: boolean,\n filterSizes?: number[]\n isFirstLayerConv2d?: boolean\n}\n\nconst isNumber = (arg: any) => typeof arg === 'number';\n\nexport function validateConfig(config: any) {\n if (!config) {\n throw new Error(`invalid config: ${config}`);\n }\n\n if (typeof config.withSeparableConvs !== 'boolean') {\n throw new Error(`config.withSeparableConvs has to be a boolean, have: ${config.withSeparableConvs}`);\n }\n\n if (!isNumber(config.iouThreshold) || config.iouThreshold < 0 || config.iouThreshold > 1.0) {\n throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${config.iouThreshold}`);\n }\n\n if (\n !Array.isArray(config.classes)\n || !config.classes.length\n || !config.classes.every((c: any) => typeof c === 'string')\n ) {\n throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(config.classes)}`);\n }\n\n if (\n !Array.isArray(config.anchors)\n || !config.anchors.length\n || !config.anchors.map((a: any) => a || {}).every((a: any) => isNumber(a.x) && isNumber(a.y))\n ) {\n throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(config.anchors)}`);\n }\n\n if (config.meanRgb && (\n !Array.isArray(config.meanRgb)\n || config.meanRgb.length !== 3\n || !config.meanRgb.every(isNumber)\n )) {\n throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(config.meanRgb)}`);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { leaky } from './leaky';\nimport { ConvWithBatchNorm } from './types';\n\nexport function convWithBatchNorm(x: tf.Tensor4D, params: ConvWithBatchNorm): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.conv2d(out, params.conv.filters, [1, 1], 'valid');\n out = tf.sub(out, params.bn.sub);\n out = tf.mul(out, params.bn.truediv);\n out = tf.add(out, params.conv.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nexport function leaky(x: tf.Tensor4D): tf.Tensor4D {\n return tf.tidy(() => {\n const min = tf.mul(x, tf.scalar(0.10000000149011612));\n return tf.add(tf.relu(tf.sub(x, min)), min);\n // return tf.maximum(x, min)\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { SeparableConvParams } from '../common/types';\nimport { leaky } from './leaky';\n\nexport function depthwiseSeparableConv(x: tf.Tensor4D, params: SeparableConvParams): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.separableConv2d(out, params.depthwise_filter, params.pointwise_filter, [1, 1], 'valid');\n out = tf.add(out, params.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { extractConvParamsFactory } from '../common/index';\nimport { extractSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightsFactory } from '../common/extractWeightsFactory';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n\n function extractBatchNormParams(size: number, mappedPrefix: string): BatchNorm {\n const sub = tf.tensor1d(extractWeights(size));\n const truediv = tf.tensor1d(extractWeights(size));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/sub` },\n { paramPath: `${mappedPrefix}/truediv` },\n );\n\n return { sub, truediv };\n }\n\n function extractConvWithBatchNormParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv`);\n const bn = extractBatchNormParams(channelsOut, `${mappedPrefix}/bn`);\n\n return { conv, bn };\n }\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParams(\n weights: Float32Array,\n config: TinyYolov2Config,\n boxEncodingSize: number,\n filterSizes: number[],\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n\n const conv0 = config.isFirstLayerConv2d\n ? extractConvParams(s0, s1, 3, 'conv0')\n : extractSeparableConvParams(s0, s1, 'conv0');\n const conv1 = extractSeparableConvParams(s1, s2, 'conv1');\n const conv2 = extractSeparableConvParams(s2, s3, 'conv2');\n const conv3 = extractSeparableConvParams(s3, s4, 'conv3');\n const conv4 = extractSeparableConvParams(s4, s5, 'conv4');\n const conv5 = extractSeparableConvParams(s5, s6, 'conv5');\n const conv6 = s7 ? extractSeparableConvParams(s6, s7, 'conv6') : undefined;\n const conv7 = s8 ? extractSeparableConvParams(s7, s8, 'conv7') : undefined;\n const conv8 = extractConvParams(s8 || s7 || s6, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n } else {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n const conv0 = extractConvWithBatchNormParams(s0, s1, 'conv0');\n const conv1 = extractConvWithBatchNormParams(s1, s2, 'conv1');\n const conv2 = extractConvWithBatchNormParams(s2, s3, 'conv2');\n const conv3 = extractConvWithBatchNormParams(s3, s4, 'conv3');\n const conv4 = extractConvWithBatchNormParams(s4, s5, 'conv4');\n const conv5 = extractConvWithBatchNormParams(s5, s6, 'conv5');\n const conv6 = extractConvWithBatchNormParams(s6, s7, 'conv6');\n const conv7 = extractConvWithBatchNormParams(s7, s8, 'conv7');\n const conv8 = extractConvParams(s8, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n }\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams } from '../common/index';\nimport { disposeUnusedWeightTensors } from '../common/disposeUnusedWeightTensors';\nimport { loadSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightEntryFactory } from '../common/extractWeightEntryFactory';\nimport { ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractBatchNormParams(prefix: string): BatchNorm {\n const sub = extractWeightEntry(`${prefix}/sub`, 1);\n const truediv = extractWeightEntry(`${prefix}/truediv`, 1);\n return { sub, truediv };\n }\n\n function extractConvParams(prefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { filters, bias };\n }\n\n function extractConvWithBatchNormParams(prefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(`${prefix}/conv`);\n const bn = extractBatchNormParams(`${prefix}/bn`);\n return { conv, bn };\n }\n\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n config: TinyYolov2Config,\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n // eslint-disable-next-line no-mixed-operators\n const numFilters = (config.filterSizes && config.filterSizes.length || 9);\n params = {\n conv0: config.isFirstLayerConv2d ? extractConvParams('conv0') : extractSeparableConvParams('conv0'),\n conv1: extractSeparableConvParams('conv1'),\n conv2: extractSeparableConvParams('conv2'),\n conv3: extractSeparableConvParams('conv3'),\n conv4: extractSeparableConvParams('conv4'),\n conv5: extractSeparableConvParams('conv5'),\n conv6: numFilters > 7 ? extractSeparableConvParams('conv6') : undefined,\n conv7: numFilters > 8 ? extractSeparableConvParams('conv7') : undefined,\n conv8: extractConvParams('conv8'),\n };\n } else {\n params = {\n conv0: extractConvWithBatchNormParams('conv0'),\n conv1: extractConvWithBatchNormParams('conv1'),\n conv2: extractConvWithBatchNormParams('conv2'),\n conv3: extractConvWithBatchNormParams('conv3'),\n conv4: extractConvWithBatchNormParams('conv4'),\n conv5: extractConvWithBatchNormParams('conv5'),\n conv6: extractConvWithBatchNormParams('conv6'),\n conv7: extractConvWithBatchNormParams('conv7'),\n conv8: extractConvParams('conv8'),\n };\n }\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "export interface ITinyYolov2Options {\n inputSize?: number\n scoreThreshold?: number\n}\n\nexport class TinyYolov2Options {\n protected _name: string = 'TinyYolov2Options'\n\n private _inputSize: number\n\n private _scoreThreshold: number\n\n constructor({ inputSize, scoreThreshold }: ITinyYolov2Options = {}) {\n this._inputSize = inputSize || 416;\n this._scoreThreshold = scoreThreshold || 0.5;\n\n if (typeof this._inputSize !== 'number' || this._inputSize % 32 !== 0) {\n throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);\n }\n\n if (typeof this._scoreThreshold !== 'number' || this._scoreThreshold <= 0 || this._scoreThreshold >= 1) {\n throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`);\n }\n }\n\n get inputSize(): number { return this._inputSize; }\n\n get scoreThreshold(): number { return this._scoreThreshold; }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/types';\nimport { TNetInput } from '../dom/types';\nimport {\n BOX_ANCHORS,\n BOX_ANCHORS_SEPARABLE,\n DEFAULT_MODEL_NAME,\n DEFAULT_MODEL_NAME_SEPARABLE_CONV,\n IOU_THRESHOLD,\n MEAN_RGB_SEPARABLE,\n} from './const';\nimport { TinyYolov2Base } from './TinyYolov2Base';\nimport { ITinyYolov2Options } from './TinyYolov2Options';\nimport { TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2 extends TinyYolov2Base {\n constructor(withSeparableConvs: boolean = true) {\n const config = {\n withSeparableConvs,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n ...(withSeparableConvs\n ? {\n anchors: BOX_ANCHORS_SEPARABLE,\n meanRgb: MEAN_RGB_SEPARABLE,\n }\n : {\n anchors: BOX_ANCHORS,\n withClassScores: true,\n }),\n };\n\n super(config);\n }\n\n public get withSeparableConvs(): boolean {\n return this.config.withSeparableConvs;\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME;\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { TinyYolov2 } from './TinyYolov2';\n\nexport * from './TinyYolov2Options';\n\nexport * from './config';\nexport * from './types';\n\nexport { TinyYolov2 };\n\nexport function createTinyYolov2(weights: Float32Array, withSeparableConvs: boolean = true) {\n const net = new TinyYolov2(withSeparableConvs);\n net.extractWeights(weights);\n return net;\n}\n", "import { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\n\nexport interface ITinyFaceDetectorOptions extends ITinyYolov2Options {}\n\nexport class TinyFaceDetectorOptions extends TinyYolov2Options {\n protected _name: string = 'TinyFaceDetectorOptions'\n}\n", "export class ComposableTask {\n public async then(\n // eslint-disable-next-line no-unused-vars\n onfulfilled: (value: T) => T | PromiseLike,\n ): Promise {\n return onfulfilled(await this.run());\n }\n\n public async run(): Promise {\n throw new Error('ComposableTask - run is not implemented');\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class DetectFaceLandmarksTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected useTinyLandmarkNet: boolean,\n ) {\n super();\n }\n\n protected get landmarkNet(): FaceLandmark68Net | FaceLandmark68TinyNet {\n return this.useTinyLandmarkNet\n ? nets.faceLandmark68TinyNet\n : nets.faceLandmark68Net;\n }\n}\n\nexport class DetectAllFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n const detections = parentResults.map((res) => res.detection);\n\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, detections)\n : await extractFaces(this.input, detections);\n\n const faceLandmarksByFace = await Promise.all(faces.map(\n (face) => this.landmarkNet.detectLandmarks(face),\n )) as FaceLandmarks68[];\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return parentResults.map((parentResult, i) => extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i]));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class DetectSingleFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { detection } = parentResult;\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, [detection])\n : await extractFaces(this.input, [detection]);\n\n const landmarks = await this.landmarkNet.detectLandmarks(faces[0]) as FaceLandmarks68;\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return extendWithFaceLandmarks(parentResult, landmarks);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\n\nexport async function extractAllFacesAndComputeResults, TResult>(\n parentResults: TSource[],\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResults: (faces: Array) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment: (parentResult: WithFaceLandmarks) => FaceDetection = ({ alignedRect }) => alignedRect,\n) {\n const faceBoxes = parentResults.map((parentResult) => (isWithFaceLandmarks(parentResult)\n ? getRectForAlignment(parentResult)\n : parentResult.detection));\n const faces: Array = extractedFaces || (\n input instanceof tf.Tensor\n ? await extractFaceTensors(input, faceBoxes)\n : await extractFaces(input, faceBoxes)\n );\n\n const results = await computeResults(faces);\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return results;\n}\n\nexport async function extractSingleFaceAndComputeResult, TResult>(\n parentResult: TSource,\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResult: (face: HTMLCanvasElement | tf.Tensor3D) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment?: (parentResultLocal: WithFaceLandmarks) => FaceDetection,\n) {\n return extractAllFacesAndComputeResults(\n [parentResult],\n input,\n async (faces) => computeResult(faces[0]),\n extractedFaces,\n getRectForAlignment,\n );\n}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB: [number, number, number] = [117.001, 114.697, 97.404];\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/index';\nimport { TNetInput } from '../dom/index';\nimport { ITinyYolov2Options } from '../tinyYolov2/index';\nimport { TinyYolov2Base } from '../tinyYolov2/TinyYolov2Base';\nimport { TinyYolov2NetParams } from '../tinyYolov2/types';\nimport { BOX_ANCHORS, IOU_THRESHOLD, MEAN_RGB } from './const';\n\nexport class TinyFaceDetector extends TinyYolov2Base {\n constructor() {\n const config = {\n withSeparableConvs: true,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n anchors: BOX_ANCHORS,\n meanRgb: MEAN_RGB,\n isFirstLayerConv2d: true,\n filterSizes: [3, 16, 32, 64, 128, 256, 512],\n };\n\n super(config);\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_face_detector_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { AgeGenderNet } from '../ageGenderNet/AgeGenderNet';\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet';\nimport { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { ITinyYolov2Options, TinyYolov2 } from '../tinyYolov2/index';\n\nexport const nets = {\n ssdMobilenetv1: new SsdMobilenetv1(),\n tinyFaceDetector: new TinyFaceDetector(),\n tinyYolov2: new TinyYolov2(),\n faceLandmark68Net: new FaceLandmark68Net(),\n faceLandmark68TinyNet: new FaceLandmark68TinyNet(),\n faceRecognitionNet: new FaceRecognitionNet(),\n faceExpressionNet: new FaceExpressionNet(),\n ageGenderNet: new AgeGenderNet(),\n};\n\n/**\n * Attempts to detect all faces in an image using SSD Mobilenetv1 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const ssdMobilenetv1 = (input: TNetInput, options: SsdMobilenetv1Options): Promise => nets.ssdMobilenetv1.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Face Detector.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyFaceDetector = (input: TNetInput, options: TinyFaceDetectorOptions): Promise => nets.tinyFaceDetector.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Yolov2 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyYolov2Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyYolov2 = (input: TNetInput, options: ITinyYolov2Options): Promise => nets.tinyYolov2.locateFaces(input, options);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarks = (input: TNetInput): Promise => nets.faceLandmark68Net.detectLandmarks(input);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image\n * using a tinier version of the 68 point face landmark model, which is slightly\n * faster at inference, but also slightly less accurate.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarksTiny = (input: TNetInput): Promise => nets.faceLandmark68TinyNet.detectLandmarks(input);\n\n/**\n * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image,\n * which uniquely represents the features of that persons face. The computed face descriptor can\n * be used to measure the similarity between faces, by computing the euclidean distance of two\n * face descriptors.\n *\n * @param inputs The face image extracted from the aligned bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Face descriptor with 128 entries or array thereof in case of batch input.\n */\nexport const computeFaceDescriptor = (input: TNetInput): Promise => nets.faceRecognitionNet.computeFaceDescriptor(input);\n\n/**\n * Recognizes the facial expressions from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Facial expressions with corresponding probabilities or array thereof in case of batch input.\n */\nexport const recognizeFaceExpressions = (input: TNetInput): Promise => nets.faceExpressionNet.predictExpressions(input);\n\n/**\n * Predicts age and gender from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Predictions with age, gender and gender probability or array thereof in case of batch input.\n */\nexport const predictAgeAndGender = (input: TNetInput): Promise => nets.ageGenderNet.predictAgeAndGender(input);\n\nexport const loadSsdMobilenetv1Model = (url: string) => nets.ssdMobilenetv1.load(url);\nexport const loadTinyFaceDetectorModel = (url: string) => nets.tinyFaceDetector.load(url);\nexport const loadTinyYolov2Model = (url: string) => nets.tinyYolov2.load(url);\nexport const loadFaceLandmarkModel = (url: string) => nets.faceLandmark68Net.load(url);\nexport const loadFaceLandmarkTinyModel = (url: string) => nets.faceLandmark68TinyNet.load(url);\nexport const loadFaceRecognitionModel = (url: string) => nets.faceRecognitionNet.load(url);\nexport const loadFaceExpressionModel = (url: string) => nets.faceExpressionNet.load(url);\nexport const loadAgeGenderModel = (url: string) => nets.ageGenderNet.load(url);\n\n// backward compatibility\nexport const loadFaceDetectionModel = loadSsdMobilenetv1Model;\nexport const locateFaces = ssdMobilenetv1;\nexport const detectLandmarks = detectFaceLandmarks;\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm.js';\n\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderTask,\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\n\nexport class PredictFaceExpressionsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const faceExpressionsByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map(\n (parentResult, i) => extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]),\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const faceExpressions = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithFaceExpressions(parentResult, faceExpressions);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictAllFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm.js';\n\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { TNetInput } from '../dom/index';\nimport { extendWithAge, WithAge } from '../factories/WithAge';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { extendWithGender, WithGender } from '../factories/WithGender';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllFaceExpressionsTask,\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class PredictAgeAndGenderTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase>[], TSource[]> {\n public async run(): Promise>[]> {\n const parentResults = await this.parentTask;\n\n const ageAndGenderByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map((parentResult, i) => {\n const { age, gender, genderProbability } = ageAndGenderByFace[i];\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n });\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase> | undefined, TSource | undefined> {\n public async run(): Promise> | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { age, gender, genderProbability } = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictAllAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDescriptor, WithFaceDescriptor } from '../factories/WithFaceDescriptor';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class ComputeFaceDescriptorsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n ) {\n super();\n }\n}\n\nexport class ComputeAllFaceDescriptorsTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const descriptors = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n (faces) => Promise.all(faces.map((face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise)),\n null,\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return descriptors.map((descriptor, i) => extendWithFaceDescriptor(parentResults[i], descriptor));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n\nexport class ComputeSingleFaceDescriptorTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n const descriptor = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise,\n null,\n // eslint-disable-next-line no-shadow\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return extendWithFaceDescriptor(parentResult, descriptor);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { TinyYolov2Options } from '../tinyYolov2/index';\nimport { ComposableTask } from './ComposableTask';\nimport { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';\nimport { nets } from './nets';\nimport { PredictAllAgeAndGenderTask, PredictSingleAgeAndGenderTask } from './PredictAgeAndGenderTask';\nimport { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionsTask } from './PredictFaceExpressionsTask';\nimport { FaceDetectionOptions } from './types';\n\nexport class DetectFacesTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n ) {\n super();\n }\n}\n\nexport class DetectAllFacesTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const { input, options } = this;\n\n // eslint-disable-next-line no-nested-ternary\n const faceDetectionFunction = options instanceof TinyFaceDetectorOptions\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyFaceDetector.locateFaces(input, options)\n : (\n // eslint-disable-next-line no-nested-ternary\n options instanceof SsdMobilenetv1Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.ssdMobilenetv1.locateFaces(input, options)\n : (\n options instanceof TinyYolov2Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyYolov2.locateFaces(input, options)\n : null\n )\n );\n\n if (!faceDetectionFunction) {\n throw new Error('detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options');\n }\n\n return faceDetectionFunction(input);\n }\n\n private runAndExtendWithFaceDetections(): Promise[]> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise[]>(async (resolve) => {\n const detections = await this.run();\n resolve(detections.map((detection) => extendWithFaceDetection({}, detection)));\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectAllFaceLandmarksTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n}\n\nexport class DetectSingleFaceTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const faceDetections = await new DetectAllFacesTask(this.input, this.options);\n let faceDetectionWithHighestScore = faceDetections[0];\n faceDetections.forEach((faceDetection) => {\n if (faceDetection.score > faceDetectionWithHighestScore.score) {\n faceDetectionWithHighestScore = faceDetection;\n }\n });\n return faceDetectionWithHighestScore;\n }\n\n private runAndExtendWithFaceDetection(): Promise | undefined> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise | undefined>(async (resolve) => {\n const detection = await this.run();\n resolve(detection ? extendWithFaceDetection<{}>({}, detection) : undefined);\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectSingleFaceLandmarksTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n}\n", "import { TNetInput } from '../dom/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { DetectAllFacesTask, DetectSingleFaceTask } from './DetectFacesTasks';\nimport { FaceDetectionOptions } from './types';\n\nexport function detectSingleFace(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectSingleFaceTask {\n return new DetectSingleFaceTask(input, options);\n}\n\nexport function detectAllFaces(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectAllFacesTask {\n return new DetectAllFacesTask(input, options);\n}\n", "import { TNetInput } from '../dom/index';\nimport { WithFaceDescriptor, WithFaceDetection, WithFaceLandmarks } from '../factories/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/index';\nimport { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\nimport { detectAllFaces } from './detectFaces';\n\n// export allFaces API for backward compatibility\n\nexport async function allFacesSsdMobilenetv1(\n input: TNetInput,\n minConfidence?: number,\n): Promise>>[]> {\n return detectAllFaces(input, new SsdMobilenetv1Options(minConfidence ? { minConfidence } : {}))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport async function allFacesTinyYolov2(\n input: TNetInput,\n forwardParams: ITinyYolov2Options = {},\n): Promise>>[]> {\n return detectAllFaces(input, new TinyYolov2Options(forwardParams))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport const allFaces = allFacesSsdMobilenetv1;\n", "export function euclideanDistance(arr1: number[] | Float32Array, arr2: number[] | Float32Array) {\n if (arr1.length !== arr2.length)\n throw new Error('euclideanDistance: arr1.length !== arr2.length')\n\n const desc1 = Array.from(arr1)\n const desc2 = Array.from(arr2)\n\n return Math.sqrt(\n desc1\n .map((val, i) => val - desc2[i])\n .reduce((res, diff) => res + Math.pow(diff, 2), 0)\n )\n}", "import { FaceMatch } from '../classes/FaceMatch';\nimport { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors';\nimport { euclideanDistance } from '../euclideanDistance';\nimport { WithFaceDescriptor } from '../factories/index';\n\nexport class FaceMatcher {\n private _labeledDescriptors: LabeledFaceDescriptors[]\n\n private _distanceThreshold: number\n\n constructor(\n inputs: LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>,\n distanceThreshold: number = 0.6,\n ) {\n this._distanceThreshold = distanceThreshold;\n\n const inputArray = Array.isArray(inputs) ? inputs : [inputs];\n\n if (!inputArray.length) {\n throw new Error('FaceRecognizer.constructor - expected atleast one input');\n }\n\n let count = 1;\n const createUniqueLabel = () => `person ${count++}`;\n\n this._labeledDescriptors = inputArray.map((desc) => {\n if (desc instanceof LabeledFaceDescriptors) {\n return desc;\n }\n\n if (desc instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc]);\n }\n\n if (desc.descriptor && desc.descriptor instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]);\n }\n\n throw new Error('FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>');\n });\n }\n\n public get labeledDescriptors(): LabeledFaceDescriptors[] { return this._labeledDescriptors; }\n\n public get distanceThreshold(): number { return this._distanceThreshold; }\n\n public computeMeanDistance(queryDescriptor: Float32Array, descriptors: Float32Array[]): number {\n return descriptors\n .map((d) => euclideanDistance(d, queryDescriptor))\n .reduce((d1, d2) => d1 + d2, 0)\n / (descriptors.length || 1);\n }\n\n public matchDescriptor(queryDescriptor: Float32Array): FaceMatch {\n return this.labeledDescriptors\n .map(({ descriptors, label }) => new FaceMatch(\n label,\n this.computeMeanDistance(queryDescriptor, descriptors),\n ))\n .reduce((best, curr) => (best.distance < curr.distance ? best : curr));\n }\n\n public findBestMatch(queryDescriptor: Float32Array): FaceMatch {\n const bestMatch = this.matchDescriptor(queryDescriptor);\n return bestMatch.distance < this.distanceThreshold\n ? bestMatch\n : new FaceMatch('unknown', bestMatch.distance);\n }\n\n public toJSON(): any {\n return {\n distanceThreshold: this.distanceThreshold,\n labeledDescriptors: this.labeledDescriptors.map((ld) => ld.toJSON()),\n };\n }\n\n public static fromJSON(json: any): FaceMatcher {\n const labeledDescriptors = json.labeledDescriptors\n .map((ld: any) => LabeledFaceDescriptors.fromJSON(ld));\n return new FaceMatcher(labeledDescriptors, json.distanceThreshold);\n }\n}\n", "import { TinyFaceDetector } from './TinyFaceDetector';\n\nexport * from './TinyFaceDetector';\nexport * from './TinyFaceDetectorOptions';\n\nexport function createTinyFaceDetector(weights: Float32Array) {\n const net = new TinyFaceDetector();\n net.extractWeights(weights);\n return net;\n}\n", "import { Dimensions, IDimensions } from './classes/index';\nimport { FaceDetection } from './classes/FaceDetection';\nimport { FaceLandmarks } from './classes/FaceLandmarks';\nimport { extendWithFaceDetection, isWithFaceDetection } from './factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, isWithFaceLandmarks } from './factories/WithFaceLandmarks';\n\nexport function resizeResults(results: T, dimensions: IDimensions): T {\n\n const { width, height } = new Dimensions(dimensions.width, dimensions.height)\n\n if (width <= 0 || height <= 0) {\n throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({ width, height })}`)\n }\n\n if (Array.isArray(results)) {\n // return results.map(obj => resizeResults(obj, { width, height })) as any as T\n return (results as Array).map(obj => resizeResults(obj, { width, height } as IDimensions)) as any as T\n }\n\n if (isWithFaceLandmarks(results)) {\n const resizedDetection = results.detection.forSize(width, height)\n const resizedLandmarks = results.unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height)\n return extendWithFaceLandmarks(extendWithFaceDetection(results, resizedDetection), resizedLandmarks)\n }\n\n if (isWithFaceDetection(results)) {\n return extendWithFaceDetection(results, results.detection.forSize(width, height))\n }\n\n if (results instanceof FaceLandmarks || results instanceof FaceDetection) {\n return (results as any).forSize(width, height)\n }\n\n return results\n}"], - "mappings": "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", + "sources": ["../src/tfjs/tf-browser.ts", "../src/env/isNodejs.ts", "../src/index.ts", "../src/draw/index.ts", "../src/draw/drawContour.ts", "../src/utils/index.ts", "../src/classes/Dimensions.ts", "../src/classes/Point.ts", "../src/classes/Box.ts", "../src/classes/BoundingBox.ts", "../src/classes/ObjectDetection.ts", "../src/classes/FaceDetection.ts", "../src/ops/iou.ts", "../src/ops/minBbox.ts", "../src/ops/nonMaxSuppression.ts", "../src/ops/normalize.ts", "../src/ops/padToSquare.ts", "../src/ops/shuffleArray.ts", "../src/ops/index.ts", "../src/classes/Rect.ts", "../src/classes/FaceLandmarks.ts", "../src/classes/FaceLandmarks5.ts", "../src/classes/FaceLandmarks68.ts", "../src/classes/FaceMatch.ts", "../src/classes/LabeledBox.ts", "../src/classes/LabeledFaceDescriptors.ts", "../src/classes/PredictedBox.ts", "../src/factories/WithFaceDetection.ts", "../src/env/createBrowserEnv.ts", "../src/env/createFileSystem.ts", "../src/env/createNodejsEnv.ts", "../src/env/isBrowser.ts", "../src/env/index.ts", "../src/dom/resolveInput.ts", "../src/dom/getContext2dOrThrow.ts", "../src/draw/DrawTextField.ts", "../src/draw/DrawBox.ts", "../src/draw/drawDetections.ts", "../src/faceExpressionNet/FaceExpressionNet.ts", "../src/dom/isMediaLoaded.ts", "../src/dom/awaitMediaLoaded.ts", "../src/dom/bufferToImage.ts", "../src/dom/getMediaDimensions.ts", "../src/dom/createCanvas.ts", "../src/dom/imageTensorToCanvas.ts", "../src/dom/isMediaElement.ts", "../src/dom/NetInput.ts", "../src/dom/imageToSquare.ts", "../src/dom/toNetInput.ts", "../src/dom/extractFaces.ts", "../src/dom/extractFaceTensors.ts", "../src/dom/fetchOrThrow.ts", "../src/dom/fetchImage.ts", "../src/dom/fetchJson.ts", "../src/dom/fetchNetWeights.ts", "../src/dom/loadWeightMap.ts", "../src/common/getModelUris.ts", "../src/dom/matchDimensions.ts", "../src/faceFeatureExtractor/FaceFeatureExtractor.ts", "../src/NeuralNetwork.ts", "../src/faceFeatureExtractor/denseBlock.ts", "../src/common/depthwiseSeparableConv.ts", "../src/common/convLayer.ts", "../src/common/disposeUnusedWeightTensors.ts", "../src/common/extractConvParamsFactory.ts", "../src/common/extractFCParamsFactory.ts", "../src/common/extractSeparableConvParamsFactory.ts", "../src/common/types.ts", "../src/common/extractWeightEntryFactory.ts", "../src/common/extractWeightsFactory.ts", "../src/faceFeatureExtractor/extractorsFactory.ts", "../src/faceFeatureExtractor/extractParams.ts", "../src/common/loadConvParamsFactory.ts", "../src/faceFeatureExtractor/loadParamsFactory.ts", "../src/faceFeatureExtractor/extractParamsFromWeigthMap.ts", "../src/faceProcessor/FaceProcessor.ts", "../src/common/fullyConnectedLayer.ts", "../src/faceProcessor/extractParams.ts", "../src/faceProcessor/extractParamsFromWeigthMap.ts", "../src/faceProcessor/util.ts", "../src/faceExpressionNet/FaceExpressions.ts", "../src/factories/WithFaceExpressions.ts", "../src/draw/drawFaceExpressions.ts", "../src/factories/WithFaceLandmarks.ts", "../src/draw/DrawFaceLandmarks.ts", "../src/ageGenderNet/AgeGenderNet.ts", "../src/xception/TinyXception.ts", "../src/xception/extractParams.ts", "../src/xception/extractParamsFromWeigthMap.ts", "../src/ageGenderNet/extractParams.ts", "../src/ageGenderNet/extractParamsFromWeigthMap.ts", "../src/ageGenderNet/types.ts", "../src/faceLandmarkNet/FaceLandmark68NetBase.ts", "../src/faceLandmarkNet/FaceLandmark68Net.ts", "../src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts", "../src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts", "../src/faceFeatureExtractor/extractParamsTiny.ts", "../src/faceLandmarkNet/FaceLandmark68TinyNet.ts", "../src/faceLandmarkNet/index.ts", "../src/faceRecognitionNet/FaceRecognitionNet.ts", "../src/faceRecognitionNet/convLayer.ts", "../src/faceRecognitionNet/scaleLayer.ts", "../src/faceRecognitionNet/extractParams.ts", "../src/faceRecognitionNet/extractParamsFromWeigthMap.ts", "../src/faceRecognitionNet/residualLayer.ts", "../src/faceRecognitionNet/index.ts", "../src/factories/WithFaceDescriptor.ts", "../src/factories/WithAge.ts", "../src/factories/WithGender.ts", "../src/ssdMobilenetv1/SsdMobilenetv1.ts", "../src/ssdMobilenetv1/extractParams.ts", "../src/ssdMobilenetv1/extractParamsFromWeigthMap.ts", "../src/ssdMobilenetv1/mobileNetV1.ts", "../src/ssdMobilenetv1/pointwiseConvLayer.ts", "../src/ssdMobilenetv1/nonMaxSuppression.ts", "../src/ssdMobilenetv1/outputLayer.ts", "../src/ssdMobilenetv1/predictionLayer.ts", "../src/ssdMobilenetv1/boxPredictionLayer.ts", "../src/ssdMobilenetv1/SsdMobilenetv1Options.ts", "../src/ssdMobilenetv1/index.ts", "../src/tinyYolov2/const.ts", "../src/tinyYolov2/TinyYolov2Base.ts", "../src/tinyYolov2/config.ts", "../src/tinyYolov2/convWithBatchNorm.ts", "../src/tinyYolov2/leaky.ts", "../src/tinyYolov2/depthwiseSeparableConv.ts", "../src/tinyYolov2/extractParams.ts", "../src/tinyYolov2/extractParamsFromWeigthMap.ts", "../src/tinyYolov2/TinyYolov2Options.ts", "../src/tinyYolov2/TinyYolov2.ts", "../src/tinyYolov2/index.ts", "../src/tinyFaceDetector/TinyFaceDetectorOptions.ts", "../src/globalApi/ComposableTask.ts", "../src/globalApi/DetectFaceLandmarksTasks.ts", "../src/globalApi/extractFacesAndComputeResults.ts", "../src/tinyFaceDetector/const.ts", "../src/tinyFaceDetector/TinyFaceDetector.ts", "../src/globalApi/nets.ts", "../src/globalApi/PredictFaceExpressionsTask.ts", "../src/globalApi/PredictAgeAndGenderTask.ts", "../src/globalApi/ComputeFaceDescriptorsTasks.ts", "../src/globalApi/DetectFacesTasks.ts", "../src/globalApi/detectFaces.ts", "../src/globalApi/allFaces.ts", "../src/euclideanDistance.ts", "../src/globalApi/FaceMatcher.ts", "../src/tinyFaceDetector/index.ts", "../src/resizeResults.ts"], + "sourcesContent": ["/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable node/no-unpublished-import */\n\n// wrapper to load tfjs in a single place so version can be changed quickly\n\nexport * from '@tensorflow/tfjs/dist/index.js';\nexport * from '@tensorflow/tfjs-backend-wasm';\n", "export function isNodejs(): boolean {\n return typeof global === 'object'\n && typeof require === 'function'\n && typeof module !== 'undefined'\n // issues with gatsby.js: module.exports is undefined\n // && !!module.exports\n && typeof process !== 'undefined' && !!process.version;\n}\n", "import * as tf from '../dist/tfjs.esm';\nimport * as draw from './draw/index';\nimport * as utils from './utils/index';\nimport * as pkg from '../package.json';\n\nexport { tf, draw, utils };\n\nexport * from './ageGenderNet/index';\nexport * from './classes/index';\nexport * from './dom/index';\nexport * from './env/index';\nexport * from './faceExpressionNet/index';\nexport * from './faceLandmarkNet/index';\nexport * from './faceRecognitionNet/index';\nexport * from './factories/index';\nexport * from './globalApi/index';\nexport * from './ops/index';\nexport * from './ssdMobilenetv1/index';\nexport * from './tinyFaceDetector/index';\nexport * from './tinyYolov2/index';\nexport * from './euclideanDistance';\nexport * from './NeuralNetwork';\nexport * from './resizeResults';\n\nconst node = (typeof process !== 'undefined');\n// eslint-disable-next-line no-undef\nconst browser = (typeof navigator !== 'undefined') && (typeof navigator.userAgent !== 'undefined');\nexport const version = { faceapi: pkg.version as string, node, browser };\n", "export * from './drawContour';\nexport * from './drawDetections';\nexport * from './drawFaceExpressions';\nexport * from './DrawBox';\nexport * from './DrawFaceLandmarks';\nexport * from './DrawTextField';\n", "import { Point } from '../classes/index';\n\nexport function drawContour(\n ctx: CanvasRenderingContext2D,\n points: Point[],\n isClosed: boolean = false,\n) {\n ctx.beginPath();\n\n points.slice(1).forEach(({ x, y }, prevIdx) => {\n const from = points[prevIdx];\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(x, y);\n });\n\n if (isClosed) {\n const from = points[points.length - 1];\n const to = points[0];\n if (!from || !to) {\n return;\n }\n\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n }\n\n ctx.stroke();\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Point } from '../classes/index';\nimport { Dimensions, IDimensions } from '../classes/Dimensions';\n\nexport function isTensor(tensor: any, dim: number) {\n return tensor instanceof tf.Tensor && tensor.shape.length === dim;\n}\n\nexport function isTensor1D(tensor: any): tensor is tf.Tensor1D {\n return isTensor(tensor, 1);\n}\n\nexport function isTensor2D(tensor: any): tensor is tf.Tensor2D {\n return isTensor(tensor, 2);\n}\n\nexport function isTensor3D(tensor: any): tensor is tf.Tensor3D {\n return isTensor(tensor, 3);\n}\n\nexport function isTensor4D(tensor: any): tensor is tf.Tensor4D {\n return isTensor(tensor, 4);\n}\n\nexport function isFloat(num: number) {\n return num % 1 !== 0;\n}\n\nexport function isEven(num: number) {\n return num % 2 === 0;\n}\n\nexport function round(num: number, prec: number = 2) {\n const f = 10 ** prec;\n return Math.floor(num * f) / f;\n}\n\nexport function isDimensions(obj: any): boolean {\n return obj && obj.width && obj.height;\n}\n\nexport function computeReshapedDimensions({ width, height }: IDimensions, inputSize: number) {\n const scale = inputSize / Math.max(height, width);\n return new Dimensions(Math.round(width * scale), Math.round(height * scale));\n}\n\nexport function getCenterPoint(pts: Point[]): Point {\n return pts.reduce((sum, pt) => sum.add(pt), new Point(0, 0))\n .div(new Point(pts.length, pts.length));\n}\n\nexport function range(num: number, start: number, step: number): number[] {\n return Array(num).fill(0).map((_, i) => start + (i * step));\n}\n\nexport function isValidNumber(num: any) {\n // eslint-disable-next-line no-mixed-operators\n return !!num && (num !== Infinity) && (num !== -Infinity) && !Number.isNaN(num) || num === 0;\n}\n\nexport function isValidProbablitiy(num: any) {\n return isValidNumber(num) && num >= 0 && num <= 1.0;\n}\n", "import { isValidNumber } from '../utils/index';\n\nexport interface IDimensions {\n width: number\n height: number\n}\n\nexport class Dimensions implements IDimensions {\n private _width: number\n\n private _height: number\n\n constructor(width: number, height: number) {\n if (!isValidNumber(width) || !isValidNumber(height)) {\n throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({ width, height })}`);\n }\n\n this._width = width;\n this._height = height;\n }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public reverse(): Dimensions {\n return new Dimensions(1 / this.width, 1 / this.height);\n }\n}\n", "export interface IPoint {\n x: number\n y: number\n}\n\nexport class Point implements IPoint {\n private _x: number\n\n private _y: number\n\n constructor(x: number, y: number) {\n this._x = x;\n this._y = y;\n }\n\n get x(): number { return this._x; }\n\n get y(): number { return this._y; }\n\n public add(pt: IPoint): Point {\n return new Point(this.x + pt.x, this.y + pt.y);\n }\n\n public sub(pt: IPoint): Point {\n return new Point(this.x - pt.x, this.y - pt.y);\n }\n\n public mul(pt: IPoint): Point {\n return new Point(this.x * pt.x, this.y * pt.y);\n }\n\n public div(pt: IPoint): Point {\n return new Point(this.x / pt.x, this.y / pt.y);\n }\n\n public abs(): Point {\n return new Point(Math.abs(this.x), Math.abs(this.y));\n }\n\n public magnitude(): number {\n return Math.sqrt((this.x ** 2) + (this.y ** 2));\n }\n\n public floor(): Point {\n return new Point(Math.floor(this.x), Math.floor(this.y));\n }\n}\n", "import { isDimensions, isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { IDimensions } from './Dimensions';\nimport { Point } from './Point';\nimport { IRect } from './Rect';\n\nexport class Box implements IBoundingBox, IRect {\n public static isRect(rect: any): boolean {\n return !!rect && [rect.x, rect.y, rect.width, rect.height].every(isValidNumber);\n }\n\n public static assertIsValidBox(box: any, callee: string, allowNegativeDimensions: boolean = false) {\n if (!Box.isRect(box)) {\n throw new Error(`${callee} - invalid box: ${JSON.stringify(box)}, expected object with properties x, y, width, height`);\n }\n\n if (!allowNegativeDimensions && (box.width < 0 || box.height < 0)) {\n throw new Error(`${callee} - width (${box.width}) and height (${box.height}) must be positive numbers`);\n }\n }\n\n private _x: number\n\n private _y: number\n\n private _width: number\n\n private _height: number\n\n constructor(_box: IBoundingBox | IRect, allowNegativeDimensions: boolean = true) {\n const box = (_box || {}) as any;\n\n const isBbox = [box.left, box.top, box.right, box.bottom].every(isValidNumber);\n const isRect = [box.x, box.y, box.width, box.height].every(isValidNumber);\n\n if (!isRect && !isBbox) {\n throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(box)}`);\n }\n\n const [x, y, width, height] = isRect\n ? [box.x, box.y, box.width, box.height]\n : [box.left, box.top, box.right - box.left, box.bottom - box.top];\n\n Box.assertIsValidBox({\n x, y, width, height,\n }, 'Box.constructor', allowNegativeDimensions);\n\n this._x = x;\n this._y = y;\n this._width = width;\n this._height = height;\n }\n\n public get x(): number { return this._x; }\n\n public get y(): number { return this._y; }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public get left(): number { return this.x; }\n\n public get top(): number { return this.y; }\n\n public get right(): number { return this.x + this.width; }\n\n public get bottom(): number { return this.y + this.height; }\n\n public get area(): number { return this.width * this.height; }\n\n public get topLeft(): Point { return new Point(this.left, this.top); }\n\n public get topRight(): Point { return new Point(this.right, this.top); }\n\n public get bottomLeft(): Point { return new Point(this.left, this.bottom); }\n\n public get bottomRight(): Point { return new Point(this.right, this.bottom); }\n\n public round(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.round(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public floor(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.floor(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public toSquare(): Box {\n let {\n x, y, width, height,\n } = this;\n const diff = Math.abs(width - height);\n if (width < height) {\n x -= (diff / 2);\n width += diff;\n }\n if (height < width) {\n y -= (diff / 2);\n height += diff;\n }\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public rescale(s: IDimensions | number): Box {\n const scaleX = isDimensions(s) ? (s as IDimensions).width : s as number;\n const scaleY = isDimensions(s) ? (s as IDimensions).height : s as number;\n return new Box({\n x: this.x * scaleX,\n y: this.y * scaleY,\n width: this.width * scaleX,\n height: this.height * scaleY,\n });\n }\n\n public pad(padX: number, padY: number): Box {\n const [x, y, width, height] = [\n this.x - (padX / 2),\n this.y - (padY / 2),\n this.width + padX,\n this.height + padY,\n ];\n return new Box({\n x, y, width, height,\n });\n }\n\n public clipAtImageBorders(imgWidth: number, imgHeight: number): Box {\n const {\n x, y, right, bottom,\n } = this;\n const clippedX = Math.max(x, 0);\n const clippedY = Math.max(y, 0);\n\n const newWidth = right - clippedX;\n const newHeight = bottom - clippedY;\n const clippedWidth = Math.min(newWidth, imgWidth - clippedX);\n const clippedHeight = Math.min(newHeight, imgHeight - clippedY);\n\n return (new Box({\n x: clippedX, y: clippedY, width: clippedWidth, height: clippedHeight,\n })).floor();\n }\n\n public shift(sx: number, sy: number): Box {\n const { width, height } = this;\n const x = this.x + sx;\n const y = this.y + sy;\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public padAtBorders(imageHeight: number, imageWidth: number) {\n const w = this.width + 1;\n const h = this.height + 1;\n\n const dx = 1;\n const dy = 1;\n let edx = w;\n let edy = h;\n\n let x = this.left;\n let y = this.top;\n let ex = this.right;\n let ey = this.bottom;\n\n if (ex > imageWidth) {\n edx = -ex + imageWidth + w;\n ex = imageWidth;\n }\n if (ey > imageHeight) {\n edy = -ey + imageHeight + h;\n ey = imageHeight;\n }\n if (x < 1) {\n edy = 2 - x;\n x = 1;\n }\n if (y < 1) {\n edy = 2 - y;\n y = 1;\n }\n\n return {\n dy, edy, dx, edx, y, ey, x, ex, w, h,\n };\n }\n\n public calibrate(region: Box) {\n return new Box({\n left: this.left + (region.left * this.width),\n top: this.top + (region.top * this.height),\n right: this.right + (region.right * this.width),\n bottom: this.bottom + (region.bottom * this.height),\n }).toSquare().round();\n }\n}\n", "import { Box } from './Box';\n\nexport interface IBoundingBox {\n left: number\n top: number\n right: number\n bottom: number\n}\n\nexport class BoundingBox extends Box implements IBoundingBox {\n constructor(left: number, top: number, right: number, bottom: number, allowNegativeDimensions: boolean = false) {\n super({\n left, top, right, bottom,\n }, allowNegativeDimensions);\n }\n}\n", "import { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { IRect, Rect } from './Rect';\n\nexport class ObjectDetection {\n private _score: number\n\n private _classScore: number\n\n private _className: string\n\n private _box: Rect\n\n private _imageDims: Dimensions\n\n constructor(\n score: number,\n classScore: number,\n className: string,\n relativeBox: IRect,\n imageDims: IDimensions,\n ) {\n this._imageDims = new Dimensions(imageDims.width, imageDims.height);\n this._score = score;\n this._classScore = classScore;\n this._className = className;\n this._box = new Box(relativeBox).rescale(this._imageDims);\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n\n public get className(): string { return this._className; }\n\n public get box(): Box { return this._box; }\n\n public get imageDims(): Dimensions { return this._imageDims; }\n\n public get imageWidth(): number { return this.imageDims.width; }\n\n public get imageHeight(): number { return this.imageDims.height; }\n\n public get relativeBox(): Box { return new Box(this._box).rescale(this.imageDims.reverse()); }\n\n public forSize(width: number, height: number): ObjectDetection {\n return new ObjectDetection(\n this.score,\n this.classScore,\n this.className,\n this.relativeBox,\n { width, height },\n );\n }\n}\n", "import { Box } from './Box';\nimport { IDimensions } from './Dimensions';\nimport { ObjectDetection } from './ObjectDetection';\nimport { Rect } from './Rect';\n\nexport interface IFaceDetecion {\n score: number\n box: Box\n}\n\nexport class FaceDetection extends ObjectDetection implements IFaceDetecion {\n constructor(\n score: number,\n relativeBox: Rect,\n imageDims: IDimensions,\n ) {\n super(score, score, '', relativeBox, imageDims);\n }\n\n public forSize(width: number, height: number): FaceDetection {\n const { score, relativeBox, imageDims } = super.forSize(width, height);\n return new FaceDetection(score, relativeBox, imageDims);\n }\n}\n", "import { Box } from '../classes/Box';\n\nexport function iou(box1: Box, box2: Box, isIOU: boolean = true) {\n const width = Math.max(0.0, Math.min(box1.right, box2.right) - Math.max(box1.left, box2.left));\n const height = Math.max(0.0, Math.min(box1.bottom, box2.bottom) - Math.max(box1.top, box2.top));\n const interSection = width * height;\n\n return isIOU\n ? interSection / (box1.area + box2.area - interSection)\n : interSection / Math.min(box1.area, box2.area);\n}\n", "import { BoundingBox, IPoint } from '../classes/index';\n\nexport function minBbox(pts: IPoint[]): BoundingBox {\n const xs = pts.map((pt) => pt.x);\n const ys = pts.map((pt) => pt.y);\n const minX = xs.reduce((min, x) => (x < min ? x : min), Infinity);\n const minY = ys.reduce((min, y) => (y < min ? y : min), Infinity);\n const maxX = xs.reduce((max, x) => (max < x ? x : max), 0);\n const maxY = ys.reduce((max, y) => (max < y ? y : max), 0);\n\n return new BoundingBox(minX, minY, maxX, maxY);\n}\n", "import { Box } from '../classes/Box';\nimport { iou } from './iou';\n\nexport function nonMaxSuppression(\n boxes: Box[],\n scores: number[],\n iouThreshold: number,\n isIOU: boolean = true,\n): number[] {\n let indicesSortedByScore = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .sort((c1, c2) => c1.score - c2.score)\n .map((c) => c.boxIndex);\n\n const pick: number[] = [];\n\n while (indicesSortedByScore.length > 0) {\n const curr = indicesSortedByScore.pop() as number;\n pick.push(curr);\n\n const indices = indicesSortedByScore;\n\n const outputs: number[] = [];\n for (let i = 0; i < indices.length; i++) {\n const idx = indices[i];\n\n const currBox = boxes[curr];\n const idxBox = boxes[idx];\n\n outputs.push(iou(currBox, idxBox, isIOU));\n }\n\n indicesSortedByScore = indicesSortedByScore.filter(\n (_, j) => outputs[j] <= iouThreshold,\n );\n }\n\n return pick;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nexport function normalize(x: tf.Tensor4D, meanRgb: number[]): tf.Tensor4D {\n return tf.tidy(() => {\n const [r, g, b] = meanRgb;\n const avg_r = tf.fill([...x.shape.slice(0, 3), 1], r, 'float32');\n const avg_g = tf.fill([...x.shape.slice(0, 3), 1], g, 'float32');\n const avg_b = tf.fill([...x.shape.slice(0, 3), 1], b, 'float32');\n const avg_rgb = tf.concat([avg_r, avg_g, avg_b], 3);\n\n return tf.sub(x, avg_rgb);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\n/**\n * Pads the smaller dimension of an image tensor with zeros, such that width === height.\n *\n * @param imgTensor The image tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The padded tensor with width === height.\n */\nexport function padToSquare(\n imgTensor: tf.Tensor4D,\n isCenterImage: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const [height, width] = imgTensor.shape.slice(1);\n if (height === width) {\n return imgTensor;\n }\n\n const dimDiff = Math.abs(height - width);\n const paddingAmount = Math.round(dimDiff * (isCenterImage ? 0.5 : 1));\n const paddingAxis = height > width ? 2 : 1;\n\n const createPaddingTensor = (paddingAmountLocal: number): tf.Tensor => {\n const paddingTensorShape = imgTensor.shape.slice();\n paddingTensorShape[paddingAxis] = paddingAmountLocal;\n return tf.fill(paddingTensorShape, 0, 'float32');\n };\n\n const paddingTensorAppend = createPaddingTensor(paddingAmount);\n const remainingPaddingAmount = dimDiff - (paddingTensorAppend.shape[paddingAxis] as number);\n\n const paddingTensorPrepend = isCenterImage && remainingPaddingAmount\n ? createPaddingTensor(remainingPaddingAmount)\n : null;\n\n const tensorsToStack = [\n paddingTensorPrepend,\n imgTensor,\n paddingTensorAppend,\n ]\n .filter((t) => !!t)\n // .map((t: tf.Tensor) => t.toFloat()) as tf.Tensor4D[]\n .map((t: tf.Tensor) => tf.cast(t, 'float32')) as tf.Tensor4D[];\n return tf.concat(tensorsToStack, paddingAxis);\n });\n}\n", "export function shuffleArray(inputArray: any[]) {\n const array = inputArray.slice();\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const x = array[i];\n array[i] = array[j];\n array[j] = x;\n }\n return array;\n}\n", "export * from './iou';\nexport * from './minBbox';\nexport * from './nonMaxSuppression';\nexport * from './normalize';\nexport * from './padToSquare';\nexport * from './shuffleArray';\n\nexport function sigmoid(x: number) {\n return 1 / (1 + Math.exp(-x));\n}\n\nexport function inverseSigmoid(x: number) {\n return Math.log(x / (1 - x));\n}\n", "import { Box } from './Box';\n\nexport interface IRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport class Rect extends Box implements IRect {\n constructor(x: number, y: number, width: number, height: number, allowNegativeDimensions: boolean = false) {\n super({\n x, y, width, height,\n }, allowNegativeDimensions);\n }\n}\n", "import { minBbox } from '../ops/index';\nimport { getCenterPoint } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { FaceDetection } from './FaceDetection';\nimport { Point } from './Point';\nimport { IRect, Rect } from './Rect';\n\n// face alignment constants\nconst relX = 0.5;\nconst relY = 0.43;\nconst relScale = 0.45;\n\nexport interface IFaceLandmarks {\n positions: Point[]\n shift: Point\n}\n\nexport class FaceLandmarks implements IFaceLandmarks {\n protected _shift: Point\n\n protected _positions: Point[]\n\n protected _imgDims: Dimensions\n\n constructor(\n relativeFaceLandmarkPositions: Point[],\n imgDims: IDimensions,\n shift: Point = new Point(0, 0),\n ) {\n const { width, height } = imgDims;\n this._imgDims = new Dimensions(width, height);\n this._shift = shift;\n this._positions = relativeFaceLandmarkPositions.map(\n (pt) => pt.mul(new Point(width, height)).add(shift),\n );\n }\n\n public get shift(): Point { return new Point(this._shift.x, this._shift.y); }\n\n public get imageWidth(): number { return this._imgDims.width; }\n\n public get imageHeight(): number { return this._imgDims.height; }\n\n public get positions(): Point[] { return this._positions; }\n\n public get relativePositions(): Point[] {\n return this._positions.map(\n (pt) => pt.sub(this._shift).div(new Point(this.imageWidth, this.imageHeight)),\n );\n }\n\n public forSize(width: number, height: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n { width, height },\n );\n }\n\n public shiftBy(x: number, y: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n this._imgDims,\n new Point(x, y),\n );\n }\n\n public shiftByPoint(pt: Point): T {\n return this.shiftBy(pt.x, pt.y);\n }\n\n /**\n * Aligns the face landmarks after face detection from the relative positions of the faces\n * bounding box, or it's current shift. This function should be used to align the face images\n * after face detection has been performed, before they are passed to the face recognition net.\n * This will make the computed face descriptor more accurate.\n *\n * @param detection (optional) The bounding box of the face or the face detection result. If\n * no argument was passed the position of the face landmarks are assumed to be relative to\n * it's current shift.\n * @returns The bounding box of the aligned face.\n */\n public align(\n detection?: FaceDetection | IRect | IBoundingBox | null,\n options: { useDlibAlignment?: boolean, minBoxPadding?: number } = { },\n ): Box {\n if (detection) {\n const box = detection instanceof FaceDetection\n ? detection.box.floor()\n : new Box(detection);\n\n return this.shiftBy(box.x, box.y).align(null, options);\n }\n\n const { useDlibAlignment, minBoxPadding } = { useDlibAlignment: false, minBoxPadding: 0.2, ...options };\n\n if (useDlibAlignment) {\n return this.alignDlib();\n }\n\n return this.alignMinBbox(minBoxPadding);\n }\n\n private alignDlib(): Box {\n const centers = this.getRefPointsForAlignment();\n\n const [leftEyeCenter, rightEyeCenter, mouthCenter] = centers;\n const distToMouth = (pt: Point) => mouthCenter.sub(pt).magnitude();\n const eyeToMouthDist = (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2;\n\n const size = Math.floor(eyeToMouthDist / relScale);\n\n const refPoint = getCenterPoint(centers);\n // TODO: pad in case rectangle is out of image bounds\n const x = Math.floor(Math.max(0, refPoint.x - (relX * size)));\n const y = Math.floor(Math.max(0, refPoint.y - (relY * size)));\n\n return new Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y));\n }\n\n private alignMinBbox(padding: number): Box {\n const box = minBbox(this.positions);\n return box.pad(box.width * padding, box.height * padding);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n throw new Error('getRefPointsForAlignment not implemented by base class');\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks5 extends FaceLandmarks {\n protected getRefPointsForAlignment(): Point[] {\n const pts = this.positions;\n return [\n pts[0],\n pts[1],\n getCenterPoint([pts[3], pts[4]]),\n ];\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks68 extends FaceLandmarks {\n public getJawOutline(): Point[] {\n return this.positions.slice(0, 17);\n }\n\n public getLeftEyeBrow(): Point[] {\n return this.positions.slice(17, 22);\n }\n\n public getRightEyeBrow(): Point[] {\n return this.positions.slice(22, 27);\n }\n\n public getNose(): Point[] {\n return this.positions.slice(27, 36);\n }\n\n public getLeftEye(): Point[] {\n return this.positions.slice(36, 42);\n }\n\n public getRightEye(): Point[] {\n return this.positions.slice(42, 48);\n }\n\n public getMouth(): Point[] {\n return this.positions.slice(48, 68);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n return [\n this.getLeftEye(),\n this.getRightEye(),\n this.getMouth(),\n ].map(getCenterPoint);\n }\n}\n", "import { round } from '../utils/index';\n\nexport interface IFaceMatch {\n label: string\n distance: number\n}\n\nexport class FaceMatch implements IFaceMatch {\n private _label: string\n\n private _distance: number\n\n constructor(label: string, distance: number) {\n this._label = label;\n this._distance = distance;\n }\n\n public get label(): string { return this._label; }\n\n public get distance(): number { return this._distance; }\n\n public toString(withDistance: boolean = true): string {\n return `${this.label}${withDistance ? ` (${round(this.distance)})` : ''}`;\n }\n}\n", "import { isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { IRect } from './Rect';\n\nexport class LabeledBox extends Box {\n public static assertIsValidLabeledBox(box: any, callee: string) {\n Box.assertIsValidBox(box, callee);\n\n if (!isValidNumber(box.label)) {\n throw new Error(`${callee} - expected property label (${box.label}) to be a number`);\n }\n }\n\n private _label: number\n\n constructor(box: IBoundingBox | IRect | any, label: number) {\n super(box);\n this._label = label;\n }\n\n public get label(): number { return this._label; }\n}\n", "export class LabeledFaceDescriptors {\n private _label: string\n\n private _descriptors: Float32Array[]\n\n constructor(label: string, descriptors: Float32Array[]) {\n if (!(typeof label === 'string')) {\n throw new Error('LabeledFaceDescriptors - constructor expected label to be a string');\n }\n\n if (!Array.isArray(descriptors) || descriptors.some((desc) => !(desc instanceof Float32Array))) {\n throw new Error('LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array');\n }\n\n this._label = label;\n this._descriptors = descriptors;\n }\n\n public get label(): string { return this._label; }\n\n public get descriptors(): Float32Array[] { return this._descriptors; }\n\n public toJSON(): any {\n return {\n label: this.label,\n descriptors: this.descriptors.map((d) => Array.from(d)),\n };\n }\n\n public static fromJSON(json: any): LabeledFaceDescriptors {\n const descriptors = json.descriptors.map((d: any) => new Float32Array(d));\n return new LabeledFaceDescriptors(json.label, descriptors);\n }\n}\n", "import { isValidProbablitiy } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { LabeledBox } from './LabeledBox';\nimport { IRect } from './Rect';\n\nexport class PredictedBox extends LabeledBox {\n public static assertIsValidPredictedBox(box: any, callee: string) {\n LabeledBox.assertIsValidLabeledBox(box, callee);\n\n if (\n !isValidProbablitiy(box.score)\n || !isValidProbablitiy(box.classScore)\n ) {\n throw new Error(`${callee} - expected properties score (${box.score}) and (${box.classScore}) to be a number between [0, 1]`);\n }\n }\n\n private _score: number\n\n private _classScore: number\n\n constructor(box: IBoundingBox | IRect | any, label: number, score: number, classScore: number) {\n super(box, label);\n this._score = score;\n this._classScore = classScore;\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\n\nexport type WithFaceDetection = TSource & {\n detection: FaceDetection\n}\n\nexport function isWithFaceDetection(obj: any): obj is WithFaceDetection<{}> {\n return obj.detection instanceof FaceDetection;\n}\n\nexport function extendWithFaceDetection<\n TSource\n>(\n sourceObj: TSource,\n detection: FaceDetection,\n): WithFaceDetection {\n const extension = { detection };\n return { ...sourceObj, ...extension };\n}\n", "import { Environment } from './types';\n\nexport function createBrowserEnv(): Environment {\n const fetch = window.fetch;\n if (!fetch) throw new Error('fetch - missing fetch implementation for browser environment');\n\n const readFile = () => {\n throw new Error('readFile - filesystem not available for browser environment');\n };\n\n return {\n Canvas: HTMLCanvasElement,\n CanvasRenderingContext2D,\n Image: HTMLImageElement,\n ImageData,\n Video: HTMLVideoElement,\n createCanvasElement: () => document.createElement('canvas'),\n createImageElement: () => document.createElement('img'),\n fetch,\n readFile,\n };\n}\n", "import { FileSystem } from './types';\n\nexport function createFileSystem(fs?: any): FileSystem {\n let requireFsError = '';\n\n if (!fs) {\n try {\n // eslint-disable-next-line global-require\n fs = require('fs');\n } catch (err) {\n requireFsError = err.toString();\n }\n }\n\n const readFile = fs\n ? (filePath: string) => new Promise((resolve, reject) => {\n fs.readFile(filePath, (err: any, buffer: Buffer) => (err ? reject(err) : resolve(buffer)));\n })\n : () => {\n throw new Error(`readFile - failed to require fs in nodejs environment with error: ${requireFsError}`);\n };\n\n return {\n readFile,\n };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { createFileSystem } from './createFileSystem';\nimport { Environment } from './types';\n\nexport function createNodejsEnv(): Environment {\n // eslint-disable-next-line dot-notation\n const Canvas = global['Canvas'] || global.HTMLCanvasElement;\n const Image = global.Image || global.HTMLImageElement;\n\n const createCanvasElement = () => {\n if (Canvas) return new Canvas();\n throw new Error('createCanvasElement - missing Canvas implementation for nodejs environment');\n };\n\n const createImageElement = () => {\n if (Image) return new Image();\n throw new Error('createImageElement - missing Image implementation for nodejs environment');\n };\n\n const fetch = global.fetch;\n // if (!fetch) throw new Error('fetch - missing fetch implementation for nodejs environment');\n\n const fileSystem = createFileSystem();\n\n return {\n Canvas: Canvas || class {},\n CanvasRenderingContext2D: global.CanvasRenderingContext2D || class {},\n Image: Image || class {},\n ImageData: global.ImageData || class {},\n Video: global.HTMLVideoElement || class {},\n createCanvasElement,\n createImageElement,\n fetch,\n ...fileSystem,\n };\n}\n", "export function isBrowser(): boolean {\n return typeof window === 'object'\n && typeof document !== 'undefined'\n && typeof HTMLImageElement !== 'undefined'\n && typeof HTMLCanvasElement !== 'undefined'\n && typeof HTMLVideoElement !== 'undefined'\n && typeof ImageData !== 'undefined'\n && typeof CanvasRenderingContext2D !== 'undefined';\n}\n", "import { createBrowserEnv } from './createBrowserEnv';\nimport { createFileSystem } from './createFileSystem';\nimport { createNodejsEnv } from './createNodejsEnv';\nimport { isBrowser } from './isBrowser';\nimport { isNodejs } from './isNodejs';\nimport { Environment } from './types';\n\nlet environment: Environment | null;\n\nfunction getEnv(): Environment {\n if (!environment) {\n throw new Error('getEnv - environment is not defined, check isNodejs() and isBrowser()');\n }\n return environment;\n}\n\nfunction setEnv(env: Environment) {\n environment = env;\n}\n\nfunction initialize() {\n // check for isBrowser() first to prevent electron renderer process\n // to be initialized with wrong environment due to isNodejs() returning true\n if (isBrowser()) return setEnv(createBrowserEnv());\n if (isNodejs()) return setEnv(createNodejsEnv());\n return null;\n}\n\nfunction monkeyPatch(env: Partial) {\n if (!environment) {\n initialize();\n }\n\n if (!environment) {\n throw new Error('monkeyPatch - environment is not defined, check isNodejs() and isBrowser()');\n }\n\n const { Canvas = environment.Canvas, Image = environment.Image } = env;\n environment.Canvas = Canvas;\n environment.Image = Image;\n environment.createCanvasElement = env.createCanvasElement || (() => new Canvas());\n environment.createImageElement = env.createImageElement || (() => new Image());\n\n environment.ImageData = env.ImageData || environment.ImageData;\n environment.Video = env.Video || environment.Video;\n environment.fetch = env.fetch || environment.fetch;\n environment.readFile = env.readFile || environment.readFile;\n}\n\nexport const env = {\n getEnv,\n setEnv,\n initialize,\n createBrowserEnv,\n createFileSystem,\n createNodejsEnv,\n monkeyPatch,\n isBrowser,\n isNodejs,\n};\n\ninitialize();\n\nexport * from './types';\n", "import { env } from '../env/index';\n\nexport function resolveInput(arg: string | any) {\n if (!env.isNodejs() && typeof arg === 'string') {\n return document.getElementById(arg);\n }\n return arg;\n}\n", "import { env } from '../env/index';\nimport { resolveInput } from './resolveInput';\n\nexport function getContext2dOrThrow(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D): CanvasRenderingContext2D {\n const { Canvas, CanvasRenderingContext2D } = env.getEnv();\n\n if (canvasArg instanceof CanvasRenderingContext2D) {\n return canvasArg;\n }\n\n const canvas = resolveInput(canvasArg);\n\n if (!(canvas instanceof Canvas)) {\n throw new Error('resolveContext2d - expected canvas to be of instance of Canvas');\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('resolveContext2d - canvas 2d context is null');\n }\n\n return ctx;\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IDimensions, IPoint } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { resolveInput } from '../dom/resolveInput';\n\n// eslint-disable-next-line no-shadow\nexport enum AnchorPosition {\n // eslint-disable-next-line no-unused-vars\n TOP_LEFT = 'TOP_LEFT',\n // eslint-disable-next-line no-unused-vars\n TOP_RIGHT = 'TOP_RIGHT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_LEFT = 'BOTTOM_LEFT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_RIGHT = 'BOTTOM_RIGHT'\n}\n\nexport interface IDrawTextFieldOptions {\n anchorPosition?: AnchorPosition\n backgroundColor?: string\n fontColor?: string\n fontSize?: number\n fontStyle?: string\n padding?: number\n}\n\nexport class DrawTextFieldOptions implements IDrawTextFieldOptions {\n public anchorPosition: AnchorPosition\n\n public backgroundColor: string\n\n public fontColor: string\n\n public fontSize: number\n\n public fontStyle: string\n\n public padding: number\n\n constructor(options: IDrawTextFieldOptions = {}) {\n const {\n anchorPosition, backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = options;\n this.anchorPosition = anchorPosition || AnchorPosition.TOP_LEFT;\n this.backgroundColor = backgroundColor || 'rgba(0, 0, 0, 0.5)';\n this.fontColor = fontColor || 'rgba(255, 255, 255, 1)';\n this.fontSize = fontSize || 14;\n this.fontStyle = fontStyle || 'Georgia';\n this.padding = padding || 4;\n }\n}\n\nexport class DrawTextField {\n public text: string[]\n\n public anchor : IPoint\n\n public options: DrawTextFieldOptions\n\n constructor(\n text: string | string[] | DrawTextField,\n anchor: IPoint,\n options: IDrawTextFieldOptions = {},\n ) {\n // eslint-disable-next-line no-nested-ternary\n this.text = typeof text === 'string'\n ? [text]\n : (text instanceof DrawTextField ? text.text : text);\n this.anchor = anchor;\n this.options = new DrawTextFieldOptions(options);\n }\n\n measureWidth(ctx: CanvasRenderingContext2D): number {\n const { padding } = this.options;\n return this.text.map((l) => ctx.measureText(l).width).reduce((w0, w1) => (w0 < w1 ? w1 : w0), 0) + (2 * padding);\n }\n\n measureHeight(): number {\n const { fontSize, padding } = this.options;\n return this.text.length * fontSize + (2 * padding);\n }\n\n getUpperLeft(ctx: CanvasRenderingContext2D, canvasDims?: IDimensions): IPoint {\n const { anchorPosition } = this.options;\n const isShiftLeft = anchorPosition === AnchorPosition.BOTTOM_RIGHT || anchorPosition === AnchorPosition.TOP_RIGHT;\n const isShiftTop = anchorPosition === AnchorPosition.BOTTOM_LEFT || anchorPosition === AnchorPosition.BOTTOM_RIGHT;\n\n const textFieldWidth = this.measureWidth(ctx);\n const textFieldHeight = this.measureHeight();\n const x = (isShiftLeft ? this.anchor.x - textFieldWidth : this.anchor.x);\n const y = isShiftTop ? this.anchor.y - textFieldHeight : this.anchor.y;\n\n // adjust anchor if text box exceeds canvas borders\n if (canvasDims) {\n const { width, height } = canvasDims;\n const newX = Math.max(Math.min(x, width - textFieldWidth), 0);\n const newY = Math.max(Math.min(y, height - textFieldHeight), 0);\n return { x: newX, y: newY };\n }\n return { x, y };\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const canvas = resolveInput(canvasArg);\n const ctx = getContext2dOrThrow(canvas);\n\n const {\n backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = this.options;\n\n ctx.font = `${fontSize}px ${fontStyle}`;\n const maxTextWidth = this.measureWidth(ctx);\n const textHeight = this.measureHeight();\n\n ctx.fillStyle = backgroundColor;\n const upperLeft = this.getUpperLeft(ctx, canvas);\n ctx.fillRect(upperLeft.x, upperLeft.y, maxTextWidth, textHeight);\n\n ctx.fillStyle = fontColor;\n this.text.forEach((textLine, i) => {\n const x = padding + upperLeft.x;\n const y = padding + upperLeft.y + ((i + 1) * fontSize);\n ctx.fillText(textLine, x, y);\n });\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { Box, IBoundingBox, IRect } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport {\n AnchorPosition, DrawTextField, DrawTextFieldOptions, IDrawTextFieldOptions,\n} from './DrawTextField';\n\nexport interface IDrawBoxOptions {\n boxColor?: string\n lineWidth?: number\n drawLabelOptions?: IDrawTextFieldOptions\n label?: string\n}\n\nexport class DrawBoxOptions {\n public boxColor: string\n\n public lineWidth: number\n\n public drawLabelOptions: DrawTextFieldOptions\n\n public label?: string\n\n constructor(options: IDrawBoxOptions = {}) {\n const {\n boxColor, lineWidth, label, drawLabelOptions,\n } = options;\n this.boxColor = boxColor || 'rgba(0, 0, 255, 1)';\n this.lineWidth = lineWidth || 2;\n this.label = label;\n\n const defaultDrawLabelOptions = {\n anchorPosition: AnchorPosition.BOTTOM_LEFT,\n backgroundColor: this.boxColor,\n };\n this.drawLabelOptions = new DrawTextFieldOptions({ ...defaultDrawLabelOptions, ...drawLabelOptions });\n }\n}\n\nexport class DrawBox {\n public box: Box\n\n public options: DrawBoxOptions\n\n constructor(\n box: IBoundingBox | IRect,\n options: IDrawBoxOptions = {},\n ) {\n this.box = new Box(box);\n this.options = new DrawBoxOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const { boxColor, lineWidth } = this.options;\n\n const {\n x, y, width, height,\n } = this.box;\n ctx.strokeStyle = boxColor;\n ctx.lineWidth = lineWidth;\n ctx.strokeRect(x, y, width, height);\n\n const { label } = this.options;\n if (label) {\n new DrawTextField([label], { x: x - (lineWidth / 2), y }, this.options.drawLabelOptions).draw(canvasArg);\n }\n }\n}\n", "import { Box, IBoundingBox, IRect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { round } from '../utils/index';\nimport { DrawBox } from './DrawBox';\n\nexport type TDrawDetectionsInput = IRect | IBoundingBox | FaceDetection | WithFaceDetection<{}>\n\nexport function drawDetections(\n canvasArg: string | HTMLCanvasElement,\n detections: TDrawDetectionsInput | Array,\n) {\n const detectionsArray = Array.isArray(detections) ? detections : [detections];\n\n detectionsArray.forEach((det) => {\n // eslint-disable-next-line no-nested-ternary\n const score = det instanceof FaceDetection\n ? det.score\n : (isWithFaceDetection(det) ? det.detection.score : undefined);\n\n // eslint-disable-next-line no-nested-ternary\n const box = det instanceof FaceDetection\n ? det.box\n : (isWithFaceDetection(det) ? det.detection.box : new Box(det));\n\n const label = score ? `${round(score)}` : undefined;\n new DrawBox(box, { label }).draw(canvasArg);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { FaceExpressions } from './FaceExpressions';\n\nexport class FaceExpressionNet extends FaceProcessor {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceExpressionNet', faceFeatureExtractor);\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n return tf.tidy(() => tf.softmax(this.runNet(input)));\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictExpressions(input: TNetInput) {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n const probabilitesByBatch = await Promise.all(tf.unstack(out).map(async (t) => {\n const data = await t.data();\n t.dispose();\n return data;\n }));\n out.dispose();\n\n const predictionsByBatch = probabilitesByBatch\n .map((probabilites) => new FaceExpressions(probabilites as Float32Array));\n\n return netInput.isBatchInput\n ? predictionsByBatch\n : predictionsByBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_expression_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n\n protected getClassifierChannelsOut(): number {\n return 7;\n }\n}\n", "import { env } from '../env/index';\n\nexport function isMediaLoaded(media: HTMLImageElement | HTMLVideoElement) : boolean {\n const { Image, Video } = env.getEnv();\n\n return (media instanceof Image && media.complete)\n || (media instanceof Video && media.readyState >= 3);\n}\n", "import { env } from '../env/index';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function awaitMediaLoaded(media: HTMLImageElement | HTMLVideoElement | HTMLCanvasElement) {\n // eslint-disable-next-line consistent-return\n return new Promise((resolve, reject) => {\n if (media instanceof env.getEnv().Canvas || isMediaLoaded(media)) {\n return resolve(null);\n }\n\n function onError(e: Event) {\n if (!e.currentTarget) return;\n // eslint-disable-next-line no-use-before-define\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n reject(e);\n }\n\n function onLoad(e: Event) {\n if (!e.currentTarget) return;\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n resolve(e);\n }\n\n media.addEventListener('load', onLoad);\n media.addEventListener('error', onError);\n });\n}\n", "import { env } from '../env/index';\n\nexport function bufferToImage(buf: Blob): Promise {\n return new Promise((resolve, reject) => {\n if (!(buf instanceof Blob)) reject(new Error('bufferToImage - expected buf to be of type: Blob'));\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result !== 'string') reject(new Error('bufferToImage - expected reader.result to be a string, in onload'));\n const img = env.getEnv().createImageElement();\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = reader.result as string;\n };\n reader.onerror = reject;\n reader.readAsDataURL(buf);\n });\n}\n", "import { Dimensions, IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\n\nexport function getMediaDimensions(input: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | IDimensions): Dimensions {\n const { Image, Video } = env.getEnv();\n\n if (input instanceof Image) {\n return new Dimensions(input.naturalWidth, input.naturalHeight);\n }\n if (input instanceof Video) {\n return new Dimensions(input.videoWidth, input.videoHeight);\n }\n return new Dimensions(input.width, input.height);\n}\n", "import { IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function createCanvas({ width, height }: IDimensions): HTMLCanvasElement {\n const { createCanvasElement } = env.getEnv();\n const canvas = createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n\nexport function createCanvasFromMedia(media: HTMLImageElement | HTMLVideoElement | ImageData, dims?: IDimensions): HTMLCanvasElement {\n const { ImageData } = env.getEnv();\n\n if (!(media instanceof ImageData) && !isMediaLoaded(media)) {\n throw new Error('createCanvasFromMedia - media has not finished loading yet');\n }\n\n const { width, height } = dims || getMediaDimensions(media);\n const canvas = createCanvas({ width, height });\n\n if (media instanceof ImageData) {\n getContext2dOrThrow(canvas).putImageData(media, 0, 0);\n } else {\n getContext2dOrThrow(canvas).drawImage(media, 0, 0, width, height);\n }\n return canvas;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { env } from '../env/index';\nimport { isTensor4D } from '../utils/index';\n\nexport async function imageTensorToCanvas(\n imgTensor: tf.Tensor,\n canvas?: HTMLCanvasElement,\n): Promise {\n const targetCanvas = canvas || env.getEnv().createCanvasElement();\n\n const [height, width, numChannels] = imgTensor.shape.slice(isTensor4D(imgTensor) ? 1 : 0);\n const imgTensor3D = tf.tidy(() => imgTensor.as3D(height, width, numChannels).toInt());\n await tf.browser.toPixels(imgTensor3D, targetCanvas);\n\n imgTensor3D.dispose();\n\n return targetCanvas;\n}\n", "import { env } from '../env/index';\n\nexport function isMediaElement(input: any) {\n const { Image, Canvas, Video } = env.getEnv();\n\n return input instanceof Image\n || input instanceof Canvas\n || input instanceof Video;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Dimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { padToSquare } from '../ops/padToSquare';\nimport {\n computeReshapedDimensions, isTensor3D, isTensor4D, range,\n} from '../utils/index';\nimport { createCanvasFromMedia } from './createCanvas';\nimport { imageToSquare } from './imageToSquare';\nimport { TResolvedNetInput } from './types';\n\nexport class NetInput {\n private _imageTensors: Array = []\n\n private _canvases: HTMLCanvasElement[] = []\n\n private _batchSize: number\n\n private _treatAsBatchInput: boolean = false\n\n private _inputDimensions: number[][] = []\n\n private _inputSize: number\n\n constructor(\n inputs: Array,\n treatAsBatchInput: boolean = false,\n ) {\n if (!Array.isArray(inputs)) {\n throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${inputs}`);\n }\n\n this._treatAsBatchInput = treatAsBatchInput;\n this._batchSize = inputs.length;\n\n inputs.forEach((input, idx) => {\n if (isTensor3D(input)) {\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = input.shape;\n return;\n }\n\n if (isTensor4D(input)) {\n const batchSize = (input as any).shape[0];\n if (batchSize !== 1) {\n throw new Error(`NetInput - tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = (input as any).shape.slice(1);\n return;\n }\n\n const canvas = (input as any) instanceof env.getEnv().Canvas ? input : createCanvasFromMedia(input);\n this._canvases[idx] = canvas;\n this._inputDimensions[idx] = [canvas.height, canvas.width, 3];\n });\n }\n\n public get imageTensors(): Array {\n return this._imageTensors;\n }\n\n public get canvases(): HTMLCanvasElement[] {\n return this._canvases;\n }\n\n public get isBatchInput(): boolean {\n return this.batchSize > 1 || this._treatAsBatchInput;\n }\n\n public get batchSize(): number {\n return this._batchSize;\n }\n\n public get inputDimensions(): number[][] {\n return this._inputDimensions;\n }\n\n public get inputSize(): number | undefined {\n return this._inputSize;\n }\n\n public get reshapedInputDimensions(): Dimensions[] {\n return range(this.batchSize, 0, 1).map(\n (_, batchIdx) => this.getReshapedInputDimensions(batchIdx),\n );\n }\n\n public getInput(batchIdx: number): tf.Tensor3D | tf.Tensor4D | HTMLCanvasElement {\n return this.canvases[batchIdx] || this.imageTensors[batchIdx];\n }\n\n public getInputDimensions(batchIdx: number): number[] {\n return this._inputDimensions[batchIdx];\n }\n\n public getInputHeight(batchIdx: number): number {\n return this._inputDimensions[batchIdx][0];\n }\n\n public getInputWidth(batchIdx: number): number {\n return this._inputDimensions[batchIdx][1];\n }\n\n public getReshapedInputDimensions(batchIdx: number): Dimensions {\n if (typeof this.inputSize !== 'number') {\n throw new Error('getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet');\n }\n\n const width = this.getInputWidth(batchIdx);\n const height = this.getInputHeight(batchIdx);\n return computeReshapedDimensions({ width, height }, this.inputSize);\n }\n\n /**\n * Create a batch tensor from all input canvases and tensors\n * with size [batchSize, inputSize, inputSize, 3].\n *\n * @param inputSize Height and width of the tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The batch tensor.\n */\n public toBatchTensor(inputSize: number, isCenterInputs: boolean = true): tf.Tensor4D {\n this._inputSize = inputSize;\n\n return tf.tidy(() => {\n const inputTensors = range(this.batchSize, 0, 1).map((batchIdx) => {\n const input = this.getInput(batchIdx);\n\n if (input instanceof tf.Tensor) {\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n let imgTensor = isTensor4D(input) ? input : input.expandDims();\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n imgTensor = padToSquare(imgTensor, isCenterInputs);\n\n if (imgTensor.shape[1] !== inputSize || imgTensor.shape[2] !== inputSize) {\n imgTensor = tf.image.resizeBilinear(imgTensor, [inputSize, inputSize]);\n }\n\n return imgTensor.as3D(inputSize, inputSize, 3);\n }\n\n if (input instanceof env.getEnv().Canvas) {\n return tf.browser.fromPixels(imageToSquare(input, inputSize, isCenterInputs));\n }\n\n throw new Error(`toBatchTensor - at batchIdx ${batchIdx}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${input}`);\n });\n\n // const batchTensor = tf.stack(inputTensors.map(t => t.toFloat())).as4D(this.batchSize, inputSize, inputSize, 3)\n const batchTensor = tf.stack(inputTensors.map((t) => tf.cast(t, 'float32'))).as4D(this.batchSize, inputSize, inputSize, 3);\n // const batchTensor = tf.stack(inputTensors.map(t => tf.Tensor.as4D(tf.cast(t, 'float32'))), this.batchSize, inputSize, inputSize, 3);\n\n return batchTensor;\n });\n }\n}\n", "import { env } from '../env/index';\nimport { createCanvas, createCanvasFromMedia } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function imageToSquare(input: HTMLImageElement | HTMLCanvasElement, inputSize: number, centerImage: boolean = false) {\n const { Image, Canvas } = env.getEnv();\n\n if (!(input instanceof Image || input instanceof Canvas)) {\n throw new Error('imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement');\n }\n\n const dims = getMediaDimensions(input);\n const scale = inputSize / Math.max(dims.height, dims.width);\n const width = scale * dims.width;\n const height = scale * dims.height;\n\n const targetCanvas = createCanvas({ width: inputSize, height: inputSize });\n const inputCanvas = input instanceof Canvas ? input : createCanvasFromMedia(input);\n\n const offset = Math.abs(width - height) / 2;\n const dx = centerImage && width < height ? offset : 0;\n const dy = centerImage && height < width ? offset : 0;\n getContext2dOrThrow(targetCanvas).drawImage(inputCanvas, dx, dy, width, height);\n\n return targetCanvas;\n}\n", "import { isTensor3D, isTensor4D } from '../utils/index';\nimport { awaitMediaLoaded } from './awaitMediaLoaded';\nimport { isMediaElement } from './isMediaElement';\nimport { NetInput } from './NetInput';\nimport { resolveInput } from './resolveInput';\nimport { TNetInput } from './types';\n\n/**\n * Validates the input to make sure, they are valid net inputs and awaits all media elements\n * to be finished loading.\n *\n * @param input The input, which can be a media element or an array of different media elements.\n * @returns A NetInput instance, which can be passed into one of the neural networks.\n */\nexport async function toNetInput(inputs: TNetInput): Promise {\n if (inputs instanceof NetInput) {\n return inputs;\n }\n\n const inputArgArray = Array.isArray(inputs)\n ? inputs\n : [inputs];\n\n if (!inputArgArray.length) {\n throw new Error('toNetInput - empty array passed as input');\n }\n\n const getIdxHint = (idx: number) => (Array.isArray(inputs) ? ` at input index ${idx}:` : '');\n\n const inputArray = inputArgArray.map(resolveInput);\n\n inputArray.forEach((input, i) => {\n if (!isMediaElement(input) && !isTensor3D(input) && !isTensor4D(input)) {\n if (typeof inputArgArray[i] === 'string') {\n throw new Error(`toNetInput -${getIdxHint(i)} string passed, but could not resolve HTMLElement for element id ${inputArgArray[i]}`);\n }\n\n throw new Error(`toNetInput -${getIdxHint(i)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);\n }\n\n if (isTensor4D(input)) {\n // if tf.Tensor4D is passed in the input array, the batch size has to be 1\n const batchSize = input.shape[0];\n if (batchSize !== 1) {\n throw new Error(`toNetInput -${getIdxHint(i)} tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n }\n });\n\n // wait for all media elements being loaded\n await Promise.all(\n inputArray.map((input) => isMediaElement(input) && awaitMediaLoaded(input)),\n );\n\n return new NetInput(inputArray, Array.isArray(inputs));\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { Rect } from '../classes/Rect';\nimport { env } from '../env/index';\nimport { createCanvas } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { imageTensorToCanvas } from './imageTensorToCanvas';\nimport { toNetInput } from './toNetInput';\nimport { TNetInput } from './types';\n\n/**\n * Extracts the image regions containing the detected faces.\n *\n * @param input The image that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns The Canvases of the corresponding image region for each detected face.\n */\nexport async function extractFaces(\n input: TNetInput,\n detections: Array,\n): Promise {\n const { Canvas } = env.getEnv();\n\n let canvas = input as HTMLCanvasElement;\n\n if (!(input instanceof Canvas)) {\n const netInput = await toNetInput(input);\n\n if (netInput.batchSize > 1) {\n throw new Error('extractFaces - batchSize > 1 not supported');\n }\n\n const tensorOrCanvas = netInput.getInput(0);\n canvas = tensorOrCanvas instanceof Canvas\n ? tensorOrCanvas\n : await imageTensorToCanvas(tensorOrCanvas);\n }\n\n const ctx = getContext2dOrThrow(canvas);\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(canvas.width, canvas.height).box.floor()\n : det),\n )\n .map((box) => box.clipAtImageBorders(canvas.width, canvas.height));\n\n return boxes.map(({\n x, y, width, height,\n }) => {\n const faceImg = createCanvas({ width, height });\n getContext2dOrThrow(faceImg)\n .putImageData(ctx.getImageData(x, y, width, height), 0, 0);\n return faceImg;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isTensor3D, isTensor4D } from '../utils/index';\n\n/**\n * Extracts the tensors of the image regions containing the detected faces.\n * Useful if you want to compute the face descriptors for the face images.\n * Using this method is faster then extracting a canvas for each face and\n * converting them to tensors individually.\n *\n * @param imageTensor The image tensor that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns Tensors of the corresponding image region for each detected face.\n */\nexport async function extractFaceTensors(\n imageTensor: tf.Tensor3D | tf.Tensor4D,\n detections: Array,\n): Promise {\n if (!isTensor3D(imageTensor) && !isTensor4D(imageTensor)) {\n throw new Error('extractFaceTensors - expected image tensor to be 3D or 4D');\n }\n\n if (isTensor4D(imageTensor) && imageTensor.shape[0] > 1) {\n throw new Error('extractFaceTensors - batchSize > 1 not supported');\n }\n\n return tf.tidy(() => {\n const [imgHeight, imgWidth, numChannels] = imageTensor.shape.slice(isTensor4D(imageTensor) ? 1 : 0);\n\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(imgWidth, imgHeight).box\n : det),\n )\n .map((box) => box.clipAtImageBorders(imgWidth, imgHeight));\n\n const faceTensors = boxes.map(({\n x, y, width, height,\n }) => tf.slice3d(imageTensor.as3D(imgHeight, imgWidth, numChannels), [y, x, 0], [height, width, numChannels]));\n\n return faceTensors;\n });\n}\n", "import { env } from '../env/index';\n\nexport async function fetchOrThrow(\n url: string,\n // eslint-disable-next-line no-undef\n init?: RequestInit,\n): Promise {\n const { fetch } = env.getEnv();\n const res = await fetch(url, init);\n if (!(res.status < 400)) {\n throw new Error(`failed to fetch: (${res.status}) ${res.statusText}, from url: ${res.url}`);\n }\n return res;\n}\n", "import { bufferToImage } from './bufferToImage';\nimport { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchImage(uri: string): Promise {\n const res = await fetchOrThrow(uri);\n const blob = await (res).blob();\n\n if (!blob.type.startsWith('image/')) {\n throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${blob.type}, for url: ${res.url}`);\n }\n return bufferToImage(blob);\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchJson(uri: string): Promise {\n return (await fetchOrThrow(uri)).json();\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchNetWeights(uri: string): Promise {\n return new Float32Array(await (await fetchOrThrow(uri)).arrayBuffer());\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { getModelUris } from '../common/getModelUris';\nimport { fetchJson } from './fetchJson';\n\nexport async function loadWeightMap(\n uri: string | undefined,\n defaultModelName: string,\n): Promise {\n const { manifestUri, modelBaseUri } = getModelUris(uri, defaultModelName);\n const manifest = await fetchJson(manifestUri);\n // if (manifest['weightsManifest']) manifest = manifest['weightsManifest'];\n return tf.io.loadWeights(manifest, modelBaseUri);\n}\n", "export function getModelUris(uri: string | undefined, defaultModelName: string) {\n const defaultManifestFilename = `${defaultModelName}-weights_manifest.json`;\n\n if (!uri) {\n return {\n modelBaseUri: '',\n manifestUri: defaultManifestFilename,\n };\n }\n\n if (uri === '/') {\n return {\n modelBaseUri: '/',\n manifestUri: `/${defaultManifestFilename}`,\n };\n }\n // eslint-disable-next-line no-nested-ternary\n const protocol = uri.startsWith('http://') ? 'http://' : uri.startsWith('https://') ? 'https://' : '';\n uri = uri.replace(protocol, '');\n\n const parts = uri.split('/').filter((s) => s);\n\n const manifestFile = uri.endsWith('.json')\n ? parts[parts.length - 1]\n : defaultManifestFilename;\n\n let modelBaseUri = protocol + (uri.endsWith('.json') ? parts.slice(0, parts.length - 1) : parts).join('/');\n modelBaseUri = uri.startsWith('/') ? `/${modelBaseUri}` : modelBaseUri;\n\n return {\n modelBaseUri,\n manifestUri: modelBaseUri === '/' ? `/${manifestFile}` : `${modelBaseUri}/${manifestFile}`,\n };\n}\n", "import { IDimensions } from '../classes/index';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function matchDimensions(input: IDimensions, reference: IDimensions, useMediaDimensions: boolean = false) {\n const { width, height } = useMediaDimensions\n ? getMediaDimensions(reference)\n : reference;\n input.width = width;\n input.height = height;\n return { width, height };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock4 } from './denseBlock';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { FaceFeatureExtractorParams, IFaceFeatureExtractor } from './types';\n\nexport class FaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('FaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock4(normalized, params.dense0, true);\n out = denseBlock4(out, params.dense1);\n out = denseBlock4(out, params.dense2);\n out = denseBlock4(out, params.dense3);\n out = tf.avgPool(out, [7, 7], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../dist/tfjs.esm';\n\nimport { ParamMapping } from './common/index';\nimport { getModelUris } from './common/getModelUris';\nimport { loadWeightMap } from './dom/index';\nimport { env } from './env/index';\n\nexport abstract class NeuralNetwork {\n\n protected _params: TNetParams | undefined = undefined\n protected _paramMappings: ParamMapping[] = []\n\n constructor(protected _name: string) {\n }\n\n public get params(): TNetParams | undefined { return this._params }\n public get paramMappings(): ParamMapping[] { return this._paramMappings }\n public get isLoaded(): boolean { return !!this.params }\n\n public getParamFromPath(paramPath: string): tf.Tensor {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n return obj[objProp]\n }\n\n public reassignParamFromPath(paramPath: string, tensor: tf.Tensor) {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n obj[objProp].dispose()\n obj[objProp] = tensor\n }\n\n public getParamList() {\n return this._paramMappings.map(({ paramPath }) => ({\n path: paramPath,\n tensor: this.getParamFromPath(paramPath)\n }))\n }\n\n public getTrainableParams() {\n return this.getParamList().filter(param => param.tensor instanceof tf.Variable)\n }\n\n public getFrozenParams() {\n return this.getParamList().filter(param => !(param.tensor instanceof tf.Variable))\n }\n\n public variable() {\n this.getFrozenParams().forEach(({ path, tensor }) => {\n this.reassignParamFromPath(path, tensor.variable())\n })\n }\n\n public freeze() {\n this.getTrainableParams().forEach(({ path, tensor: variable }) => {\n const tensor = tf.tensor(variable.dataSync())\n variable.dispose()\n this.reassignParamFromPath(path, tensor)\n })\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.getParamList().forEach(param => {\n if (throwOnRedispose && param.tensor.isDisposed) {\n throw new Error(`param tensor has already been disposed for path ${param.path}`)\n }\n param.tensor.dispose()\n })\n this._params = undefined\n }\n\n public serializeParams(): Float32Array {\n return new Float32Array(\n this.getParamList()\n .map(({ tensor }) => Array.from(tensor.dataSync()) as number[])\n .reduce((flat, arr) => flat.concat(arr))\n )\n }\n\n public async load(weightsOrUrl: Float32Array | string | undefined): Promise {\n if (weightsOrUrl instanceof Float32Array) {\n this.extractWeights(weightsOrUrl)\n return\n }\n\n await this.loadFromUri(weightsOrUrl)\n }\n\n public async loadFromUri(uri: string | undefined) {\n if (uri && typeof uri !== 'string') {\n throw new Error(`${this._name}.loadFromUri - expected model uri`)\n }\n\n const weightMap = await loadWeightMap(uri, this.getDefaultModelName())\n this.loadFromWeightMap(weightMap)\n }\n\n public async loadFromDisk(filePath: string | undefined) {\n if (filePath && typeof filePath !== 'string') {\n throw new Error(`${this._name}.loadFromDisk - expected model file path`)\n }\n\n const { readFile } = env.getEnv()\n\n const { manifestUri, modelBaseUri } = getModelUris(filePath, this.getDefaultModelName())\n\n const fetchWeightsFromDisk = (filePaths: string[]) => Promise.all(\n filePaths.map(filePath => readFile(filePath).then(buf => buf.buffer))\n )\n const loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk)\n const manifest = JSON.parse((await readFile(manifestUri)).toString())\n const weightMap = await loadWeights(manifest, modelBaseUri)\n\n this.loadFromWeightMap(weightMap)\n }\n\n public loadFromWeightMap(weightMap: tf.NamedTensorMap) {\n const {\n paramMappings,\n params\n } = this.extractParamsFromWeigthMap(weightMap)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n public extractWeights(weights: Float32Array) {\n const {\n paramMappings,\n params\n } = this.extractParams(weights)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n private traversePropertyPath(paramPath: string) {\n if (!this.params) {\n throw new Error(`traversePropertyPath - model has no loaded params`)\n }\n\n const result = paramPath.split('/').reduce((res: { nextObj: any, obj?: any, objProp?: string }, objProp) => {\n if (!res.nextObj.hasOwnProperty(objProp)) {\n throw new Error(`traversePropertyPath - object does not have property ${objProp}, for path ${paramPath}`)\n }\n\n return { obj: res.nextObj, objProp, nextObj: res.nextObj[objProp] }\n }, { nextObj: this.params })\n\n const { obj, objProp } = result\n if (!obj || !objProp || !(obj[objProp] instanceof tf.Tensor)) {\n throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${paramPath}`)\n }\n\n return { obj, objProp }\n }\n\n protected abstract getDefaultModelName(): string\n protected abstract extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TNetParams, paramMappings: ParamMapping[] }\n protected abstract extractParams(weights: Float32Array): { params: TNetParams, paramMappings: ParamMapping[] }\n}", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams, SeparableConvParams } from '../common/index';\nimport { depthwiseSeparableConv } from '../common/depthwiseSeparableConv';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function denseBlock3(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock3Params,\n isFirstLayer: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, [2, 2], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, [2, 2]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n });\n}\n\nexport function denseBlock4(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock4Params,\n isFirstLayer: boolean = false,\n isScaleDown: boolean = true,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, isScaleDown ? [2, 2] : [1, 1], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, isScaleDown ? [2, 2] : [1, 1]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n const in4 = tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n const out4 = depthwiseSeparableConv(in4, denseBlockParams.conv3, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, tf.add(out3, out4)))) as tf.Tensor4D;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { SeparableConvParams } from './types';\n\nexport function depthwiseSeparableConv(\n x: tf.Tensor4D,\n params: SeparableConvParams,\n stride: [number, number],\n): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same');\n out = tf.add(out, params.bias);\n return out;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams } from './types';\n\nexport function convLayer(\n x: tf.Tensor4D,\n params: ConvParams,\n padding: 'valid' | 'same' = 'same',\n withRelu: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out = tf.add(\n tf.conv2d(x, params.filters, [1, 1], padding),\n params.bias,\n ) as tf.Tensor4D;\n\n return withRelu ? tf.relu(out) : out;\n });\n}\n", "import { ParamMapping } from './types';\n\nexport function disposeUnusedWeightTensors(weightMap: any, paramMappings: ParamMapping[]) {\n Object.keys(weightMap).forEach((path) => {\n if (!paramMappings.some((pm) => pm.originalPath === path)) {\n weightMap[path].dispose();\n }\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams, ExtractWeightsFunction, ParamMapping } from './types';\n\nexport function extractConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams => {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ExtractWeightsFunction, FCParams, ParamMapping } from './types';\n\nexport function extractFCParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): FCParams => {\n const fc_weights = tf.tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]);\n const fc_bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return {\n weights: fc_weights,\n bias: fc_bias,\n };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ExtractWeightsFunction, ParamMapping, SeparableConvParams } from './types';\n\nexport function extractSeparableConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (channelsIn: number, channelsOut: number, mappedPrefix: string): SeparableConvParams => {\n const depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]);\n const pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]);\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/depthwise_filter` },\n { paramPath: `${mappedPrefix}/pointwise_filter` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n\nexport function loadSeparableConvParamsFactory(\n // eslint-disable-next-line no-unused-vars\n extractWeightEntry: (originalPath: string, paramRank: number) => T,\n) {\n return (prefix: string): SeparableConvParams => {\n const depthwise_filter = extractWeightEntry(`${prefix}/depthwise_filter`, 4);\n const pointwise_filter = extractWeightEntry(`${prefix}/pointwise_filter`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\n// eslint-disable-next-line no-unused-vars\nexport type ExtractWeightsFunction = (numWeights: number) => Float32Array\n\nexport type ParamMapping = {\n originalPath?: string\n paramPath: string\n}\n\nexport type ConvParams = {\n filters: tf.Tensor4D\n bias: tf.Tensor1D\n}\n\nexport type FCParams = {\n weights: tf.Tensor2D\n bias: tf.Tensor1D\n}\n\nexport class SeparableConvParams {\n // eslint-disable-next-line no-useless-constructor\n constructor(\n // eslint-disable-next-line no-unused-vars\n public depthwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public pointwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public bias: tf.Tensor1D,\n // eslint-disable-next-line no-empty-function\n ) {}\n}\n", "import { isTensor } from '../utils/index';\nimport { ParamMapping } from './types';\n\nexport function extractWeightEntryFactory(weightMap: any, paramMappings: ParamMapping[]) {\n return (originalPath: string, paramRank: number, mappedPath?: string) => {\n const tensor = weightMap[originalPath];\n\n if (!isTensor(tensor, paramRank)) {\n throw new Error(`expected weightMap[${originalPath}] to be a Tensor${paramRank}D, instead have ${tensor}`);\n }\n\n paramMappings.push(\n { originalPath, paramPath: mappedPath || originalPath },\n );\n\n return tensor;\n };\n}\n", "export function extractWeightsFactory(weights: Float32Array) {\n let remainingWeights = weights;\n\n function extractWeights(numWeights: number): Float32Array {\n const ret = remainingWeights.slice(0, numWeights);\n remainingWeights = remainingWeights.slice(numWeights);\n return ret;\n }\n\n function getRemainingWeights(): Float32Array {\n return remainingWeights;\n }\n\n return {\n extractWeights,\n getRemainingWeights,\n };\n}\n", "import {\n extractConvParamsFactory,\n extractSeparableConvParamsFactory,\n ExtractWeightsFunction,\n ParamMapping,\n} from '../common/index';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractDenseBlock3Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv0`)\n : extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/conv0`);\n const conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv1`);\n const conv2 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const { conv0, conv1, conv2 } = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer);\n const conv3 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock4Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock4Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock4Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock4Params(64, 128, 'dense2');\n const dense3 = extractDenseBlock4Params(128, 256, 'dense3');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: {\n dense0, dense1, dense2, dense3,\n },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams } from './types';\n\n// eslint-disable-next-line no-unused-vars\nexport function loadConvParamsFactory(extractWeightEntry: (originalPath: string, paramRank: number) => T) {\n return (prefix: string): ConvParams => {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return { filters, bias };\n };\n}\n", "import { extractWeightEntryFactory, loadSeparableConvParamsFactory, ParamMapping } from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractDenseBlock3Params(prefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(prefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n const conv3 = extractSeparableConvParams(`${prefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock4Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock4Params('dense0', true),\n dense1: extractDenseBlock4Params('dense1'),\n dense2: extractDenseBlock4Params('dense2'),\n dense3: extractDenseBlock4Params('dense3'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { NetInput } from '../dom/index';\nimport {\n FaceFeatureExtractorParams,\n IFaceFeatureExtractor,\n TinyFaceFeatureExtractorParams,\n} from '../faceFeatureExtractor/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { NetParams } from './types';\nimport { seperateWeightMaps } from './util';\n\nexport abstract class FaceProcessor<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends NeuralNetwork {\n protected _faceFeatureExtractor: IFaceFeatureExtractor\n\n constructor(_name: string, faceFeatureExtractor: IFaceFeatureExtractor) {\n super(_name);\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): IFaceFeatureExtractor {\n return this._faceFeatureExtractor;\n }\n\n protected abstract getDefaultModelName(): string\n\n protected abstract getClassifierChannelsIn(): number\n\n protected abstract getClassifierChannelsOut(): number\n\n public runNet(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n return fullyConnectedLayer(bottleneckFeatures.as2D(bottleneckFeatures.shape[0], -1), params.fc);\n });\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights, this.getClassifierChannelsIn(), this.getClassifierChannelsOut());\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const cIn = this.getClassifierChannelsIn();\n const cOut = this.getClassifierChannelsOut();\n const classifierWeightSize = (cOut * cIn) + cOut;\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FCParams } from './types';\n\nexport function fullyConnectedLayer(\n x: tf.Tensor2D,\n params: FCParams,\n): tf.Tensor2D {\n return tf.tidy(() => tf.add(\n tf.matMul(x, params.weights),\n params.bias,\n ));\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array, channelsIn: number, channelsOut: number): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const fc = extractFCParams(channelsIn, channelsOut, 'fc');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: extractFcParams('fc'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nexport function seperateWeightMaps(weightMap: tf.NamedTensorMap) {\n const featureExtractorMap: tf.NamedTensorMap = {};\n const classifierMap: tf.NamedTensorMap = {};\n\n Object.keys(weightMap).forEach((key) => {\n const map = key.startsWith('fc') ? classifierMap : featureExtractorMap;\n map[key] = weightMap[key];\n });\n\n return { featureExtractorMap, classifierMap };\n}\n", "export const FACE_EXPRESSION_LABELS = ['neutral', 'happy', 'sad', 'angry', 'fearful', 'disgusted', 'surprised'];\n\nexport class FaceExpressions {\n public neutral: number\n\n public happy: number\n\n public sad: number\n\n public angry: number\n\n public fearful: number\n\n public disgusted: number\n\n public surprised: number\n\n constructor(probabilities: number[] | Float32Array) {\n if (probabilities.length !== 7) {\n throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${probabilities.length}`);\n }\n\n FACE_EXPRESSION_LABELS.forEach((expression, idx) => {\n this[expression] = probabilities[idx];\n });\n }\n\n asSortedArray() {\n return FACE_EXPRESSION_LABELS\n .map((expression) => ({ expression, probability: this[expression] as number }))\n .sort((e0, e1) => e1.probability - e0.probability);\n }\n}\n", "import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\n\nexport type WithFaceExpressions = TSource & {\n expressions: FaceExpressions\n}\n\nexport function isWithFaceExpressions(obj: any): obj is WithFaceExpressions<{}> {\n return obj.expressions instanceof FaceExpressions;\n}\n\nexport function extendWithFaceExpressions<\n TSource\n>(\n sourceObj: TSource,\n expressions: FaceExpressions,\n): WithFaceExpressions {\n const extension = { expressions };\n return { ...sourceObj, ...extension };\n}\n", "import { IPoint, Point } from '../classes/index';\nimport { FaceExpressions } from '../faceExpressionNet/index';\nimport { isWithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { round } from '../utils/index';\nimport { DrawTextField } from './DrawTextField';\n\nexport type DrawFaceExpressionsInput = FaceExpressions | WithFaceExpressions<{}>\n\nexport function drawFaceExpressions(\n canvasArg: string | HTMLCanvasElement,\n faceExpressions: DrawFaceExpressionsInput | Array,\n minConfidence = 0.1,\n textFieldAnchor?: IPoint,\n) {\n const faceExpressionsArray = Array.isArray(faceExpressions) ? faceExpressions : [faceExpressions];\n\n faceExpressionsArray.forEach((e) => {\n // eslint-disable-next-line no-nested-ternary\n const expr = e instanceof FaceExpressions\n ? e\n : (isWithFaceExpressions(e) ? e.expressions : undefined);\n if (!expr) {\n throw new Error('drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof');\n }\n\n const sorted = expr.asSortedArray();\n const resultsToDisplay = sorted.filter((exprLocal) => exprLocal.probability > minConfidence);\n\n const anchor = isWithFaceDetection(e)\n ? e.detection.box.bottomLeft\n : (textFieldAnchor || new Point(0, 0));\n\n const drawTextField = new DrawTextField(\n resultsToDisplay.map((exprLocal) => `${exprLocal.expression} (${round(exprLocal.probability)})`),\n anchor,\n );\n drawTextField.draw(canvasArg);\n });\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { isWithFaceDetection, WithFaceDetection } from './WithFaceDetection';\n\nexport type WithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 > = TSource & {\n landmarks: TFaceLandmarks\n unshiftedLandmarks: TFaceLandmarks\n alignedRect: FaceDetection\n }\n\nexport function isWithFaceLandmarks(obj: any): obj is WithFaceLandmarks, FaceLandmarks> {\n return isWithFaceDetection(obj)\n // eslint-disable-next-line dot-notation\n && obj['landmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['unshiftedLandmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['alignedRect'] instanceof FaceDetection;\n}\n\nexport function extendWithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 >(sourceObj: TSource, unshiftedLandmarks: TFaceLandmarks): WithFaceLandmarks {\n const { box: shift } = sourceObj.detection;\n const landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y);\n\n const rect = landmarks.align();\n const { imageDims } = sourceObj.detection;\n const alignedRect = new FaceDetection(sourceObj.detection.score, rect.rescale(imageDims.reverse()), imageDims);\n\n const extension = {\n landmarks,\n unshiftedLandmarks,\n alignedRect,\n };\n\n return { ...sourceObj, ...extension };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IPoint } from '../classes/index';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { drawContour } from './drawContour';\n\nexport interface IDrawFaceLandmarksOptions {\n drawLines?: boolean\n drawPoints?: boolean\n lineWidth?: number\n pointSize?: number\n lineColor?: string\n pointColor?: string\n}\n\nexport class DrawFaceLandmarksOptions {\n public drawLines: boolean\n\n public drawPoints: boolean\n\n public lineWidth: number\n\n public pointSize: number\n\n public lineColor: string\n\n public pointColor: string\n\n constructor(options: IDrawFaceLandmarksOptions = {}) {\n const {\n drawLines = true, drawPoints = true, lineWidth, lineColor, pointSize, pointColor,\n } = options;\n this.drawLines = drawLines;\n this.drawPoints = drawPoints;\n this.lineWidth = lineWidth || 1;\n this.pointSize = pointSize || 2;\n this.lineColor = lineColor || 'rgba(0, 255, 255, 1)';\n this.pointColor = pointColor || 'rgba(255, 0, 255, 1)';\n }\n}\n\nexport class DrawFaceLandmarks {\n public faceLandmarks: FaceLandmarks\n\n public options: DrawFaceLandmarksOptions\n\n constructor(\n faceLandmarks: FaceLandmarks,\n options: IDrawFaceLandmarksOptions = {},\n ) {\n this.faceLandmarks = faceLandmarks;\n this.options = new DrawFaceLandmarksOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const {\n drawLines, drawPoints, lineWidth, lineColor, pointSize, pointColor,\n } = this.options;\n\n if (drawLines && this.faceLandmarks instanceof FaceLandmarks68) {\n ctx.strokeStyle = lineColor;\n ctx.lineWidth = lineWidth;\n drawContour(ctx, this.faceLandmarks.getJawOutline());\n drawContour(ctx, this.faceLandmarks.getLeftEyeBrow());\n drawContour(ctx, this.faceLandmarks.getRightEyeBrow());\n drawContour(ctx, this.faceLandmarks.getNose());\n drawContour(ctx, this.faceLandmarks.getLeftEye(), true);\n drawContour(ctx, this.faceLandmarks.getRightEye(), true);\n drawContour(ctx, this.faceLandmarks.getMouth(), true);\n }\n\n if (drawPoints) {\n ctx.strokeStyle = pointColor;\n ctx.fillStyle = pointColor;\n\n const drawPoint = (pt: IPoint) => {\n ctx.beginPath();\n ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI);\n ctx.fill();\n };\n this.faceLandmarks.positions.forEach(drawPoint);\n }\n }\n}\n\nexport type DrawFaceLandmarksInput = FaceLandmarks | WithFaceLandmarks>\n\nexport function drawFaceLandmarks(\n canvasArg: string | HTMLCanvasElement,\n faceLandmarks: DrawFaceLandmarksInput | Array,\n) {\n const faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks];\n faceLandmarksArray.forEach((f) => {\n // eslint-disable-next-line no-nested-ternary\n const landmarks = f instanceof FaceLandmarks\n ? f\n : (isWithFaceLandmarks(f) ? f.landmarks : undefined);\n if (!landmarks) {\n throw new Error('drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof');\n }\n\n new DrawFaceLandmarks(landmarks).draw(canvasArg);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { seperateWeightMaps } from '../faceProcessor/util';\nimport { TinyXception } from '../xception/TinyXception';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport {\n AgeAndGenderPrediction, Gender, NetOutput, NetParams,\n} from './types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\n\nexport class AgeGenderNet extends NeuralNetwork {\n private _faceFeatureExtractor: TinyXception\n\n constructor(faceFeatureExtractor: TinyXception = new TinyXception(2)) {\n super('AgeGenderNet');\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): TinyXception {\n return this._faceFeatureExtractor;\n }\n\n public runNet(input: NetInput | tf.Tensor4D): NetOutput {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n\n const pooled = tf.avgPool(bottleneckFeatures, [7, 7], [2, 2], 'valid').as2D(bottleneckFeatures.shape[0], -1);\n const age = fullyConnectedLayer(pooled, params.fc.age).as1D();\n const gender = fullyConnectedLayer(pooled, params.fc.gender);\n return { age, gender };\n });\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): NetOutput {\n return tf.tidy(() => {\n const { age, gender } = this.runNet(input);\n return { age, gender: tf.softmax(gender) };\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictAgeAndGender(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n\n const ages = tf.unstack(out.age);\n const genders = tf.unstack(out.gender);\n const ageAndGenderTensors = ages.map((ageTensor, i) => ({\n ageTensor,\n genderTensor: genders[i],\n }));\n\n const predictionsByBatch = await Promise.all(\n ageAndGenderTensors.map(async ({ ageTensor, genderTensor }) => {\n const age = (await ageTensor.data())[0];\n const probMale = (await genderTensor.data())[0];\n const isMale = probMale > 0.5;\n const gender = isMale ? Gender.MALE : Gender.FEMALE;\n const genderProbability = isMale ? probMale : (1 - probMale);\n\n ageTensor.dispose();\n genderTensor.dispose();\n return { age, gender, genderProbability };\n }),\n );\n out.age.dispose();\n out.gender.dispose();\n\n return netInput.isBatchInput ? predictionsByBatch as AgeAndGenderPrediction[] : predictionsByBatch[0] as AgeAndGenderPrediction;\n }\n\n protected getDefaultModelName(): string {\n return 'age_gender_model';\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights);\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const classifierWeightSize = (512 * 1 + 1) + (512 * 2 + 2);\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams, depthwiseSeparableConv } from '../common/index';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { range } from '../utils/index';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction conv(x: tf.Tensor4D, params: ConvParams, stride: [number, number]): tf.Tensor4D {\n return tf.add(tf.conv2d(x, params.filters, stride, 'same'), params.bias);\n}\n\nfunction reductionBlock(x: tf.Tensor4D, params: ReductionBlockParams, isActivateInput: boolean = true): tf.Tensor4D {\n let out = isActivateInput ? tf.relu(x) : x;\n out = depthwiseSeparableConv(out, params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = tf.maxPool(out, [3, 3], [2, 2], 'same');\n out = tf.add(out, conv(x, params.expansion_conv, [2, 2]));\n return out;\n}\n\nfunction mainBlock(x: tf.Tensor4D, params: MainBlockParams): tf.Tensor4D {\n let out = depthwiseSeparableConv(tf.relu(x), params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv2, [1, 1]);\n out = tf.add(out, x);\n return out;\n}\n\nexport class TinyXception extends NeuralNetwork {\n private _numMainBlocks: number\n\n constructor(numMainBlocks: number) {\n super('TinyXception');\n this._numMainBlocks = numMainBlocks;\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyXception - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = tf.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));\n out = reductionBlock(out, params.entry_flow.reduction_block_0, false);\n out = reductionBlock(out, params.entry_flow.reduction_block_1);\n\n range(this._numMainBlocks, 0, 1).forEach((idx) => {\n out = mainBlock(out, params.middle_flow[`main_block_${idx}`]);\n });\n\n out = reductionBlock(out, params.exit_flow.reduction_block);\n out = tf.relu(depthwiseSeparableConv(out, params.exit_flow.separable_conv, [1, 1]));\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_xception_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this._numMainBlocks);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights, this._numMainBlocks);\n }\n}\n", "import { extractConvParamsFactory, extractSeparableConvParamsFactory, extractWeightsFactory } from '../common/index';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractReductionBlockParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(channels: number, mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParams(weights: Float32Array, numMainBlocks: number): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const entry_flow_conv_in = extractConvParams(3, 32, 3, 'entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams(32, 64, 'entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams(64, 128, 'entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(128, `middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams(128, 256, 'exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams(256, 512, 'exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { entry_flow, middle_flow, exit_flow },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n disposeUnusedWeightTensors,\n extractWeightEntryFactory,\n loadSeparableConvParamsFactory,\n ParamMapping,\n} from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractReductionBlockParams(mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(`${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(`${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n numMainBlocks: number,\n): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const entry_flow_conv_in = extractConvParams('entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams('entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams('entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(`middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams('exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams('exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params: { entry_flow, middle_flow, exit_flow }, paramMappings };\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const age = extractFCParams(512, 1, 'fc/age');\n const gender = extractFCParams(512, 2, 'fc/gender');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc: { age, gender } },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: {\n age: extractFcParams('fc/age'),\n gender: extractFcParams('fc/gender'),\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FCParams } from '../common/index';\n\n// eslint-disable-next-line no-shadow\nexport enum Gender {\n // eslint-disable-next-line no-unused-vars\n FEMALE = 'female',\n // eslint-disable-next-line no-unused-vars\n MALE = 'male'\n}\n\nexport type AgeAndGenderPrediction = {\n age: number\n gender: Gender\n genderProbability: number\n}\n\nexport type NetOutput = { age: tf.Tensor1D, gender: tf.Tensor2D }\n\nexport type NetParams = {\n fc: {\n age: FCParams\n gender: FCParams\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { IDimensions, Point } from '../classes/index';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractorParams, TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { isEven } from '../utils/index';\n\nexport abstract class FaceLandmark68NetBase<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends FaceProcessor {\n public postProcess(output: tf.Tensor2D, inputSize: number, originalDimensions: IDimensions[]): tf.Tensor2D {\n const inputDimensions = originalDimensions.map(({ width, height }) => {\n const scale = inputSize / Math.max(height, width);\n return {\n width: width * scale,\n height: height * scale,\n };\n });\n\n const batchSize = inputDimensions.length;\n\n return tf.tidy(() => {\n const createInterleavedTensor = (fillX: number, fillY: number) => tf.stack([tf.fill([68], fillX, 'float32'), tf.fill([68], fillY, 'float32')], 1).as2D(1, 136).as1D();\n\n // eslint-disable-next-line no-unused-vars\n const getPadding = (batchIdx: number, cond: (w: number, h: number) => boolean): number => {\n const { width, height } = inputDimensions[batchIdx];\n return cond(width, height) ? Math.abs(width - height) / 2 : 0;\n };\n\n const getPaddingX = (batchIdx: number) => getPadding(batchIdx, (w, h) => w < h);\n const getPaddingY = (batchIdx: number) => getPadding(batchIdx, (w, h) => h < w);\n\n const landmarkTensors = output\n .mul(tf.fill([batchSize, 136], inputSize, 'float32'))\n .sub(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n getPaddingX(batchIdx),\n getPaddingY(batchIdx),\n ))))\n .div(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n inputDimensions[batchIdx].width,\n inputDimensions[batchIdx].height,\n ))));\n\n return landmarkTensors as tf.Tensor2D;\n });\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n return tf.tidy(() => {\n const out = this.runNet(input);\n return this.postProcess(\n out,\n input.inputSize as number,\n input.inputDimensions.map(([height, width]) => ({ height, width })),\n );\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async detectLandmarks(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const landmarkTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const landmarksForBatch = await Promise.all(landmarkTensors.map(\n async (landmarkTensor, batchIdx) => {\n const landmarksArray = Array.from(await landmarkTensor.data());\n const xCoords = landmarksArray.filter((_, i) => isEven(i));\n const yCoords = landmarksArray.filter((_, i) => !isEven(i));\n\n return new FaceLandmarks68(\n Array(68).fill(0).map((_, i) => new Point(xCoords[i] as number, yCoords[i] as number)),\n {\n height: netInput.getInputHeight(batchIdx),\n width: netInput.getInputWidth(batchIdx),\n },\n );\n },\n ));\n\n landmarkTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput ? landmarksForBatch as FaceLandmarks68[] : landmarksForBatch[0] as FaceLandmarks68;\n }\n\n protected getClassifierChannelsOut(): number {\n return 136;\n }\n}\n", "import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68Net extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceLandmark68Net', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock3 } from './denseBlock';\nimport { extractParamsFromWeigthMapTiny } from './extractParamsFromWeigthMapTiny';\nimport { extractParamsTiny } from './extractParamsTiny';\nimport { IFaceFeatureExtractor, TinyFaceFeatureExtractorParams } from './types';\n\nexport class TinyFaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('TinyFaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyFaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock3(normalized, params.dense0, true);\n out = denseBlock3(out, params.dense1);\n out = denseBlock3(out, params.dense2);\n out = tf.avgPool(out, [14, 14], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_tiny_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMapTiny(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParamsTiny(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMapTiny(\n weightMap: tf.NamedTensorMap,\n): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock3Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock3Params('dense0', true),\n dense1: extractDenseBlock3Params('dense1'),\n dense2: extractDenseBlock3Params('dense2'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsTiny(weights: Float32Array): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock3Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock3Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock3Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock3Params(64, 128, 'dense2');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { dense0, dense1, dense2 },\n };\n}\n", "import { TinyFaceFeatureExtractor } from '../faceFeatureExtractor/TinyFaceFeatureExtractor';\nimport { TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68TinyNet extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: TinyFaceFeatureExtractor = new TinyFaceFeatureExtractor()) {\n super('FaceLandmark68TinyNet', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_tiny_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 128;\n }\n}\n", "import { FaceLandmark68Net } from './FaceLandmark68Net';\n\nexport * from './FaceLandmark68Net';\nexport * from './FaceLandmark68TinyNet';\n\nexport class FaceLandmarkNet extends FaceLandmark68Net {}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { convDown } from './convLayer';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { residual, residualDown } from './residualLayer';\nimport { NetParams } from './types';\n\nexport class FaceRecognitionNet extends NeuralNetwork {\n constructor() {\n super('FaceRecognitionNet');\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceRecognitionNet - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(150, true).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(150, true), 'float32');\n\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = convDown(normalized, params.conv32_down);\n out = tf.maxPool(out, 3, 2, 'valid');\n\n out = residual(out, params.conv32_1);\n out = residual(out, params.conv32_2);\n out = residual(out, params.conv32_3);\n\n out = residualDown(out, params.conv64_down);\n out = residual(out, params.conv64_1);\n out = residual(out, params.conv64_2);\n out = residual(out, params.conv64_3);\n\n out = residualDown(out, params.conv128_down);\n out = residual(out, params.conv128_1);\n out = residual(out, params.conv128_2);\n\n out = residualDown(out, params.conv256_down);\n out = residual(out, params.conv256_1);\n out = residual(out, params.conv256_2);\n out = residualDown(out, params.conv256_down_out);\n\n const globalAvg = out.mean([1, 2]) as tf.Tensor2D;\n const fullyConnected = tf.matMul(globalAvg, params.fc);\n\n return fullyConnected;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async computeFaceDescriptor(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n\n const faceDescriptorTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const faceDescriptorsForBatch = await Promise.all(faceDescriptorTensors.map(\n (t) => t.data(),\n )) as Float32Array[];\n\n faceDescriptorTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput\n ? faceDescriptorsForBatch\n : faceDescriptorsForBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_recognition_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { scale } from './scaleLayer';\nimport { ConvLayerParams } from './types';\n\nfunction convLayer(\n x: tf.Tensor4D,\n params: ConvLayerParams,\n strides: [number, number],\n withRelu: boolean,\n padding: 'valid' | 'same' = 'same',\n): tf.Tensor4D {\n const { filters, bias } = params.conv;\n\n let out = tf.conv2d(x, filters, strides, padding);\n out = tf.add(out, bias);\n out = scale(out, params.scale);\n return withRelu ? tf.relu(out) : out;\n}\n\nexport function conv(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], true);\n}\n\nexport function convNoRelu(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], false);\n}\n\nexport function convDown(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [2, 2], true, 'valid');\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ScaleLayerParams } from './types';\n\nexport function scale(x: tf.Tensor4D, params: ScaleLayerParams): tf.Tensor4D {\n return tf.add(tf.mul(x, params.weights), params.biases);\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n ConvParams, extractWeightsFactory, ExtractWeightsFunction, ParamMapping,\n} from '../common/index';\nimport { isFloat } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractFilterValues(numFilterValues: number, numFilters: number, filterSize: number): tf.Tensor4D {\n const weights = extractWeights(numFilterValues);\n const depth = weights.length / (numFilters * filterSize * filterSize);\n\n if (isFloat(depth)) {\n throw new Error(`depth has to be an integer: ${depth}, weights.length: ${weights.length}, numFilters: ${numFilters}, filterSize: ${filterSize}`);\n }\n\n return tf.tidy(\n () => tf.transpose(\n tf.tensor4d(weights, [numFilters, depth, filterSize, filterSize]),\n [2, 3, 1, 0],\n ),\n );\n }\n\n function extractConvParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams {\n const filters = extractFilterValues(numFilterValues, numFilters, filterSize);\n const bias = tf.tensor1d(extractWeights(numFilters));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n }\n\n function extractScaleLayerParams(numWeights: number, mappedPrefix: string): ScaleLayerParams {\n const weights = tf.tensor1d(extractWeights(numWeights));\n const biases = tf.tensor1d(extractWeights(numWeights));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/biases` },\n );\n\n return {\n weights,\n biases,\n };\n }\n\n function extractConvLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvLayerParams {\n const conv = extractConvParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv`);\n const scale = extractScaleLayerParams(numFilters, `${mappedPrefix}/scale`);\n\n return { conv, scale };\n }\n\n function extractResidualLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n isDown: boolean = false,\n ): ResidualLayerParams {\n const conv1 = extractConvLayerParams((isDown ? 0.5 : 1) * numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv1`);\n const conv2 = extractConvLayerParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv2`);\n\n return { conv1, conv2 };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const conv32_down = extractConvLayerParams(4704, 32, 7, 'conv32_down');\n const conv32_1 = extractResidualLayerParams(9216, 32, 3, 'conv32_1');\n const conv32_2 = extractResidualLayerParams(9216, 32, 3, 'conv32_2');\n const conv32_3 = extractResidualLayerParams(9216, 32, 3, 'conv32_3');\n\n const conv64_down = extractResidualLayerParams(36864, 64, 3, 'conv64_down', true);\n const conv64_1 = extractResidualLayerParams(36864, 64, 3, 'conv64_1');\n const conv64_2 = extractResidualLayerParams(36864, 64, 3, 'conv64_2');\n const conv64_3 = extractResidualLayerParams(36864, 64, 3, 'conv64_3');\n\n const conv128_down = extractResidualLayerParams(147456, 128, 3, 'conv128_down', true);\n const conv128_1 = extractResidualLayerParams(147456, 128, 3, 'conv128_1');\n const conv128_2 = extractResidualLayerParams(147456, 128, 3, 'conv128_2');\n\n const conv256_down = extractResidualLayerParams(589824, 256, 3, 'conv256_down', true);\n const conv256_1 = extractResidualLayerParams(589824, 256, 3, 'conv256_1');\n const conv256_2 = extractResidualLayerParams(589824, 256, 3, 'conv256_2');\n const conv256_down_out = extractResidualLayerParams(589824, 256, 3, 'conv256_down_out');\n\n const fc = tf.tidy(\n () => tf.transpose(tf.tensor2d(extractWeights(256 * 128), [128, 256]), [1, 0]),\n );\n paramMappings.push({ paramPath: 'fc' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping } from '../common/index';\nimport { isTensor2D } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractScaleLayerParams(prefix: string): ScaleLayerParams {\n const weights = extractWeightEntry(`${prefix}/scale/weights`, 1);\n const biases = extractWeightEntry(`${prefix}/scale/biases`, 1);\n\n return { weights, biases };\n }\n\n function extractConvLayerParams(prefix: string): ConvLayerParams {\n const filters = extractWeightEntry(`${prefix}/conv/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/conv/bias`, 1);\n const scale = extractScaleLayerParams(prefix);\n\n return { conv: { filters, bias }, scale };\n }\n\n function extractResidualLayerParams(prefix: string): ResidualLayerParams {\n return {\n conv1: extractConvLayerParams(`${prefix}/conv1`),\n conv2: extractConvLayerParams(`${prefix}/conv2`),\n };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const conv32_down = extractConvLayerParams('conv32_down');\n const conv32_1 = extractResidualLayerParams('conv32_1');\n const conv32_2 = extractResidualLayerParams('conv32_2');\n const conv32_3 = extractResidualLayerParams('conv32_3');\n\n const conv64_down = extractResidualLayerParams('conv64_down');\n const conv64_1 = extractResidualLayerParams('conv64_1');\n const conv64_2 = extractResidualLayerParams('conv64_2');\n const conv64_3 = extractResidualLayerParams('conv64_3');\n\n const conv128_down = extractResidualLayerParams('conv128_down');\n const conv128_1 = extractResidualLayerParams('conv128_1');\n const conv128_2 = extractResidualLayerParams('conv128_2');\n\n const conv256_down = extractResidualLayerParams('conv256_down');\n const conv256_1 = extractResidualLayerParams('conv256_1');\n const conv256_2 = extractResidualLayerParams('conv256_2');\n const conv256_down_out = extractResidualLayerParams('conv256_down_out');\n\n const { fc } = weightMap;\n paramMappings.push({ originalPath: 'fc', paramPath: 'fc' });\n\n if (!isTensor2D(fc)) {\n throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${fc}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { conv, convDown, convNoRelu } from './convLayer';\nimport { ResidualLayerParams } from './types';\n\nexport function residual(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = conv(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n out = tf.add(out, x);\n out = tf.relu(out);\n return out;\n}\n\nexport function residualDown(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = convDown(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n\n let pooled = tf.avgPool(x, 2, 2, 'valid') as tf.Tensor4D;\n const zeros = tf.zeros(pooled.shape);\n const isPad = pooled.shape[3] !== out.shape[3];\n const isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2];\n\n if (isAdjustShape) {\n const padShapeX = [...out.shape] as [number, number, number, number];\n padShapeX[1] = 1;\n const zerosW = tf.zeros(padShapeX);\n out = tf.concat([out, zerosW], 1);\n\n const padShapeY = [...out.shape] as [number, number, number, number];\n padShapeY[2] = 1;\n const zerosH = tf.zeros(padShapeY);\n out = tf.concat([out, zerosH], 2);\n }\n\n pooled = isPad ? tf.concat([pooled, zeros], 3) : pooled;\n out = tf.add(pooled, out) as tf.Tensor4D;\n\n out = tf.relu(out);\n return out;\n}\n", "import { FaceRecognitionNet } from './FaceRecognitionNet';\n\nexport * from './FaceRecognitionNet';\n\nexport function createFaceRecognitionNet(weights: Float32Array) {\n const net = new FaceRecognitionNet();\n net.extractWeights(weights);\n return net;\n}\n", "export type WithFaceDescriptor = TSource & {\n descriptor: Float32Array\n}\n\nexport function extendWithFaceDescriptor<\n TSource\n>(\n sourceObj: TSource,\n descriptor: Float32Array,\n): WithFaceDescriptor {\n const extension = { descriptor };\n return { ...sourceObj, ...extension };\n}\n", "export type WithAge = TSource & {\n age: number\n}\n\nexport function isWithAge(obj: any): obj is WithAge<{}> {\n return typeof obj.age === 'number';\n}\n\nexport function extendWithAge<\n TSource\n>(\n sourceObj: TSource,\n age: number,\n): WithAge {\n const extension = { age };\n return { ...sourceObj, ...extension };\n}\n", "import { Gender } from '../ageGenderNet/types';\nimport { isValidProbablitiy } from '../utils/index';\n\nexport type WithGender = TSource & {\n gender: Gender\n genderProbability: number\n}\n\nexport function isWithGender(obj: any): obj is WithGender<{}> {\n return (obj.gender === Gender.MALE || obj.gender === Gender.FEMALE)\n && isValidProbablitiy(obj.genderProbability);\n}\n\nexport function extendWithGender<\n TSource\n>(\n sourceObj: TSource,\n gender: Gender,\n genderProbability: number,\n): WithGender {\n const extension = { gender, genderProbability };\n return { ...sourceObj, ...extension };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { mobileNetV1 } from './mobileNetV1';\nimport { nonMaxSuppression } from './nonMaxSuppression';\nimport { outputLayer } from './outputLayer';\nimport { predictionLayer } from './predictionLayer';\nimport { ISsdMobilenetv1Options, SsdMobilenetv1Options } from './SsdMobilenetv1Options';\nimport { NetParams } from './types';\n\nexport class SsdMobilenetv1 extends NeuralNetwork {\n constructor() {\n super('SsdMobilenetv1');\n }\n\n public forwardInput(input: NetInput) {\n const { params } = this;\n\n if (!params) {\n throw new Error('SsdMobilenetv1 - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(512, false).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(512, false), 'float32');\n\n const x = tf.sub(tf.mul(batchTensor, tf.scalar(0.007843137718737125)), tf.scalar(1)) as tf.Tensor4D;\n const features = mobileNetV1(x, params.mobilenetv1);\n\n const {\n boxPredictions,\n classPredictions,\n } = predictionLayer(features.out, features.conv11, params.prediction_layer);\n\n return outputLayer(boxPredictions, classPredictions, params.output_layer);\n });\n }\n\n public async forward(input: TNetInput) {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async locateFaces(\n input: TNetInput,\n options: ISsdMobilenetv1Options = {},\n ): Promise {\n const { maxResults, minConfidence } = new SsdMobilenetv1Options(options);\n\n const netInput = await toNetInput(input);\n\n const {\n boxes: _boxes,\n scores: _scores,\n } = this.forwardInput(netInput);\n\n // TODO batches\n const boxes = _boxes[0];\n const scores = _scores[0];\n for (let i = 1; i < _boxes.length; i++) {\n _boxes[i].dispose();\n _scores[i].dispose();\n }\n\n // TODO find a better way to filter by minConfidence\n const scoresData = Array.from(await scores.data());\n\n const iouThreshold = 0.5;\n const indices = nonMaxSuppression(\n boxes,\n scoresData as number[],\n maxResults,\n iouThreshold,\n minConfidence,\n );\n\n const reshapedDims = netInput.getReshapedInputDimensions(0);\n const inputSize = netInput.inputSize as number;\n const padX = inputSize / reshapedDims.width;\n const padY = inputSize / reshapedDims.height;\n\n const boxesData = boxes.arraySync();\n const results = indices\n .map((idx) => {\n const [top, bottom] = [\n Math.max(0, boxesData[idx][0]),\n Math.min(1.0, boxesData[idx][2]),\n ].map((val) => val * padY);\n const [left, right] = [\n Math.max(0, boxesData[idx][1]),\n Math.min(1.0, boxesData[idx][3]),\n ].map((val) => val * padX);\n return new FaceDetection(\n scoresData[idx] as number,\n new Rect(\n left,\n top,\n right - left,\n bottom - top,\n ),\n {\n height: netInput.getInputHeight(0),\n width: netInput.getInputWidth(0),\n },\n );\n });\n\n boxes.dispose();\n scores.dispose();\n\n return results;\n }\n\n protected getDefaultModelName(): string {\n return 'ssd_mobilenetv1_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n ExtractWeightsFunction, ParamMapping, ConvParams, extractWeightsFactory,\n} from '../common/index';\nimport {\n MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractDepthwiseConvParams(numChannels: number, mappedPrefix: string): MobileNetV1.DepthwiseConvParams {\n const filters = tf.tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]);\n const batch_norm_scale = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_offset = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_mean = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_variance = tf.tensor1d(extractWeights(numChannels));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/batch_norm_scale` },\n { paramPath: `${mappedPrefix}/batch_norm_offset` },\n { paramPath: `${mappedPrefix}/batch_norm_mean` },\n { paramPath: `${mappedPrefix}/batch_norm_variance` },\n );\n\n return {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n };\n }\n\n function extractConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n isPointwiseConv?: boolean,\n ): ConvParams {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/${isPointwiseConv ? 'batch_norm_offset' : 'bias'}` },\n );\n\n return { filters, bias };\n }\n\n function extractPointwiseConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): PointwiseConvParams {\n const {\n filters,\n bias,\n } = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true);\n\n return {\n filters,\n batch_norm_offset: bias,\n };\n }\n\n function extractConvPairParams(\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): MobileNetV1.ConvPairParams {\n const depthwise_conv = extractDepthwiseConvParams(channelsIn, `${mappedPrefix}/depthwise_conv`);\n const pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/pointwise_conv`);\n\n return { depthwise_conv, pointwise_conv };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n const conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0');\n\n const conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1');\n const conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2');\n const conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3');\n const conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4');\n const conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5');\n const conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6');\n const conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7');\n const conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8');\n const conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9');\n const conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10');\n const conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11');\n const conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12');\n const conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13');\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n conv_8,\n conv_9,\n conv_10,\n conv_11,\n conv_12,\n conv_13,\n };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n const conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0');\n const conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1');\n const conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2');\n const conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3');\n const conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4');\n const conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5');\n const conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6');\n const conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7');\n\n const box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor');\n const class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor');\n const box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor');\n const class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor');\n const box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor');\n const class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor');\n const box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor');\n const class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor');\n const box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor');\n const class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor');\n const box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor');\n const class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor');\n\n const box_predictor_0 = {\n box_encoding_predictor: box_encoding_0_predictor,\n class_predictor: class_predictor_0,\n };\n const box_predictor_1 = {\n box_encoding_predictor: box_encoding_1_predictor,\n class_predictor: class_predictor_1,\n };\n const box_predictor_2 = {\n box_encoding_predictor: box_encoding_2_predictor,\n class_predictor: class_predictor_2,\n };\n const box_predictor_3 = {\n box_encoding_predictor: box_encoding_3_predictor,\n class_predictor: class_predictor_3,\n };\n const box_predictor_4 = {\n box_encoding_predictor: box_encoding_4_predictor,\n class_predictor: class_predictor_4,\n };\n const box_predictor_5 = {\n box_encoding_predictor: box_encoding_5_predictor,\n class_predictor: class_predictor_5,\n };\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n box_predictor_0,\n box_predictor_1,\n box_predictor_2,\n box_predictor_3,\n box_predictor_4,\n box_predictor_5,\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const mobilenetv1 = extractMobilenetV1Params();\n const prediction_layer = extractPredictionLayerParams();\n const extra_dim = tf.tensor3d(\n extractWeights(5118 * 4),\n [1, 5118, 4],\n );\n const output_layer = {\n extra_dim,\n };\n\n paramMappings.push({ paramPath: 'output_layer/extra_dim' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n params: {\n mobilenetv1,\n prediction_layer,\n output_layer,\n },\n paramMappings,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n ConvParams, disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping,\n} from '../common/index';\nimport { isTensor3D } from '../utils/index';\nimport {\n BoxPredictionParams, MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractPointwiseConvParams(prefix: string, idx: number, mappedPrefix: string): PointwiseConvParams {\n const filters = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/weights`, 4, `${mappedPrefix}/filters`);\n const batch_norm_offset = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/convolution_bn_offset`, 1, `${mappedPrefix}/batch_norm_offset`);\n\n return { filters, batch_norm_offset };\n }\n\n function extractConvPairParams(idx: number): MobileNetV1.ConvPairParams {\n const mappedPrefix = `mobilenetv1/conv_${idx}`;\n const prefixDepthwiseConv = `MobilenetV1/Conv2d_${idx}_depthwise`;\n const mappedPrefixDepthwiseConv = `${mappedPrefix}/depthwise_conv`;\n const mappedPrefixPointwiseConv = `${mappedPrefix}/pointwise_conv`;\n\n const filters = extractWeightEntry(`${prefixDepthwiseConv}/depthwise_weights`, 4, `${mappedPrefixDepthwiseConv}/filters`);\n const batch_norm_scale = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/gamma`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_scale`);\n const batch_norm_offset = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/beta`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_offset`);\n const batch_norm_mean = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_mean`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_mean`);\n const batch_norm_variance = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_variance`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_variance`);\n\n return {\n depthwise_conv: {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n },\n pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv),\n };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n return {\n conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'),\n conv_1: extractConvPairParams(1),\n conv_2: extractConvPairParams(2),\n conv_3: extractConvPairParams(3),\n conv_4: extractConvPairParams(4),\n conv_5: extractConvPairParams(5),\n conv_6: extractConvPairParams(6),\n conv_7: extractConvPairParams(7),\n conv_8: extractConvPairParams(8),\n conv_9: extractConvPairParams(9),\n conv_10: extractConvPairParams(10),\n conv_11: extractConvPairParams(11),\n conv_12: extractConvPairParams(12),\n conv_13: extractConvPairParams(13),\n };\n }\n\n function extractConvParams(prefix: string, mappedPrefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/weights`, 4, `${mappedPrefix}/filters`);\n const bias = extractWeightEntry(`${prefix}/biases`, 1, `${mappedPrefix}/bias`);\n\n return { filters, bias };\n }\n\n function extractBoxPredictorParams(idx: number): BoxPredictionParams {\n const box_encoding_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/BoxEncodingPredictor`,\n `prediction_layer/box_predictor_${idx}/box_encoding_predictor`,\n );\n const class_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/ClassPredictor`,\n `prediction_layer/box_predictor_${idx}/class_predictor`,\n );\n\n return { box_encoding_predictor, class_predictor };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n return {\n conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'),\n conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'),\n conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'),\n conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'),\n conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'),\n conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'),\n conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'),\n conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'),\n box_predictor_0: extractBoxPredictorParams(0),\n box_predictor_1: extractBoxPredictorParams(1),\n box_predictor_2: extractBoxPredictorParams(2),\n box_predictor_3: extractBoxPredictorParams(3),\n box_predictor_4: extractBoxPredictorParams(4),\n box_predictor_5: extractBoxPredictorParams(5),\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const extra_dim = weightMap['Output/extra_dim'];\n paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' });\n\n if (!isTensor3D(extra_dim)) {\n throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${extra_dim}`);\n }\n\n const params = {\n mobilenetv1: extractMobilenetV1Params(),\n prediction_layer: extractPredictionLayerParams(),\n output_layer: {\n extra_dim,\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { MobileNetV1 } from './types';\n\nconst epsilon = 0.0010000000474974513;\n\nfunction depthwiseConvLayer(\n x: tf.Tensor4D,\n params: MobileNetV1.DepthwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.depthwiseConv2d(x, params.filters, strides, 'same');\n out = tf.batchNorm(\n out,\n params.batch_norm_mean,\n params.batch_norm_variance,\n params.batch_norm_offset,\n params.batch_norm_scale,\n epsilon,\n );\n return tf.clipByValue(out, 0, 6);\n });\n}\n\nfunction getStridesForLayerIdx(layerIdx: number): [number, number] {\n return [2, 4, 6, 12].some((idx) => idx === layerIdx) ? [2, 2] : [1, 1];\n}\n\nexport function mobileNetV1(x: tf.Tensor4D, params: MobileNetV1.Params) {\n return tf.tidy(() => {\n let conv11;\n let out = pointwiseConvLayer(x, params.conv_0, [2, 2]);\n\n const convPairParams = [\n params.conv_1,\n params.conv_2,\n params.conv_3,\n params.conv_4,\n params.conv_5,\n params.conv_6,\n params.conv_7,\n params.conv_8,\n params.conv_9,\n params.conv_10,\n params.conv_11,\n params.conv_12,\n params.conv_13,\n ];\n\n convPairParams.forEach((param, i) => {\n const layerIdx = i + 1;\n const depthwiseConvStrides = getStridesForLayerIdx(layerIdx);\n out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides);\n out = pointwiseConvLayer(out, param.pointwise_conv, [1, 1]);\n if (layerIdx === 11) {\n conv11 = out;\n }\n });\n\n if (conv11 === null) {\n throw new Error('mobileNetV1 - output of conv layer 11 is null');\n }\n\n return {\n out,\n conv11: conv11 as any,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { PointwiseConvParams } from './types';\n\nexport function pointwiseConvLayer(\n x: tf.Tensor4D,\n params: PointwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.conv2d(x, params.filters, strides, 'same');\n out = tf.add(out, params.batch_norm_offset);\n return tf.clipByValue(out, 0, 6);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nfunction IOU(boxes: tf.Tensor2D, i: number, j: number) {\n const boxesData = boxes.arraySync();\n const yminI = Math.min(boxesData[i][0], boxesData[i][2]);\n const xminI = Math.min(boxesData[i][1], boxesData[i][3]);\n const ymaxI = Math.max(boxesData[i][0], boxesData[i][2]);\n const xmaxI = Math.max(boxesData[i][1], boxesData[i][3]);\n const yminJ = Math.min(boxesData[j][0], boxesData[j][2]);\n const xminJ = Math.min(boxesData[j][1], boxesData[j][3]);\n const ymaxJ = Math.max(boxesData[j][0], boxesData[j][2]);\n const xmaxJ = Math.max(boxesData[j][1], boxesData[j][3]);\n const areaI = (ymaxI - yminI) * (xmaxI - xminI);\n const areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ);\n if (areaI <= 0 || areaJ <= 0) {\n return 0.0;\n }\n const intersectionYmin = Math.max(yminI, yminJ);\n const intersectionXmin = Math.max(xminI, xminJ);\n const intersectionYmax = Math.min(ymaxI, ymaxJ);\n const intersectionXmax = Math.min(xmaxI, xmaxJ);\n const intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0)\n * Math.max(intersectionXmax - intersectionXmin, 0.0);\n return intersectionArea / (areaI + areaJ - intersectionArea);\n}\n\nexport function nonMaxSuppression(\n boxes: tf.Tensor2D,\n scores: number[],\n maxOutputSize: number,\n iouThreshold: number,\n scoreThreshold: number,\n): number[] {\n const numBoxes = boxes.shape[0];\n const outputSize = Math.min(\n maxOutputSize,\n numBoxes,\n );\n\n const candidates = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .filter((c) => c.score > scoreThreshold)\n .sort((c1, c2) => c2.score - c1.score);\n\n const suppressFunc = (x: number) => (x <= iouThreshold ? 1 : 0);\n\n const selected: number[] = [];\n\n candidates.forEach((c) => {\n if (selected.length >= outputSize) {\n return;\n }\n const originalScore = c.score;\n\n for (let j = selected.length - 1; j >= 0; --j) {\n const iou = IOU(boxes, c.boxIndex, selected[j]);\n if (iou === 0.0) continue;\n c.score *= suppressFunc(iou);\n if (c.score <= scoreThreshold) break;\n }\n if (originalScore === c.score) {\n selected.push(c.boxIndex);\n }\n });\n\n return selected;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { OutputLayerParams } from './types';\n\nfunction getCenterCoordinatesAndSizesLayer(x: tf.Tensor2D) {\n const vec = tf.unstack(tf.transpose(x, [1, 0]));\n\n const sizes = [\n tf.sub(vec[2], vec[0]),\n tf.sub(vec[3], vec[1]),\n ];\n\n const centers = [\n tf.add(vec[0], tf.div(sizes[0], tf.scalar(2))),\n tf.add(vec[1], tf.div(sizes[1], tf.scalar(2))),\n ];\n\n return {\n sizes,\n centers,\n };\n}\n\nfunction decodeBoxesLayer(x0: tf.Tensor2D, x1: tf.Tensor2D) {\n const {\n sizes,\n centers,\n } = getCenterCoordinatesAndSizesLayer(x0);\n\n const vec = tf.unstack(tf.transpose(x1, [1, 0]));\n\n const div0_out = tf.div(tf.mul(tf.exp(tf.div(vec[2], tf.scalar(5))), sizes[0]), tf.scalar(2));\n const add0_out = tf.add(tf.mul(tf.div(vec[0], tf.scalar(10)), sizes[0]), centers[0]);\n\n const div1_out = tf.div(tf.mul(tf.exp(tf.div(vec[3], tf.scalar(5))), sizes[1]), tf.scalar(2));\n const add1_out = tf.add(tf.mul(tf.div(vec[1], tf.scalar(10)), sizes[1]), centers[1]);\n\n return tf.transpose(\n tf.stack([\n tf.sub(add0_out, div0_out),\n tf.sub(add1_out, div1_out),\n tf.add(add0_out, div0_out),\n tf.add(add1_out, div1_out),\n ]),\n [1, 0],\n );\n}\n\nexport function outputLayer(\n boxPredictions: tf.Tensor4D,\n classPredictions: tf.Tensor4D,\n params: OutputLayerParams,\n) {\n return tf.tidy(() => {\n const batchSize = boxPredictions.shape[0];\n\n let boxes = decodeBoxesLayer(\n tf.reshape(tf.tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]) as tf.Tensor2D,\n tf.reshape(boxPredictions, [-1, 4]) as tf.Tensor2D,\n );\n boxes = tf.reshape(\n boxes,\n [batchSize, (boxes.shape[0] / batchSize), 4],\n );\n\n const scoresAndClasses = tf.sigmoid(tf.slice(classPredictions, [0, 0, 1], [-1, -1, -1]));\n let scores = tf.slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]) as tf.Tensor;\n\n scores = tf.reshape(\n scores,\n [batchSize, scores.shape[1] as number],\n );\n\n const boxesByBatch = tf.unstack(boxes) as tf.Tensor2D[];\n const scoresByBatch = tf.unstack(scores) as tf.Tensor1D[];\n\n return {\n boxes: boxesByBatch,\n scores: scoresByBatch,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { boxPredictionLayer } from './boxPredictionLayer';\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { PredictionLayerParams } from './types';\n\nexport function predictionLayer(\n x: tf.Tensor4D,\n conv11: tf.Tensor4D,\n params: PredictionLayerParams,\n) {\n return tf.tidy(() => {\n const conv0 = pointwiseConvLayer(x, params.conv_0, [1, 1]);\n const conv1 = pointwiseConvLayer(conv0, params.conv_1, [2, 2]);\n const conv2 = pointwiseConvLayer(conv1, params.conv_2, [1, 1]);\n const conv3 = pointwiseConvLayer(conv2, params.conv_3, [2, 2]);\n const conv4 = pointwiseConvLayer(conv3, params.conv_4, [1, 1]);\n const conv5 = pointwiseConvLayer(conv4, params.conv_5, [2, 2]);\n const conv6 = pointwiseConvLayer(conv5, params.conv_6, [1, 1]);\n const conv7 = pointwiseConvLayer(conv6, params.conv_7, [2, 2]);\n\n const boxPrediction0 = boxPredictionLayer(conv11, params.box_predictor_0);\n const boxPrediction1 = boxPredictionLayer(x, params.box_predictor_1);\n const boxPrediction2 = boxPredictionLayer(conv1, params.box_predictor_2);\n const boxPrediction3 = boxPredictionLayer(conv3, params.box_predictor_3);\n const boxPrediction4 = boxPredictionLayer(conv5, params.box_predictor_4);\n const boxPrediction5 = boxPredictionLayer(conv7, params.box_predictor_5);\n\n const boxPredictions = tf.concat([\n boxPrediction0.boxPredictionEncoding,\n boxPrediction1.boxPredictionEncoding,\n boxPrediction2.boxPredictionEncoding,\n boxPrediction3.boxPredictionEncoding,\n boxPrediction4.boxPredictionEncoding,\n boxPrediction5.boxPredictionEncoding,\n ], 1) as tf.Tensor4D;\n\n const classPredictions = tf.concat([\n boxPrediction0.classPrediction,\n boxPrediction1.classPrediction,\n boxPrediction2.classPrediction,\n boxPrediction3.classPrediction,\n boxPrediction4.classPrediction,\n boxPrediction5.classPrediction,\n ], 1) as tf.Tensor4D;\n\n return {\n boxPredictions,\n classPredictions,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { convLayer } from '../common/index';\nimport { BoxPredictionParams } from './types';\n\nexport function boxPredictionLayer(\n x: tf.Tensor4D,\n params: BoxPredictionParams,\n) {\n return tf.tidy(() => {\n const batchSize = x.shape[0];\n\n const boxPredictionEncoding = tf.reshape(\n convLayer(x, params.box_encoding_predictor),\n [batchSize, -1, 1, 4],\n );\n const classPrediction = tf.reshape(\n convLayer(x, params.class_predictor),\n [batchSize, -1, 3],\n );\n\n return {\n boxPredictionEncoding,\n classPrediction,\n };\n });\n}\n", "export interface ISsdMobilenetv1Options {\n minConfidence?: number\n maxResults?: number\n}\n\nexport class SsdMobilenetv1Options {\n protected _name: string = 'SsdMobilenetv1Options'\n\n private _minConfidence: number\n\n private _maxResults: number\n\n constructor({ minConfidence, maxResults }: ISsdMobilenetv1Options = {}) {\n this._minConfidence = minConfidence || 0.5;\n this._maxResults = maxResults || 100;\n\n if (typeof this._minConfidence !== 'number' || this._minConfidence <= 0 || this._minConfidence >= 1) {\n throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);\n }\n\n if (typeof this._maxResults !== 'number') {\n throw new Error(`${this._name} - expected maxResults to be a number`);\n }\n }\n\n get minConfidence(): number { return this._minConfidence; }\n\n get maxResults(): number { return this._maxResults; }\n}\n", "import { SsdMobilenetv1 } from './SsdMobilenetv1';\n\nexport * from './SsdMobilenetv1';\nexport * from './SsdMobilenetv1Options';\n\nexport function createSsdMobilenetv1(weights: Float32Array) {\n const net = new SsdMobilenetv1();\n net.extractWeights(weights);\n return net;\n}\n\nexport function createFaceDetectionNet(weights: Float32Array) {\n return createSsdMobilenetv1(weights);\n}\n\n// alias for backward compatibily\nexport class FaceDetectionNet extends SsdMobilenetv1 {}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(0.738768, 0.874946),\n new Point(2.42204, 2.65704),\n new Point(4.30971, 7.04493),\n new Point(10.246, 4.59428),\n new Point(12.6868, 11.8741),\n];\n\nexport const BOX_ANCHORS_SEPARABLE = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB_SEPARABLE: [number, number, number] = [117.001, 114.697, 97.404];\n\nexport const DEFAULT_MODEL_NAME = 'tiny_yolov2_model';\nexport const DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model';\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { BoundingBox } from '../classes/BoundingBox';\nimport { Dimensions } from '../classes/Dimensions';\nimport { ObjectDetection } from '../classes/ObjectDetection';\nimport { convLayer } from '../common/index';\nimport { ConvParams, SeparableConvParams } from '../common/types';\nimport { toNetInput } from '../dom/index';\nimport { NetInput } from '../dom/NetInput';\nimport { TNetInput } from '../dom/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { sigmoid } from '../ops/index';\nimport { nonMaxSuppression } from '../ops/nonMaxSuppression';\nimport { normalize } from '../ops/normalize';\nimport { TinyYolov2Config, validateConfig } from './config';\nimport { convWithBatchNorm } from './convWithBatchNorm';\nimport { depthwiseSeparableConv } from './depthwiseSeparableConv';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { leaky } from './leaky';\nimport { ITinyYolov2Options, TinyYolov2Options } from './TinyYolov2Options';\nimport { DefaultTinyYolov2NetParams, MobilenetParams, TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2Base extends NeuralNetwork {\n public static DEFAULT_FILTER_SIZES = [\n 3, 16, 32, 64, 128, 256, 512, 1024, 1024,\n ]\n\n private _config: TinyYolov2Config\n\n constructor(config: TinyYolov2Config) {\n super('TinyYolov2');\n validateConfig(config);\n this._config = config;\n }\n\n public get config(): TinyYolov2Config {\n return this._config;\n }\n\n public get withClassScores(): boolean {\n return this.config.withClassScores || this.config.classes.length > 1;\n }\n\n public get boxEncodingSize(): number {\n return 5 + (this.withClassScores ? this.config.classes.length : 0);\n }\n\n public runTinyYolov2(x: tf.Tensor4D, params: DefaultTinyYolov2NetParams): tf.Tensor4D {\n let out = convWithBatchNorm(x, params.conv0);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = convWithBatchNorm(out, params.conv6);\n out = convWithBatchNorm(out, params.conv7);\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public runMobilenet(x: tf.Tensor4D, params: MobilenetParams): tf.Tensor4D {\n let out = this.config.isFirstLayerConv2d\n ? leaky(convLayer(x, params.conv0 as ConvParams, 'valid', false))\n : depthwiseSeparableConv(x, params.conv0 as SeparableConvParams);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = params.conv6 ? depthwiseSeparableConv(out, params.conv6) : out;\n out = params.conv7 ? depthwiseSeparableConv(out, params.conv7) : out;\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public forwardInput(input: NetInput, inputSize: number): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyYolov2 - load model before inference');\n }\n\n return tf.tidy(() => {\n // let batchTensor = input.toBatchTensor(inputSize, false).toFloat()\n let batchTensor = tf.cast(input.toBatchTensor(inputSize, false), 'float32');\n batchTensor = this.config.meanRgb\n ? normalize(batchTensor, this.config.meanRgb)\n : batchTensor;\n batchTensor = batchTensor.div(tf.scalar(256)) as tf.Tensor4D;\n\n return this.config.withSeparableConvs\n ? this.runMobilenet(batchTensor, params as MobilenetParams)\n : this.runTinyYolov2(batchTensor, params as DefaultTinyYolov2NetParams);\n });\n }\n\n public async forward(input: TNetInput, inputSize: number): Promise {\n return this.forwardInput(await toNetInput(input), inputSize);\n }\n\n public async detect(input: TNetInput, forwardParams: ITinyYolov2Options = {}): Promise {\n const { inputSize, scoreThreshold } = new TinyYolov2Options(forwardParams);\n\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput, inputSize);\n const out0 = tf.tidy(() => tf.unstack(out)[0].expandDims()) as tf.Tensor4D;\n\n const inputDimensions = {\n width: netInput.getInputWidth(0),\n height: netInput.getInputHeight(0),\n };\n\n const results = await this.extractBoxes(out0, netInput.getReshapedInputDimensions(0), scoreThreshold);\n out.dispose();\n out0.dispose();\n\n const boxes = results.map((res) => res.box);\n const scores = results.map((res) => res.score);\n const classScores = results.map((res) => res.classScore);\n const classNames = results.map((res) => this.config.classes[res.label]);\n\n const indices = nonMaxSuppression(\n boxes.map((box) => box.rescale(inputSize)),\n scores,\n this.config.iouThreshold,\n true,\n );\n\n const detections = indices.map((idx) => new ObjectDetection(\n scores[idx],\n classScores[idx],\n classNames[idx],\n boxes[idx],\n inputDimensions,\n ));\n\n return detections;\n }\n\n protected getDefaultModelName(): string {\n return '';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this.config);\n }\n\n protected extractParams(weights: Float32Array) {\n const filterSizes = this.config.filterSizes || TinyYolov2Base.DEFAULT_FILTER_SIZES;\n\n const numFilters = filterSizes ? filterSizes.length : undefined;\n if (numFilters !== 7 && numFilters !== 8 && numFilters !== 9) {\n throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${numFilters} filterSizes in config`);\n }\n return extractParams(weights, this.config, this.boxEncodingSize, filterSizes);\n }\n\n protected async extractBoxes(\n outputTensor: tf.Tensor4D,\n inputBlobDimensions: Dimensions,\n scoreThreshold?: number,\n ) {\n const { width, height } = inputBlobDimensions;\n const inputSize = Math.max(width, height);\n const correctionFactorX = inputSize / width;\n const correctionFactorY = inputSize / height;\n\n const numCells = outputTensor.shape[1];\n const numBoxes = this.config.anchors.length;\n\n const [boxesTensor, scoresTensor, classScoresTensor] = tf.tidy(() => {\n const reshaped = outputTensor.reshape([numCells, numCells, numBoxes, this.boxEncodingSize]);\n\n const boxes = reshaped.slice([0, 0, 0, 0], [numCells, numCells, numBoxes, 4]);\n const scores = reshaped.slice([0, 0, 0, 4], [numCells, numCells, numBoxes, 1]);\n const classScores = this.withClassScores\n ? tf.softmax(reshaped.slice([0, 0, 0, 5], [numCells, numCells, numBoxes, this.config.classes.length]), 3)\n : tf.scalar(0);\n return [boxes, scores, classScores];\n });\n\n const results = [] as any;\n\n const scoresData = await scoresTensor.array();\n const boxesData = await boxesTensor.array();\n for (let row = 0; row < numCells; row++) {\n for (let col = 0; col < numCells; col++) {\n for (let anchor = 0; anchor < numBoxes; anchor++) {\n const score = sigmoid(scoresData[row][col][anchor][0]);\n if (!scoreThreshold || score > scoreThreshold) {\n const ctX = ((col + sigmoid(boxesData[row][col][anchor][0])) / numCells) * correctionFactorX;\n const ctY = ((row + sigmoid(boxesData[row][col][anchor][1])) / numCells) * correctionFactorY;\n const widthLocal = ((Math.exp(boxesData[row][col][anchor][2]) * this.config.anchors[anchor].x) / numCells) * correctionFactorX;\n const heightLocal = ((Math.exp(boxesData[row][col][anchor][3]) * this.config.anchors[anchor].y) / numCells) * correctionFactorY;\n\n const x = (ctX - (widthLocal / 2));\n const y = (ctY - (heightLocal / 2));\n\n const pos = { row, col, anchor };\n const { classScore, label } = this.withClassScores\n ? await this.extractPredictedClass(classScoresTensor as tf.Tensor4D, pos)\n : { classScore: 1, label: 0 };\n\n results.push({\n box: new BoundingBox(x, y, x + widthLocal, y + heightLocal),\n score,\n classScore: score * classScore,\n label,\n ...pos,\n });\n }\n }\n }\n }\n\n boxesTensor.dispose();\n scoresTensor.dispose();\n classScoresTensor.dispose();\n\n return results;\n }\n\n private async extractPredictedClass(classesTensor: tf.Tensor4D, pos: { row: number, col: number, anchor: number }) {\n const { row, col, anchor } = pos;\n const classesData = await classesTensor.array();\n return Array(this.config.classes.length).fill(0)\n .map((_, i) => classesData[row][col][anchor][i])\n .map((classScore, label) => ({\n classScore,\n label,\n }))\n .reduce((max, curr) => (max.classScore > curr.classScore ? max : curr));\n }\n}\n", "import { Point } from '../classes/Point';\n\nexport type TinyYolov2Config = {\n withSeparableConvs: boolean\n iouThreshold: number\n anchors: Point[]\n classes: string[]\n meanRgb?: [number, number, number]\n withClassScores?: boolean,\n filterSizes?: number[]\n isFirstLayerConv2d?: boolean\n}\n\nconst isNumber = (arg: any) => typeof arg === 'number';\n\nexport function validateConfig(config: any) {\n if (!config) {\n throw new Error(`invalid config: ${config}`);\n }\n\n if (typeof config.withSeparableConvs !== 'boolean') {\n throw new Error(`config.withSeparableConvs has to be a boolean, have: ${config.withSeparableConvs}`);\n }\n\n if (!isNumber(config.iouThreshold) || config.iouThreshold < 0 || config.iouThreshold > 1.0) {\n throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${config.iouThreshold}`);\n }\n\n if (\n !Array.isArray(config.classes)\n || !config.classes.length\n || !config.classes.every((c: any) => typeof c === 'string')\n ) {\n throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(config.classes)}`);\n }\n\n if (\n !Array.isArray(config.anchors)\n || !config.anchors.length\n || !config.anchors.map((a: any) => a || {}).every((a: any) => isNumber(a.x) && isNumber(a.y))\n ) {\n throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(config.anchors)}`);\n }\n\n if (config.meanRgb && (\n !Array.isArray(config.meanRgb)\n || config.meanRgb.length !== 3\n || !config.meanRgb.every(isNumber)\n )) {\n throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(config.meanRgb)}`);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { leaky } from './leaky';\nimport { ConvWithBatchNorm } from './types';\n\nexport function convWithBatchNorm(x: tf.Tensor4D, params: ConvWithBatchNorm): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.conv2d(out, params.conv.filters, [1, 1], 'valid');\n out = tf.sub(out, params.bn.sub);\n out = tf.mul(out, params.bn.truediv);\n out = tf.add(out, params.conv.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nexport function leaky(x: tf.Tensor4D): tf.Tensor4D {\n return tf.tidy(() => {\n const min = tf.mul(x, tf.scalar(0.10000000149011612));\n return tf.add(tf.relu(tf.sub(x, min)), min);\n // return tf.maximum(x, min)\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { SeparableConvParams } from '../common/types';\nimport { leaky } from './leaky';\n\nexport function depthwiseSeparableConv(x: tf.Tensor4D, params: SeparableConvParams): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.separableConv2d(out, params.depthwise_filter, params.pointwise_filter, [1, 1], 'valid');\n out = tf.add(out, params.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { extractConvParamsFactory } from '../common/index';\nimport { extractSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightsFactory } from '../common/extractWeightsFactory';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n\n function extractBatchNormParams(size: number, mappedPrefix: string): BatchNorm {\n const sub = tf.tensor1d(extractWeights(size));\n const truediv = tf.tensor1d(extractWeights(size));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/sub` },\n { paramPath: `${mappedPrefix}/truediv` },\n );\n\n return { sub, truediv };\n }\n\n function extractConvWithBatchNormParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv`);\n const bn = extractBatchNormParams(channelsOut, `${mappedPrefix}/bn`);\n\n return { conv, bn };\n }\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParams(\n weights: Float32Array,\n config: TinyYolov2Config,\n boxEncodingSize: number,\n filterSizes: number[],\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n\n const conv0 = config.isFirstLayerConv2d\n ? extractConvParams(s0, s1, 3, 'conv0')\n : extractSeparableConvParams(s0, s1, 'conv0');\n const conv1 = extractSeparableConvParams(s1, s2, 'conv1');\n const conv2 = extractSeparableConvParams(s2, s3, 'conv2');\n const conv3 = extractSeparableConvParams(s3, s4, 'conv3');\n const conv4 = extractSeparableConvParams(s4, s5, 'conv4');\n const conv5 = extractSeparableConvParams(s5, s6, 'conv5');\n const conv6 = s7 ? extractSeparableConvParams(s6, s7, 'conv6') : undefined;\n const conv7 = s8 ? extractSeparableConvParams(s7, s8, 'conv7') : undefined;\n const conv8 = extractConvParams(s8 || s7 || s6, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n } else {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n const conv0 = extractConvWithBatchNormParams(s0, s1, 'conv0');\n const conv1 = extractConvWithBatchNormParams(s1, s2, 'conv1');\n const conv2 = extractConvWithBatchNormParams(s2, s3, 'conv2');\n const conv3 = extractConvWithBatchNormParams(s3, s4, 'conv3');\n const conv4 = extractConvWithBatchNormParams(s4, s5, 'conv4');\n const conv5 = extractConvWithBatchNormParams(s5, s6, 'conv5');\n const conv6 = extractConvWithBatchNormParams(s6, s7, 'conv6');\n const conv7 = extractConvWithBatchNormParams(s7, s8, 'conv7');\n const conv8 = extractConvParams(s8, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n }\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams } from '../common/index';\nimport { disposeUnusedWeightTensors } from '../common/disposeUnusedWeightTensors';\nimport { loadSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightEntryFactory } from '../common/extractWeightEntryFactory';\nimport { ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractBatchNormParams(prefix: string): BatchNorm {\n const sub = extractWeightEntry(`${prefix}/sub`, 1);\n const truediv = extractWeightEntry(`${prefix}/truediv`, 1);\n return { sub, truediv };\n }\n\n function extractConvParams(prefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { filters, bias };\n }\n\n function extractConvWithBatchNormParams(prefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(`${prefix}/conv`);\n const bn = extractBatchNormParams(`${prefix}/bn`);\n return { conv, bn };\n }\n\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n config: TinyYolov2Config,\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n // eslint-disable-next-line no-mixed-operators\n const numFilters = (config.filterSizes && config.filterSizes.length || 9);\n params = {\n conv0: config.isFirstLayerConv2d ? extractConvParams('conv0') : extractSeparableConvParams('conv0'),\n conv1: extractSeparableConvParams('conv1'),\n conv2: extractSeparableConvParams('conv2'),\n conv3: extractSeparableConvParams('conv3'),\n conv4: extractSeparableConvParams('conv4'),\n conv5: extractSeparableConvParams('conv5'),\n conv6: numFilters > 7 ? extractSeparableConvParams('conv6') : undefined,\n conv7: numFilters > 8 ? extractSeparableConvParams('conv7') : undefined,\n conv8: extractConvParams('conv8'),\n };\n } else {\n params = {\n conv0: extractConvWithBatchNormParams('conv0'),\n conv1: extractConvWithBatchNormParams('conv1'),\n conv2: extractConvWithBatchNormParams('conv2'),\n conv3: extractConvWithBatchNormParams('conv3'),\n conv4: extractConvWithBatchNormParams('conv4'),\n conv5: extractConvWithBatchNormParams('conv5'),\n conv6: extractConvWithBatchNormParams('conv6'),\n conv7: extractConvWithBatchNormParams('conv7'),\n conv8: extractConvParams('conv8'),\n };\n }\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "export interface ITinyYolov2Options {\n inputSize?: number\n scoreThreshold?: number\n}\n\nexport class TinyYolov2Options {\n protected _name: string = 'TinyYolov2Options'\n\n private _inputSize: number\n\n private _scoreThreshold: number\n\n constructor({ inputSize, scoreThreshold }: ITinyYolov2Options = {}) {\n this._inputSize = inputSize || 416;\n this._scoreThreshold = scoreThreshold || 0.5;\n\n if (typeof this._inputSize !== 'number' || this._inputSize % 32 !== 0) {\n throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);\n }\n\n if (typeof this._scoreThreshold !== 'number' || this._scoreThreshold <= 0 || this._scoreThreshold >= 1) {\n throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`);\n }\n }\n\n get inputSize(): number { return this._inputSize; }\n\n get scoreThreshold(): number { return this._scoreThreshold; }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/types';\nimport { TNetInput } from '../dom/types';\nimport {\n BOX_ANCHORS,\n BOX_ANCHORS_SEPARABLE,\n DEFAULT_MODEL_NAME,\n DEFAULT_MODEL_NAME_SEPARABLE_CONV,\n IOU_THRESHOLD,\n MEAN_RGB_SEPARABLE,\n} from './const';\nimport { TinyYolov2Base } from './TinyYolov2Base';\nimport { ITinyYolov2Options } from './TinyYolov2Options';\nimport { TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2 extends TinyYolov2Base {\n constructor(withSeparableConvs: boolean = true) {\n const config = {\n withSeparableConvs,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n ...(withSeparableConvs\n ? {\n anchors: BOX_ANCHORS_SEPARABLE,\n meanRgb: MEAN_RGB_SEPARABLE,\n }\n : {\n anchors: BOX_ANCHORS,\n withClassScores: true,\n }),\n };\n\n super(config);\n }\n\n public get withSeparableConvs(): boolean {\n return this.config.withSeparableConvs;\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME;\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { TinyYolov2 } from './TinyYolov2';\n\nexport * from './TinyYolov2Options';\n\nexport * from './config';\nexport * from './types';\n\nexport { TinyYolov2 };\n\nexport function createTinyYolov2(weights: Float32Array, withSeparableConvs: boolean = true) {\n const net = new TinyYolov2(withSeparableConvs);\n net.extractWeights(weights);\n return net;\n}\n", "import { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\n\nexport interface ITinyFaceDetectorOptions extends ITinyYolov2Options {}\n\nexport class TinyFaceDetectorOptions extends TinyYolov2Options {\n protected _name: string = 'TinyFaceDetectorOptions'\n}\n", "export class ComposableTask {\n public async then(\n // eslint-disable-next-line no-unused-vars\n onfulfilled: (value: T) => T | PromiseLike,\n ): Promise {\n return onfulfilled(await this.run());\n }\n\n public async run(): Promise {\n throw new Error('ComposableTask - run is not implemented');\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm';\n\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class DetectFaceLandmarksTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected useTinyLandmarkNet: boolean,\n ) {\n super();\n }\n\n protected get landmarkNet(): FaceLandmark68Net | FaceLandmark68TinyNet {\n return this.useTinyLandmarkNet\n ? nets.faceLandmark68TinyNet\n : nets.faceLandmark68Net;\n }\n}\n\nexport class DetectAllFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n const detections = parentResults.map((res) => res.detection);\n\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, detections)\n : await extractFaces(this.input, detections);\n\n const faceLandmarksByFace = await Promise.all(faces.map(\n (face) => this.landmarkNet.detectLandmarks(face),\n )) as FaceLandmarks68[];\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return parentResults.map((parentResult, i) => extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i]));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class DetectSingleFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { detection } = parentResult;\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, [detection])\n : await extractFaces(this.input, [detection]);\n\n const landmarks = await this.landmarkNet.detectLandmarks(faces[0]) as FaceLandmarks68;\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return extendWithFaceLandmarks(parentResult, landmarks);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\n\nexport async function extractAllFacesAndComputeResults, TResult>(\n parentResults: TSource[],\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResults: (faces: Array) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment: (parentResult: WithFaceLandmarks) => FaceDetection = ({ alignedRect }) => alignedRect,\n) {\n const faceBoxes = parentResults.map((parentResult) => (isWithFaceLandmarks(parentResult)\n ? getRectForAlignment(parentResult)\n : parentResult.detection));\n const faces: Array = extractedFaces || (\n input instanceof tf.Tensor\n ? await extractFaceTensors(input, faceBoxes)\n : await extractFaces(input, faceBoxes)\n );\n\n const results = await computeResults(faces);\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return results;\n}\n\nexport async function extractSingleFaceAndComputeResult, TResult>(\n parentResult: TSource,\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResult: (face: HTMLCanvasElement | tf.Tensor3D) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment?: (parentResultLocal: WithFaceLandmarks) => FaceDetection,\n) {\n return extractAllFacesAndComputeResults(\n [parentResult],\n input,\n async (faces) => computeResult(faces[0]),\n extractedFaces,\n getRectForAlignment,\n );\n}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB: [number, number, number] = [117.001, 114.697, 97.404];\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/index';\nimport { TNetInput } from '../dom/index';\nimport { ITinyYolov2Options } from '../tinyYolov2/index';\nimport { TinyYolov2Base } from '../tinyYolov2/TinyYolov2Base';\nimport { TinyYolov2NetParams } from '../tinyYolov2/types';\nimport { BOX_ANCHORS, IOU_THRESHOLD, MEAN_RGB } from './const';\n\nexport class TinyFaceDetector extends TinyYolov2Base {\n constructor() {\n const config = {\n withSeparableConvs: true,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n anchors: BOX_ANCHORS,\n meanRgb: MEAN_RGB,\n isFirstLayerConv2d: true,\n filterSizes: [3, 16, 32, 64, 128, 256, 512],\n };\n\n super(config);\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_face_detector_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { AgeGenderNet } from '../ageGenderNet/AgeGenderNet';\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet';\nimport { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { ITinyYolov2Options, TinyYolov2 } from '../tinyYolov2/index';\n\nexport const nets = {\n ssdMobilenetv1: new SsdMobilenetv1(),\n tinyFaceDetector: new TinyFaceDetector(),\n tinyYolov2: new TinyYolov2(),\n faceLandmark68Net: new FaceLandmark68Net(),\n faceLandmark68TinyNet: new FaceLandmark68TinyNet(),\n faceRecognitionNet: new FaceRecognitionNet(),\n faceExpressionNet: new FaceExpressionNet(),\n ageGenderNet: new AgeGenderNet(),\n};\n\n/**\n * Attempts to detect all faces in an image using SSD Mobilenetv1 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const ssdMobilenetv1 = (input: TNetInput, options: SsdMobilenetv1Options): Promise => nets.ssdMobilenetv1.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Face Detector.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyFaceDetector = (input: TNetInput, options: TinyFaceDetectorOptions): Promise => nets.tinyFaceDetector.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Yolov2 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyYolov2Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyYolov2 = (input: TNetInput, options: ITinyYolov2Options): Promise => nets.tinyYolov2.locateFaces(input, options);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarks = (input: TNetInput): Promise => nets.faceLandmark68Net.detectLandmarks(input);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image\n * using a tinier version of the 68 point face landmark model, which is slightly\n * faster at inference, but also slightly less accurate.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarksTiny = (input: TNetInput): Promise => nets.faceLandmark68TinyNet.detectLandmarks(input);\n\n/**\n * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image,\n * which uniquely represents the features of that persons face. The computed face descriptor can\n * be used to measure the similarity between faces, by computing the euclidean distance of two\n * face descriptors.\n *\n * @param inputs The face image extracted from the aligned bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Face descriptor with 128 entries or array thereof in case of batch input.\n */\nexport const computeFaceDescriptor = (input: TNetInput): Promise => nets.faceRecognitionNet.computeFaceDescriptor(input);\n\n/**\n * Recognizes the facial expressions from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Facial expressions with corresponding probabilities or array thereof in case of batch input.\n */\nexport const recognizeFaceExpressions = (input: TNetInput): Promise => nets.faceExpressionNet.predictExpressions(input);\n\n/**\n * Predicts age and gender from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Predictions with age, gender and gender probability or array thereof in case of batch input.\n */\nexport const predictAgeAndGender = (input: TNetInput): Promise => nets.ageGenderNet.predictAgeAndGender(input);\n\nexport const loadSsdMobilenetv1Model = (url: string) => nets.ssdMobilenetv1.load(url);\nexport const loadTinyFaceDetectorModel = (url: string) => nets.tinyFaceDetector.load(url);\nexport const loadTinyYolov2Model = (url: string) => nets.tinyYolov2.load(url);\nexport const loadFaceLandmarkModel = (url: string) => nets.faceLandmark68Net.load(url);\nexport const loadFaceLandmarkTinyModel = (url: string) => nets.faceLandmark68TinyNet.load(url);\nexport const loadFaceRecognitionModel = (url: string) => nets.faceRecognitionNet.load(url);\nexport const loadFaceExpressionModel = (url: string) => nets.faceExpressionNet.load(url);\nexport const loadAgeGenderModel = (url: string) => nets.ageGenderNet.load(url);\n\n// backward compatibility\nexport const loadFaceDetectionModel = loadSsdMobilenetv1Model;\nexport const locateFaces = ssdMobilenetv1;\nexport const detectLandmarks = detectFaceLandmarks;\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm';\n\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderTask,\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\n\nexport class PredictFaceExpressionsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const faceExpressionsByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map(\n (parentResult, i) => extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]),\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const faceExpressions = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithFaceExpressions(parentResult, faceExpressions);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictAllFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm';\n\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { TNetInput } from '../dom/index';\nimport { extendWithAge, WithAge } from '../factories/WithAge';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { extendWithGender, WithGender } from '../factories/WithGender';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllFaceExpressionsTask,\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class PredictAgeAndGenderTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase>[], TSource[]> {\n public async run(): Promise>[]> {\n const parentResults = await this.parentTask;\n\n const ageAndGenderByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map((parentResult, i) => {\n const { age, gender, genderProbability } = ageAndGenderByFace[i];\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n });\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase> | undefined, TSource | undefined> {\n public async run(): Promise> | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { age, gender, genderProbability } = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictAllAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDescriptor, WithFaceDescriptor } from '../factories/WithFaceDescriptor';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class ComputeFaceDescriptorsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n ) {\n super();\n }\n}\n\nexport class ComputeAllFaceDescriptorsTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const descriptors = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n (faces) => Promise.all(faces.map((face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise)),\n null,\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return descriptors.map((descriptor, i) => extendWithFaceDescriptor(parentResults[i], descriptor));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n\nexport class ComputeSingleFaceDescriptorTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n const descriptor = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise,\n null,\n // eslint-disable-next-line no-shadow\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return extendWithFaceDescriptor(parentResult, descriptor);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { TinyYolov2Options } from '../tinyYolov2/index';\nimport { ComposableTask } from './ComposableTask';\nimport { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';\nimport { nets } from './nets';\nimport { PredictAllAgeAndGenderTask, PredictSingleAgeAndGenderTask } from './PredictAgeAndGenderTask';\nimport { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionsTask } from './PredictFaceExpressionsTask';\nimport { FaceDetectionOptions } from './types';\n\nexport class DetectFacesTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n ) {\n super();\n }\n}\n\nexport class DetectAllFacesTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const { input, options } = this;\n\n // eslint-disable-next-line no-nested-ternary\n const faceDetectionFunction = options instanceof TinyFaceDetectorOptions\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyFaceDetector.locateFaces(input, options)\n : (\n // eslint-disable-next-line no-nested-ternary\n options instanceof SsdMobilenetv1Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.ssdMobilenetv1.locateFaces(input, options)\n : (\n options instanceof TinyYolov2Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyYolov2.locateFaces(input, options)\n : null\n )\n );\n\n if (!faceDetectionFunction) {\n throw new Error('detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options');\n }\n\n return faceDetectionFunction(input);\n }\n\n private runAndExtendWithFaceDetections(): Promise[]> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise[]>(async (resolve) => {\n const detections = await this.run();\n resolve(detections.map((detection) => extendWithFaceDetection({}, detection)));\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectAllFaceLandmarksTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n}\n\nexport class DetectSingleFaceTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const faceDetections = await new DetectAllFacesTask(this.input, this.options);\n let faceDetectionWithHighestScore = faceDetections[0];\n faceDetections.forEach((faceDetection) => {\n if (faceDetection.score > faceDetectionWithHighestScore.score) {\n faceDetectionWithHighestScore = faceDetection;\n }\n });\n return faceDetectionWithHighestScore;\n }\n\n private runAndExtendWithFaceDetection(): Promise | undefined> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise | undefined>(async (resolve) => {\n const detection = await this.run();\n resolve(detection ? extendWithFaceDetection<{}>({}, detection) : undefined);\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectSingleFaceLandmarksTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n}\n", "import { TNetInput } from '../dom/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { DetectAllFacesTask, DetectSingleFaceTask } from './DetectFacesTasks';\nimport { FaceDetectionOptions } from './types';\n\nexport function detectSingleFace(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectSingleFaceTask {\n return new DetectSingleFaceTask(input, options);\n}\n\nexport function detectAllFaces(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectAllFacesTask {\n return new DetectAllFacesTask(input, options);\n}\n", "import { TNetInput } from '../dom/index';\nimport { WithFaceDescriptor, WithFaceDetection, WithFaceLandmarks } from '../factories/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/index';\nimport { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\nimport { detectAllFaces } from './detectFaces';\n\n// export allFaces API for backward compatibility\n\nexport async function allFacesSsdMobilenetv1(\n input: TNetInput,\n minConfidence?: number,\n): Promise>>[]> {\n return detectAllFaces(input, new SsdMobilenetv1Options(minConfidence ? { minConfidence } : {}))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport async function allFacesTinyYolov2(\n input: TNetInput,\n forwardParams: ITinyYolov2Options = {},\n): Promise>>[]> {\n return detectAllFaces(input, new TinyYolov2Options(forwardParams))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport const allFaces = allFacesSsdMobilenetv1;\n", "export function euclideanDistance(arr1: number[] | Float32Array, arr2: number[] | Float32Array) {\n if (arr1.length !== arr2.length)\n throw new Error('euclideanDistance: arr1.length !== arr2.length')\n\n const desc1 = Array.from(arr1)\n const desc2 = Array.from(arr2)\n\n return Math.sqrt(\n desc1\n .map((val, i) => val - desc2[i])\n .reduce((res, diff) => res + Math.pow(diff, 2), 0)\n )\n}", "import { FaceMatch } from '../classes/FaceMatch';\nimport { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors';\nimport { euclideanDistance } from '../euclideanDistance';\nimport { WithFaceDescriptor } from '../factories/index';\n\nexport class FaceMatcher {\n private _labeledDescriptors: LabeledFaceDescriptors[]\n\n private _distanceThreshold: number\n\n constructor(\n inputs: LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>,\n distanceThreshold: number = 0.6,\n ) {\n this._distanceThreshold = distanceThreshold;\n\n const inputArray = Array.isArray(inputs) ? inputs : [inputs];\n\n if (!inputArray.length) {\n throw new Error('FaceRecognizer.constructor - expected atleast one input');\n }\n\n let count = 1;\n const createUniqueLabel = () => `person ${count++}`;\n\n this._labeledDescriptors = inputArray.map((desc) => {\n if (desc instanceof LabeledFaceDescriptors) {\n return desc;\n }\n\n if (desc instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc]);\n }\n\n if (desc.descriptor && desc.descriptor instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]);\n }\n\n throw new Error('FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>');\n });\n }\n\n public get labeledDescriptors(): LabeledFaceDescriptors[] { return this._labeledDescriptors; }\n\n public get distanceThreshold(): number { return this._distanceThreshold; }\n\n public computeMeanDistance(queryDescriptor: Float32Array, descriptors: Float32Array[]): number {\n return descriptors\n .map((d) => euclideanDistance(d, queryDescriptor))\n .reduce((d1, d2) => d1 + d2, 0)\n / (descriptors.length || 1);\n }\n\n public matchDescriptor(queryDescriptor: Float32Array): FaceMatch {\n return this.labeledDescriptors\n .map(({ descriptors, label }) => new FaceMatch(\n label,\n this.computeMeanDistance(queryDescriptor, descriptors),\n ))\n .reduce((best, curr) => (best.distance < curr.distance ? best : curr));\n }\n\n public findBestMatch(queryDescriptor: Float32Array): FaceMatch {\n const bestMatch = this.matchDescriptor(queryDescriptor);\n return bestMatch.distance < this.distanceThreshold\n ? bestMatch\n : new FaceMatch('unknown', bestMatch.distance);\n }\n\n public toJSON(): any {\n return {\n distanceThreshold: this.distanceThreshold,\n labeledDescriptors: this.labeledDescriptors.map((ld) => ld.toJSON()),\n };\n }\n\n public static fromJSON(json: any): FaceMatcher {\n const labeledDescriptors = json.labeledDescriptors\n .map((ld: any) => LabeledFaceDescriptors.fromJSON(ld));\n return new FaceMatcher(labeledDescriptors, json.distanceThreshold);\n }\n}\n", "import { TinyFaceDetector } from './TinyFaceDetector';\n\nexport * from './TinyFaceDetector';\nexport * from './TinyFaceDetectorOptions';\n\nexport function createTinyFaceDetector(weights: Float32Array) {\n const net = new TinyFaceDetector();\n net.extractWeights(weights);\n return net;\n}\n", "import { Dimensions, IDimensions } from './classes/index';\nimport { FaceDetection } from './classes/FaceDetection';\nimport { FaceLandmarks } from './classes/FaceLandmarks';\nimport { extendWithFaceDetection, isWithFaceDetection } from './factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, isWithFaceLandmarks } from './factories/WithFaceLandmarks';\n\nexport function resizeResults(results: T, dimensions: IDimensions): T {\n\n const { width, height } = new Dimensions(dimensions.width, dimensions.height)\n\n if (width <= 0 || height <= 0) {\n throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({ width, height })}`)\n }\n\n if (Array.isArray(results)) {\n // return results.map(obj => resizeResults(obj, { width, height })) as any as T\n return (results as Array).map(obj => resizeResults(obj, { width, height } as IDimensions)) as any as T\n }\n\n if (isWithFaceLandmarks(results)) {\n const resizedDetection = results.detection.forSize(width, height)\n const resizedLandmarks = results.unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height)\n return extendWithFaceLandmarks(extendWithFaceDetection(results, resizedDetection), resizedLandmarks)\n }\n\n if (isWithFaceDetection(results)) {\n return extendWithFaceDetection(results, results.detection.forSize(width, height))\n }\n\n if (results instanceof FaceLandmarks || results instanceof FaceDetection) {\n return (results as any).forSize(width, height)\n }\n\n return results\n}"], + "mappings": "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", "names": [] } diff --git a/dist/face-api.esm-nobundle.json b/dist/face-api.esm-nobundle.json index b219727..7be6606 100644 --- a/dist/face-api.esm-nobundle.json +++ b/dist/face-api.esm-nobundle.json @@ -17,7 +17,7 @@ ] }, "src/utils/index.ts": { - "bytes": 1845, + "bytes": 1842, "imports": [ { "path": "dist/tfjs.esm.js" @@ -93,7 +93,7 @@ ] }, "src/ops/normalize.ts": { - "bytes": 486, + "bytes": 483, "imports": [ { "path": "dist/tfjs.esm.js" @@ -101,7 +101,7 @@ ] }, "src/ops/padToSquare.ts": { - "bytes": 1687, + "bytes": 1684, "imports": [ { "path": "dist/tfjs.esm.js" @@ -451,7 +451,7 @@ ] }, "src/dom/imageTensorToCanvas.ts": { - "bytes": 618, + "bytes": 615, "imports": [ { "path": "dist/tfjs.esm.js" @@ -490,7 +490,7 @@ ] }, "src/dom/NetInput.ts": { - "bytes": 5511, + "bytes": 5508, "imports": [ { "path": "dist/tfjs.esm.js" @@ -556,7 +556,7 @@ ] }, "src/dom/extractFaceTensors.ts": { - "bytes": 1733, + "bytes": 1730, "imports": [ { "path": "dist/tfjs.esm.js" @@ -609,7 +609,7 @@ "imports": [] }, "src/dom/loadWeightMap.ts": { - "bytes": 555, + "bytes": 552, "imports": [ { "path": "dist/tfjs.esm.js" @@ -631,7 +631,7 @@ ] }, "src/dom/types.ts": { - "bytes": 386, + "bytes": 383, "imports": [] }, "src/dom/index.ts": { @@ -703,7 +703,7 @@ ] }, "src/NeuralNetwork.ts": { - "bytes": 5113, + "bytes": 5110, "imports": [ { "path": "dist/tfjs.esm.js" @@ -720,7 +720,7 @@ ] }, "src/common/depthwiseSeparableConv.ts": { - "bytes": 417, + "bytes": 414, "imports": [ { "path": "dist/tfjs.esm.js" @@ -728,7 +728,7 @@ ] }, "src/faceFeatureExtractor/denseBlock.ts": { - "bytes": 2041, + "bytes": 2038, "imports": [ { "path": "dist/tfjs.esm.js" @@ -739,7 +739,7 @@ ] }, "src/common/convLayer.ts": { - "bytes": 431, + "bytes": 428, "imports": [ { "path": "dist/tfjs.esm.js" @@ -751,7 +751,7 @@ "imports": [] }, "src/common/extractConvParamsFactory.ts": { - "bytes": 769, + "bytes": 766, "imports": [ { "path": "dist/tfjs.esm.js" @@ -759,7 +759,7 @@ ] }, "src/common/extractFCParamsFactory.ts": { - "bytes": 714, + "bytes": 711, "imports": [ { "path": "dist/tfjs.esm.js" @@ -767,11 +767,11 @@ ] }, "src/common/types.ts": { - "bytes": 800, + "bytes": 797, "imports": [] }, "src/common/extractSeparableConvParamsFactory.ts": { - "bytes": 1536, + "bytes": 1533, "imports": [ { "path": "dist/tfjs.esm.js" @@ -848,7 +848,7 @@ ] }, "src/common/loadConvParamsFactory.ts": { - "bytes": 469, + "bytes": 466, "imports": [] }, "src/faceFeatureExtractor/loadParamsFactory.ts": { @@ -863,7 +863,7 @@ ] }, "src/faceFeatureExtractor/extractParamsFromWeigthMap.ts": { - "bytes": 841, + "bytes": 838, "imports": [ { "path": "src/common/index.ts" @@ -874,7 +874,7 @@ ] }, "src/faceFeatureExtractor/FaceFeatureExtractor.ts": { - "bytes": 1809, + "bytes": 1806, "imports": [ { "path": "dist/tfjs.esm.js" @@ -900,7 +900,7 @@ ] }, "src/common/fullyConnectedLayer.ts": { - "bytes": 266, + "bytes": 263, "imports": [ { "path": "dist/tfjs.esm.js" @@ -916,7 +916,7 @@ ] }, "src/faceProcessor/extractParamsFromWeigthMap.ts": { - "bytes": 826, + "bytes": 823, "imports": [ { "path": "src/common/index.ts" @@ -924,11 +924,11 @@ ] }, "src/faceProcessor/util.ts": { - "bytes": 424, + "bytes": 421, "imports": [] }, "src/faceProcessor/FaceProcessor.ts": { - "bytes": 3037, + "bytes": 3034, "imports": [ { "path": "dist/tfjs.esm.js" @@ -958,7 +958,7 @@ "imports": [] }, "src/faceExpressionNet/FaceExpressionNet.ts": { - "bytes": 1667, + "bytes": 1664, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1092,7 +1092,7 @@ ] }, "src/xception/extractParamsFromWeigthMap.ts": { - "bytes": 3133, + "bytes": 3130, "imports": [ { "path": "src/common/index.ts" @@ -1106,7 +1106,7 @@ ] }, "src/xception/TinyXception.ts": { - "bytes": 3151, + "bytes": 3148, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1143,7 +1143,7 @@ ] }, "src/ageGenderNet/extractParamsFromWeigthMap.ts": { - "bytes": 894, + "bytes": 891, "imports": [ { "path": "src/common/index.ts" @@ -1151,11 +1151,11 @@ ] }, "src/ageGenderNet/types.ts": { - "bytes": 528, + "bytes": 525, "imports": [] }, "src/ageGenderNet/AgeGenderNet.ts": { - "bytes": 4272, + "bytes": 4269, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1198,7 +1198,7 @@ ] }, "src/faceLandmarkNet/FaceLandmark68NetBase.ts": { - "bytes": 3720, + "bytes": 3717, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1232,7 +1232,7 @@ ] }, "src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts": { - "bytes": 805, + "bytes": 802, "imports": [ { "path": "src/common/index.ts" @@ -1254,7 +1254,7 @@ ] }, "src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts": { - "bytes": 1819, + "bytes": 1816, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1305,7 +1305,7 @@ ] }, "src/faceRecognitionNet/scaleLayer.ts": { - "bytes": 232, + "bytes": 229, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1313,7 +1313,7 @@ ] }, "src/faceRecognitionNet/convLayer.ts": { - "bytes": 853, + "bytes": 850, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1324,7 +1324,7 @@ ] }, "src/faceRecognitionNet/extractParams.ts": { - "bytes": 4910, + "bytes": 4907, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1338,7 +1338,7 @@ ] }, "src/faceRecognitionNet/extractParamsFromWeigthMap.ts": { - "bytes": 3104, + "bytes": 3101, "imports": [ { "path": "src/common/index.ts" @@ -1349,7 +1349,7 @@ ] }, "src/faceRecognitionNet/residualLayer.ts": { - "bytes": 1345, + "bytes": 1342, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1360,7 +1360,7 @@ ] }, "src/faceRecognitionNet/FaceRecognitionNet.ts": { - "bytes": 2984, + "bytes": 2981, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1442,7 +1442,7 @@ ] }, "src/ssdMobilenetv1/extractParams.ts": { - "bytes": 8342, + "bytes": 8339, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1453,7 +1453,7 @@ ] }, "src/ssdMobilenetv1/extractParamsFromWeigthMap.ts": { - "bytes": 5785, + "bytes": 5782, "imports": [ { "path": "src/common/index.ts" @@ -1464,7 +1464,7 @@ ] }, "src/ssdMobilenetv1/pointwiseConvLayer.ts": { - "bytes": 394, + "bytes": 391, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1472,7 +1472,7 @@ ] }, "src/ssdMobilenetv1/mobileNetV1.ts": { - "bytes": 1814, + "bytes": 1811, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1483,11 +1483,11 @@ ] }, "src/ssdMobilenetv1/nonMaxSuppression.ts": { - "bytes": 2190, + "bytes": 2187, "imports": [] }, "src/ssdMobilenetv1/outputLayer.ts": { - "bytes": 2190, + "bytes": 2187, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1495,7 +1495,7 @@ ] }, "src/ssdMobilenetv1/boxPredictionLayer.ts": { - "bytes": 620, + "bytes": 617, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1506,7 +1506,7 @@ ] }, "src/ssdMobilenetv1/predictionLayer.ts": { - "bytes": 2058, + "bytes": 2055, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1524,7 +1524,7 @@ "imports": [] }, "src/ssdMobilenetv1/SsdMobilenetv1.ts": { - "bytes": 3829, + "bytes": 3826, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1591,7 +1591,7 @@ "imports": [] }, "src/tinyYolov2/leaky.ts": { - "bytes": 274, + "bytes": 271, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1599,7 +1599,7 @@ ] }, "src/tinyYolov2/convWithBatchNorm.ts": { - "bytes": 535, + "bytes": 532, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1610,7 +1610,7 @@ ] }, "src/tinyYolov2/depthwiseSeparableConv.ts": { - "bytes": 505, + "bytes": 502, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1621,7 +1621,7 @@ ] }, "src/tinyYolov2/extractParams.ts": { - "bytes": 3921, + "bytes": 3918, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1638,7 +1638,7 @@ ] }, "src/tinyYolov2/extractParamsFromWeigthMap.ts": { - "bytes": 3287, + "bytes": 3284, "imports": [ { "path": "src/common/disposeUnusedWeightTensors.ts" @@ -1656,7 +1656,7 @@ "imports": [] }, "src/tinyYolov2/TinyYolov2Base.ts": { - "bytes": 9703, + "bytes": 9700, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1709,7 +1709,7 @@ ] }, "src/tinyYolov2/TinyYolov2.ts": { - "bytes": 1804, + "bytes": 1801, "imports": [ { "path": "src/classes/index.ts" @@ -1723,7 +1723,7 @@ ] }, "src/tinyYolov2/types.ts": { - "bytes": 955, + "bytes": 952, "imports": [] }, "src/tinyYolov2/index.ts": { @@ -1756,7 +1756,7 @@ "imports": [] }, "src/globalApi/extractFacesAndComputeResults.ts": { - "bytes": 2040, + "bytes": 2037, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1778,7 +1778,7 @@ ] }, "src/tinyFaceDetector/TinyFaceDetector.ts": { - "bytes": 1473, + "bytes": 1470, "imports": [ { "path": "src/classes/index.ts" @@ -1821,7 +1821,7 @@ ] }, "src/globalApi/PredictFaceExpressionsTask.ts": { - "bytes": 3830, + "bytes": 3827, "imports": [ { "path": "src/factories/WithFaceExpressions.ts" @@ -1844,7 +1844,7 @@ ] }, "src/globalApi/PredictAgeAndGenderTask.ts": { - "bytes": 4011, + "bytes": 4008, "imports": [ { "path": "src/factories/WithAge.ts" @@ -1893,7 +1893,7 @@ ] }, "src/globalApi/DetectFaceLandmarksTasks.ts": { - "bytes": 4005, + "bytes": 4002, "imports": [ { "path": "dist/tfjs.esm.js" @@ -2067,7 +2067,7 @@ ] }, "src/index.ts": { - "bytes": 1027, + "bytes": 1024, "imports": [ { "path": "dist/tfjs.esm.js" @@ -2136,7 +2136,7 @@ "dist/face-api.esm-nobundle.js.map": { "imports": [], "inputs": {}, - "bytes": 305578 + "bytes": 303749 }, "dist/face-api.esm-nobundle.js": { "imports": [], diff --git a/dist/face-api.esm.js.map b/dist/face-api.esm.js.map index 8f4b928..e2a14b5 100644 --- a/dist/face-api.esm.js.map +++ b/dist/face-api.esm.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../src/env/isNodejs.ts", "empty:/home/vlado/dev/face-api/node_modules/node-fetch/browser.js", "../node_modules/seedrandom/lib/alea.js", "../node_modules/seedrandom/lib/xor128.js", "../node_modules/seedrandom/lib/xorwow.js", "../node_modules/seedrandom/lib/xorshift7.js", "../node_modules/seedrandom/lib/xor4096.js", "../node_modules/seedrandom/lib/tychei.js", "empty:crypto", "../node_modules/seedrandom/seedrandom.js", "../node_modules/seedrandom/index.js", "empty:/home/vlado/dev/face-api/node_modules/string_decoder/lib/string_decoder.js", "empty:path", "empty:worker_threads", "empty:perf_hooks", "../node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.js", "../node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm.js", "../node_modules/@tensorflow/tfjs-core/src/backends/backend.ts", "../node_modules/@tensorflow/tfjs-core/src/util_base.ts", "../node_modules/@tensorflow/tfjs-core/src/environment.ts", "../node_modules/@tensorflow/tfjs-core/src/global_util.ts", "../node_modules/@tensorflow/tfjs-core/src/kernel_names.ts", "../node_modules/@tensorflow/tfjs-core/src/kernel_registry.ts", "../node_modules/@tensorflow/tfjs-core/src/util.ts", "../node_modules/@tensorflow/tfjs-core/src/profiler.ts", "../node_modules/@tensorflow/tfjs-core/src/tape.ts", "../node_modules/@tensorflow/tfjs-core/src/tensor_format.ts", "../node_modules/@tensorflow/tfjs-core/src/tensor.ts", "../node_modules/@tensorflow/tfjs-core/src/tensor_util.ts", "../node_modules/@tensorflow/tfjs-core/src/types.ts", "../node_modules/@tensorflow/tfjs-core/src/engine.ts", "../node_modules/@tensorflow/tfjs-core/src/device_util.ts", "../node_modules/@tensorflow/tfjs-core/src/flags.ts", "../node_modules/@tensorflow/tfjs-core/src/tensor_util_env.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/operation.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/complex.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tensor_ops_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tensor.ts", "../node_modules/@tensorflow/tfjs-core/src/io/types.ts", "../node_modules/@tensorflow/tfjs-core/src/io/io_utils.ts", "../node_modules/@tensorflow/tfjs-core/src/io/router_registry.ts", "../node_modules/@tensorflow/tfjs-core/src/io/indexed_db.ts", "../node_modules/@tensorflow/tfjs-core/src/io/local_storage.ts", "../node_modules/@tensorflow/tfjs-core/src/io/model_management.ts", "../node_modules/@tensorflow/tfjs-core/src/platforms/platform_browser.ts", "../node_modules/@tensorflow/tfjs-core/src/platforms/platform_node.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/buffer.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/cast.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/clone.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/print.ts", "../node_modules/@tensorflow/tfjs-core/src/base_side_effects.ts", "../node_modules/@tensorflow/tfjs-core/src/io/io.ts", "../node_modules/@tensorflow/tfjs-core/src/io/browser_files.ts", "../node_modules/@tensorflow/tfjs-core/src/io/progress.ts", "../node_modules/@tensorflow/tfjs-core/src/io/weights_loader.ts", "../node_modules/@tensorflow/tfjs-core/src/io/http.ts", "../node_modules/@tensorflow/tfjs-core/src/io/passthrough.ts", "../node_modules/@tensorflow/tfjs-core/src/math.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/mat_mul.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/one_hot.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/transpose.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/confusion_matrix.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/browser.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tensor3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/gather_nd_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/scatter_nd_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/slice_util.ts", "../node_modules/@tensorflow/tfjs-core/src/serialization.ts", "../node_modules/@tensorflow/tfjs-core/src/test_util.ts", "../node_modules/@tensorflow/tfjs-core/src/version.ts", "../node_modules/@tensorflow/tfjs-core/src/globals.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/add.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/floorDiv.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/div.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/mul.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/abs.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/acos.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/acosh.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/add_n.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/all.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/any.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/arg_max.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/arg_min.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/asin.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/asinh.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/atan.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/atan2.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/atanh.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/reshape.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/avg_pool.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/avg_pool_3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/concat.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sigmoid.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/slice.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tanh.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/basic_lstm_cell.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/batch_to_space_nd.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/batchnorm_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/batchnorm.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/batchnorm2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/batchnorm3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/batchnorm4d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/bincount.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/broadcast_to.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/ceil.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/clip_by_value.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/concat_1d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/concat_2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/concat_3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/concat_4d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv1d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv2d_backprop_input.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv2d_transpose.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv3d_backprop_input.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv3d_transpose.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/cos.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/cosh.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/cumsum.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/dense_bincount.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/depth_to_space.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/depthwise_conv2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/diag.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/dilation2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/broadcast_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/equal.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/where.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/zeros_like.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/div_no_nan.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/dot.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/elu.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/erf.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/exp.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/expand_dims.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/expm1.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tile.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/eye.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/fill.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/floor.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/gather.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/greater.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/greater_equal.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/imag.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/is_finite.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/is_inf.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/is_nan.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/leaky_relu.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/less.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/less_equal.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/linspace.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/local_response_normalization.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/log.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/log1p.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/neg.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/softplus.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/log_sigmoid.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/max.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sub.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sum.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/log_softmax.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/axis_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/log_sum_exp.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/logical_and.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/logical_not.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/logical_or.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/logical_xor.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/max_pool.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/max_pool_3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/max_pool_with_argmax.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/maximum.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/mean.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/min.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/minimum.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/mirror_pad.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/mod.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/square.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/moments.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/multi_rnn_cell.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/multinomial.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/not_equal.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/zeros.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/ones.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/ones_like.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/outer_product.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/pad.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/pad1d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/pad2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/pad3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/pad4d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/space_to_batch_nd.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/pool.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/pow.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/prelu.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/prod.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/rand.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/rand_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/random_gamma.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/random_normal.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/random_uniform.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/range.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/real.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/reciprocal.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/relu.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/relu6.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/reverse.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/reverse_1d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/reverse_2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/reverse_3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/reverse_4d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/round.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/rsqrt.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/scalar.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/selu.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/separable_conv2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/setdiff1d_async.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sign.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sin.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sinh.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/slice1d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/slice2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/slice3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/slice4d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/softmax.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/spectral/fft.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/spectral/ifft.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/spectral/irfft.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/split.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/spectral/rfft.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sqrt.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/squared_difference.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/squeeze.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/stack.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/step.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/strided_slice.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tan.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tensor1d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tensor2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tensor4d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tensor5d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tensor6d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/topk.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/truncated_normal.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/unique.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/unsorted_segment_sum.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/unstack.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/variable.ts", "../node_modules/@tensorflow/tfjs-core/src/backends/where_impl.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/where_async.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/boolean_mask.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/compare.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/binary_ops.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/norm.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/moving_average.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/scatter_nd.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sparse_to_dense_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sparse_to_dense.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/gather_nd.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/dropout_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/dropout.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/signal_ops_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/in_top_k.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/fused_ops.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv2d_backprop_filter.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/fused_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/fused/conv2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/depthwise_conv2d_native_backprop_filter.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/depthwise_conv2d_native_backprop_input.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/fused/depthwise_conv2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/fused/mat_mul.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/signal/hamming_window.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/signal/hann_window.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/signal/frame.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/signal/stft.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/crop_and_resize.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/flip_left_right.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/rotate_with_offset.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/nonmax_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/non_max_suppression.ts", "../node_modules/@tensorflow/tfjs-core/src/backends/non_max_suppression_util.ts", "../node_modules/@tensorflow/tfjs-core/src/backends/non_max_suppression_impl.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/non_max_suppression_async.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/non_max_suppression_with_score.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/non_max_suppression_with_score_async.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/non_max_suppression_padded.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/non_max_suppression_padded_async.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/resize_bilinear.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/resize_nearest_neighbor.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/linalg/band_part.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/linalg/gram_schmidt.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/linalg/qr.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/loss_ops_utils.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/compute_weighted_loss.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/absolute_difference.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/cosine_distance.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/hinge_loss.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/huber_loss.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/log_loss.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/mean_squared_error.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/sigmoid_cross_entropy.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/softmax_cross_entropy.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/ops.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/optimizer.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/adadelta_optimizer.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/adagrad_optimizer.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/adam_optimizer.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/adamax_optimizer.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/sgd_optimizer.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/momentum_optimizer.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/rmsprop_optimizer.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/optimizer_constructors.ts", "../node_modules/@tensorflow/tfjs-core/src/train.ts", "../node_modules/@tensorflow/tfjs-core/src/browser_util.ts", "../node_modules/@tensorflow/tfjs-core/src/backends/backend_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/concat_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/reduce_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/rotate_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/array_ops_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/selu_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/erf_util.ts", "../node_modules/@tensorflow/tfjs-core/src/log.ts", "../node_modules/@tensorflow/tfjs-core/src/backends/complex_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/split_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/segment_util.ts", "../node_modules/@tensorflow/tfjs-core/src/backends/kernel_impls.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Abs_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Acos_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Acosh_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Add_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/AddN_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/ArgMax_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/ArgMin_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Asin_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Asinh_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Atan2_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Atan_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Atanh_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/avg_pool_3d_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/AvgPool3D_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/avg_pool_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/AvgPool_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/BatchMatMul_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/BatchToSpaceND_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/BroadcastTo_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Cast_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Ceil_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/ClipByValue_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/ComplexAbs_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Concat_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Conv2D_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Conv2DBackpropInput_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv3d_backprop_filter.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Conv3D_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Cos_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Cosh_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Cumsum_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/DepthwiseConv2dNative_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Dilation2D_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Elu_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Erf_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Exp_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/ExpandDims_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Expm1_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Floor_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/FloorDiv_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/FusedBatchNorm_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/GatherV2_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/GreaterEqual_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Identity_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/IsFinite_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/IsInf_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/IsNan_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/LeakyRelu_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Log1p_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Log_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/LogSoftmax_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/local_response_normalization_backprop.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/LRN_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/min_max_grad_util.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Max_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Maximum_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/max_pool_3d_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/MaxPool3D_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/max_pool_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/MaxPool_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Mean_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Min_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Minimum_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/MirrorPad_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Mod_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Multiply_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Neg_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/OneHot_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/OnesLike_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Pack_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/PadV2_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Pow_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Prelu_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/RealDiv_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Reciprocal_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Relu6_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Relu_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Reshape_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/ResizeBilinear_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/ResizeNearestNeighbor_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Reverse_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Round_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Rsqrt_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Select_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Selu_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Sigmoid_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Sign_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Sin_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Sinh_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Slice_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Softmax_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Softplus_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/SpaceToBatchND_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/SplitV_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Sqrt_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Square_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/SquaredDifference_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Step_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Sub_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Sum_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Tan_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Tanh_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Tile_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Transpose_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Unpack_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/UnsortedSegmentSum_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/ZerosLike_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/register_all_gradients.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/abs.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/acos.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/acosh.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/add_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/add.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/all.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/any.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/arg_max.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/arg_min.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/as_scalar.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/as_type.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/as1d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/as2d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/as3d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/as4d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/as5d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/asin.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/asinh.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/atan.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/atan2.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/atanh.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/avg_pool.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/batch_to_space_nd.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/batchnorm.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/broadcast_to.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/cast.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/ceil.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/clip_by_value.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/concat.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/conv1d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/conv2d_transpose.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/conv2d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/cos.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/cosh.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/cumsum.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/depth_to_space.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/depthwise_conv2D_deprecated.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/depthwise_conv2d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/dilation2d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/div_no_nan.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/div_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/div.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/dot.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/elu.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/equal_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/equal.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/erf.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/exp.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/expand_dims.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/expm1.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/fft.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/flatten.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/floor.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/floorDiv.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/gather.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/greater_equal_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/greater_equal.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/greater_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/greater.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/ifft.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/irfft.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/is_finite.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/is_inf.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/is_nan.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/leaky_relu.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/less_equal_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/less_equal.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/less_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/less.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/local_response_normalization.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/log_sigmoid.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/log_softmax.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/log_sum_exp.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/log.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/log1p.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/logical_and.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/logical_not.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/logical_or.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/logical_xor.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/mat_mul.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/max_pool.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/max.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/maximum_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/maximum.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/mean.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/min.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/minimum_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/minimum.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/mirror_pad.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/mod_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/mod.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/mul_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/mul.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/neg.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/norm.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/not_equal_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/not_equal.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/one_hot.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/ones_like.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/pad.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/pool.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/pow_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/pow.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/prelu.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/prod.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/reciprocal.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/relu.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/relu6.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/reshape_as.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/reshape.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/resize_bilinear.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/resize_nearest_neighbor.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/reverse.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/rfft.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/round.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/rsqrt.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/selu.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/separable_conv2d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/sigmoid.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/sign.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/sin.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/sinh.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/slice.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/softmax.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/softplus.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/space_to_batch_nd.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/split.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/sqrt.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/square.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/squared_difference.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/squared_difference_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/squeeze.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/stack.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/step.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/strided_slice.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/sub_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/sub.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/sum.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/tan.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/tanh.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/tile.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/to_bool.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/to_float.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/to_int.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/topk.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/transpose.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/unique.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/unsorted_segment_sum.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/unstack.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/where.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/zeros_like.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/register_all_chained_ops.ts", "../node_modules/@tensorflow/tfjs-core/src/index.ts", "../node_modules/@tensorflow/tfjs-layers/src/exports_constraints.ts", "../node_modules/@tensorflow/tfjs-layers/src/backend/common.ts", "../node_modules/@tensorflow/tfjs-layers/src/errors.ts", "../node_modules/@tensorflow/tfjs-layers/src/utils/generic_utils.ts", "../node_modules/@tensorflow/tfjs-layers/src/constraints.ts", "../node_modules/@tensorflow/tfjs-layers/src/exports_initializers.ts", "../node_modules/@tensorflow/tfjs-layers/src/keras_format/common.ts", "../node_modules/@tensorflow/tfjs-layers/src/common.ts", "../node_modules/@tensorflow/tfjs-layers/src/utils/math_utils.ts", "../node_modules/@tensorflow/tfjs-layers/src/backend/tfjs_backend.ts", "../node_modules/@tensorflow/tfjs-layers/src/keras_format/initializer_config.ts", "../node_modules/@tensorflow/tfjs-layers/src/initializers.ts", "../node_modules/@tensorflow/tfjs-layers/src/exports_layers.ts", "../node_modules/@tensorflow/tfjs-layers/src/backend/state.ts", "../node_modules/@tensorflow/tfjs-layers/src/utils/types_utils.ts", "../node_modules/@tensorflow/tfjs-layers/src/utils/variable_utils.ts", "../node_modules/@tensorflow/tfjs-layers/src/variables.ts", "../node_modules/@tensorflow/tfjs-layers/src/engine/topology.ts", "../node_modules/@tensorflow/tfjs-layers/src/engine/input_layer.ts", "../node_modules/@tensorflow/tfjs-layers/src/logs.ts", "../node_modules/@tensorflow/tfjs-layers/src/base_callbacks.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/serialization.ts", "../node_modules/@tensorflow/tfjs-layers/src/losses.ts", "../node_modules/@tensorflow/tfjs-layers/src/metrics.ts", "../node_modules/@tensorflow/tfjs-layers/src/optimizers.ts", "../node_modules/@tensorflow/tfjs-layers/src/user_defined_metadata.ts", "../node_modules/@tensorflow/tfjs-layers/src/utils/layer_utils.ts", "../node_modules/@tensorflow/tfjs-layers/src/utils/serialization_utils.ts", "../node_modules/@tensorflow/tfjs-layers/src/version.ts", "../node_modules/@tensorflow/tfjs-layers/src/engine/executor.ts", "../node_modules/@tensorflow/tfjs-layers/src/engine/container.ts", "../node_modules/@tensorflow/tfjs-layers/src/engine/training_utils.ts", "../node_modules/@tensorflow/tfjs-layers/src/engine/training_dataset.ts", "../node_modules/@tensorflow/tfjs-layers/src/engine/training_tensors.ts", "../node_modules/@tensorflow/tfjs-layers/src/engine/training.ts", "../node_modules/@tensorflow/tfjs-layers/src/models.ts", "../node_modules/@tensorflow/tfjs-layers/src/exports.ts", "../node_modules/@tensorflow/tfjs-layers/src/activations.ts", "../node_modules/@tensorflow/tfjs-layers/src/regularizers.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/advanced_activations.ts", "../node_modules/@tensorflow/tfjs-layers/src/utils/conv_utils.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/convolutional.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/convolutional_depthwise.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/recurrent.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/convolutional_recurrent.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/core.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/embeddings.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/merge.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/noise.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/normalization.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/padding.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/pooling.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/wrappers.ts", "../node_modules/@tensorflow/tfjs-layers/src/exports_metrics.ts", "../node_modules/@tensorflow/tfjs-layers/src/exports_models.ts", "../node_modules/@tensorflow/tfjs-layers/src/exports_regularizers.ts", "../node_modules/@tensorflow/tfjs-layers/src/callbacks.ts", "../node_modules/@tensorflow/tfjs-layers/src/index.ts", "../node_modules/@tensorflow/tfjs-converter/src/data/compiled_api.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/custom_op/register.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/utils.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/arithmetic.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/basic_math.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/control.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/convolution.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/creation.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/dynamic.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/evaluation.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/graph.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/hash_table.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/image.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/logical.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/matrices.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/normalization.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/reduction.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/slice_join.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/spectral.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/transformation.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/operation_mapper.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/custom_op/node_value_impl.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/arithmetic_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/basic_math_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/tensor_utils.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/tensor_array.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/tensor_list.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/control_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/convolution_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/creation_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/dynamic_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/evaluation_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/graph_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/hash_table.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/hash_table_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/image_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/logical_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/matrices_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/normalization_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/reduction_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/slice_join_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/spectral_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/transformation_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/operation_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/execution_context.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/model_analysis.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/graph_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/resource_manager.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/graph_model.ts", "../node_modules/@tensorflow/tfjs-converter/src/version.ts", "../node_modules/@tensorflow/tfjs-converter/src/index.ts", "../node_modules/@tensorflow/tfjs-data/src/index.ts", "../node_modules/@tensorflow/tfjs-data/src/dataset.ts", "../node_modules/@tensorflow/tfjs-data/src/iterators/lazy_iterator.ts", "../node_modules/@tensorflow/tfjs-data/src/util/deep_map.ts", "../node_modules/@tensorflow/tfjs-data/src/util/deep_clone.ts", "../node_modules/@tensorflow/tfjs-data/src/util/ring_buffer.ts", "../node_modules/@tensorflow/tfjs-data/src/util/growing_ring_buffer.ts", "../node_modules/@tensorflow/tfjs-data/src/datasets/text_line_dataset.ts", "../node_modules/@tensorflow/tfjs-data/src/datasets/csv_dataset.ts", "../node_modules/@tensorflow/tfjs-data/src/iterators/microphone_iterator.ts", "../node_modules/@tensorflow/tfjs-data/src/iterators/webcam_iterator.ts", "../node_modules/@tensorflow/tfjs-data/src/datasource.ts", "../node_modules/@tensorflow/tfjs-data/src/iterators/string_iterator.ts", "../node_modules/@tensorflow/tfjs-data/src/iterators/byte_chunk_iterator.ts", "../node_modules/@tensorflow/tfjs-data/src/iterators/file_chunk_iterator.ts", "../node_modules/@tensorflow/tfjs-data/src/iterators/url_chunk_iterator.ts", "../node_modules/@tensorflow/tfjs-data/src/util/source_util.ts", "../node_modules/@tensorflow/tfjs-data/src/sources/file_data_source.ts", "../node_modules/@tensorflow/tfjs-data/src/sources/url_data_source.ts", "../node_modules/@tensorflow/tfjs-data/src/readers.ts", "../node_modules/@tensorflow/tfjs-data/src/version.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/cpu_util.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/backend_cpu.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/shared.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Abs.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/utils/binary_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Complex.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/utils/zeros_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Identity.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Real.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Cast.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/utils/binary_utils.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Add.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Bincount_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/utils/unary_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/utils/unary_utils.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Ceil.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Exp.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Expm1.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Floor.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/GatherV2_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Greater.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Less.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LinSpace_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Log.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Max_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Maximum.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Minimum.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Multiply.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Neg.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/NotEqual.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Transpose_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Transpose.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Prod.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Range_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Rsqrt.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Slice.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/SquaredDifference.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/StridedSlice_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Sub.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Tile_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/TopK_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Unique_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/version.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/base.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Elu.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LeakyRelu.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Prelu.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Relu.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Relu6.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/utils/fused_utils.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Reshape.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/BatchMatMul.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/_FusedMatMul.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Acos.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Acosh.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/AddN.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/All.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Any.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ArgMax.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ArgMin.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Asin.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Asinh.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Atan.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Atan2.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Atanh.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/utils/pool_utils.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/AvgPool.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/AvgPool3D.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/AvgPool3DGrad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/AvgPoolGrad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/BatchNorm.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/BatchToSpaceND.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Bincount.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Clip.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ComplexAbs.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Imag.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Concat.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Conv2D.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Conv2DBackpropFilter.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Conv2DBackpropInput.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Conv3D.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Conv3DBackpropFilterV2.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Conv3DBackpropInputV2.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Cos.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Cosh.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/CropAndResize.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Cumsum.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/DenseBincount.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/DepthToSpace.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/DepthwiseConv2dNative.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/DepthwiseConv2dNativeBackpropFilter.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/DepthwiseConv2dNativeBackpropInput.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Diag.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Dilation2D.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Dilation2DBackpropFilter.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Dilation2DBackpropInput.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/EluGrad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Equal.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Erf.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ExpandDims.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/RealDiv.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/utils/fft_utils.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/FFT.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Fill.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/FlipLeftRight.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/FloorDiv.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/FusedConv2D.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/FusedDepthwiseConv2D.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/GatherNd.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/GatherV2.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/GreaterEqual.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/IFFT.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/IsFinite.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/IsInf.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/IsNaN.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LessEqual.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LinSpace.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Log1p.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LogicalAnd.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LogicalNot.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LogicalOr.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LRN.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LRNGrad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Max.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/MaxPool.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/MaxPool3D.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/MaxPool3DGrad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/MaxPoolGrad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Sum.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Mean.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Min.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/MirrorPad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Mod.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Multinomial.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Softmax.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/NonMaxSuppressionV3.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/NonMaxSuppressionV4.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/NonMaxSuppressionV5.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/OneHot.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ZerosLike.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/OnesLike.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Pack.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/PadV2.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Pow.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Range.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Reciprocal.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ResizeBilinear.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ResizeBilinearGrad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ResizeNearestNeighbor.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ResizeNearestNeighborGrad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Reverse.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/RotateWithOffset.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Round.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Scatter_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ScatterNd.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Select.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Selu.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Sigmoid.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Sign.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Sin.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Sinh.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Softplus.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/SpaceToBatchND.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/SparseToDense.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/SplitV.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Sqrt.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Square.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Step.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/StridedSlice.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Tan.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Tanh.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Tile.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/TopK.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Unique.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Unpack.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/UnsortedSegmentSum.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/register_all_kernels.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/index.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/canvas_util.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/tex_util.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/webgl_util.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/flags_webgl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/glsl_version.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/shader_compiler_util.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/decode_matrix_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/decode_matrix_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/encode_float_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/encode_float_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/encode_matrix_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/encode_matrix_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/gpgpu_util.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/gpgpu_context.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/shader_compiler.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/gpgpu_math.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernel_utils/shared.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/packing_util.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/pack_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/reshape_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/texture_manager.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/unaryop_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/unaryop_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/unpack_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/backend_webgl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/version.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/base.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/binaryop_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/binaryop_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Identity.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Complex.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/LeakyRelu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Prelu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernel_utils/kernel_funcs_utils.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/mulmat_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/binaryop_complex_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Multiply.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernel_utils/reshape.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Reshape.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/mean_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/reduce_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernel_utils/reduce.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/transpose_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/transpose_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Transpose_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Sum_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Sum.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Transpose.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/BatchMatMul_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/_FusedMatMul.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Abs.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Acos.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Acosh.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Add.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/addn_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/addn_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/AddN.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/All.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Any.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/argminmax_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/argminmax_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernel_utils/arg_min_max.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ArgMax.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ArgMin.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Asin.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Asinh.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Atan.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Atan2.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Atanh.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/pool_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/AvgPool.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/AvgPool3D.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/avg_pool_backprop_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/AvgPool3DGrad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/AvgPoolGrad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/BatchMatMul.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/batchnorm_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/batchnorm_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/BatchNorm.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/slice_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/slice_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Slice.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/BatchToSpaceND.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Bincount.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/NotEqual.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Real.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernel_utils/int.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Cast.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Ceil.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/clip_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/clip_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ClipByValue.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/complex_abs_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ComplexAbs.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/concat_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/concat_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Imag.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Concat_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Concat.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/conv_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/im2col_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Conv2D_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Conv2D.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/conv_backprop_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Conv2DBackpropFilter.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Conv2DBackpropInput.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Conv3D.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Conv3DBackpropFilterV2.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Conv3DBackpropInputV2.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Cos.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Cosh.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/crop_and_resize_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/CropAndResize.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/cumsum_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Cumsum.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/DenseBincount.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/depth_to_space_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/DepthToSpace.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/conv_gpu_depthwise.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/conv_packed_gpu_depthwise.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/DepthwiseConv2dNative.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/conv_backprop_gpu_depthwise.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/DepthwiseConv2dNativeBackpropFilter.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/DepthwiseConv2dNativeBackpropInput.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/diag_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Diag.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/dilation_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Dilation2D.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Elu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/EluGrad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Equal.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Erf.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Exp.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ExpandDims.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Expm1.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/fft_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FFT_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FFT.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/fill_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Fill.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/flip_left_right_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FlipLeftRight.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Floor.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FloorDiv.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FromPixels_utils/from_pixels_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FromPixels_utils/from_pixels_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FromPixels.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FusedConv2D.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FusedDepthwiseConv2D.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/gather_nd_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/GatherNd.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/gather_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/GatherV2.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Greater.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/GreaterEqual.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/IFFT.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/IsFinite.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/IsInf.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/IsNaN.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Less.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/LessEqual.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/LinSpace.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Log.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Log1p.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/LogicalAnd.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/LogicalNot.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/LogicalOr.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/lrn_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/lrn_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/LRN.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/lrn_grad_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/LRNGrad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Max_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Max.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Maximum.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/MaxPool.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/MaxPool3D.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/max_pool_backprop_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/MaxPool3DGrad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/MaxPoolGrad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/MaxPoolWithArgmax_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/MaxPoolWithArgmax.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Mean_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Mean.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Min.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Minimum.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/mirror_pad_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/mirror_pad_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/MirrorPad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Mod.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/multinomial_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/RealDiv.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Sub.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Softmax.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Multinomial.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Neg.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/NonMaxSuppressionV3.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/NonMaxSuppressionV4.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/NonMaxSuppressionV5.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/onehot_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/OneHot.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ZerosLike.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/OnesLike.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Pack.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/pad_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/pad_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/PadV2.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Pow.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Prod.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Range.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Reciprocal.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Relu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Relu6.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/resize_bilinear_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/resize_bilinear_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ResizeBilinear.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/resize_bilinear_backprop_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ResizeBilinearGrad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/resize_nearest_neighbor_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ResizeNearestNeighbor.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/resize_nearest_neighbor_backprop_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ResizeNearestNeighborGrad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/reverse_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/reverse_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Reverse.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/rotate_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/RotateWithOffset.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Round.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Rsqrt.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/scatter_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ScatterNd.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/select_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Select.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Selu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Sigmoid.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Sign.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Sin.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Sinh.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Softplus.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/SpaceToBatchND.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/SparseToDense.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/SplitV.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Sqrt.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Square.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/SquaredDifference.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Step.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/strided_slice_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/StridedSlice.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Tan.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Tanh.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/tile_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Tile.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/TopK.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Unique.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Unpack.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/segment_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/UnsortedSegmentSum.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/register_all_kernels.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/index.ts", "../node_modules/@tensorflow/tfjs/src/version.ts", "../node_modules/@tensorflow/tfjs/src/index.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/types.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/_FusedMatMul.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/unary_kernel.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Abs.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/binary_kernel.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Add.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/AddN.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Identity.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Transpose.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/kernel_utils.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/ArgMax.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/AvgPool.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Reshape.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/BatchMatMul.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Cast.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/ClipByValue.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Concat.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Conv2D.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Conv2DBackpropInput.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Cos.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/CropAndResize.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Cumsum.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/DepthToSpace.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/DepthwiseConv2dNative.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Equal.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Exp.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/ExpandDims.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Fill.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/FlipLeftRight.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Floor.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/FloorDiv.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/FusedBatchNorm.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/FusedConv2D.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/FusedDepthwiseConv2D.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/GatherNd.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/GatherV2.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Greater.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/GreaterEqual.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/LeakyRelu.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Less.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/LessEqual.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Log.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/LogicalAnd.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Max.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Maximum.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/MaxPool.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Mean.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Min.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Minimum.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Multiply.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Neg.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/NonMaxSuppression_util.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/NonMaxSuppressionV3.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/NonMaxSuppressionV4.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/NonMaxSuppressionV5.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/NotEqual.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/OneHot.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/OnesLike.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Pack.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/PadV2.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Pow.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Prelu.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Prod.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Range.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/RealDiv.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Relu.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Relu6.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/ResizeBilinear.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Reverse.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/RotateWithOffset.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Rsqrt.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/ScatterNd.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Select.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Sigmoid.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Sin.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Slice.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Softmax.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/SplitV.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Sqrt.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Square.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/SquaredDifference.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/StridedSlice.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Sub.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Sum.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Tanh.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Tile.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/TopK.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Unpack.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/ZerosLike.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/register_all_kernels.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/flags_wasm.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/backend_wasm.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.worker.js", "../node_modules/@tensorflow/tfjs-backend-wasm/src/version.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/base.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/index.ts", "../src/draw/index.ts", "../src/draw/drawContour.ts", "../src/utils/index.ts", "../src/classes/Dimensions.ts", "../src/classes/Point.ts", "../src/classes/Box.ts", "../src/classes/BoundingBox.ts", "../src/classes/ObjectDetection.ts", "../src/classes/FaceDetection.ts", "../src/ops/iou.ts", "../src/ops/minBbox.ts", "../src/ops/nonMaxSuppression.ts", "../src/ops/normalize.ts", "../src/ops/padToSquare.ts", "../src/ops/shuffleArray.ts", "../src/ops/index.ts", "../src/classes/Rect.ts", "../src/classes/FaceLandmarks.ts", "../src/classes/FaceLandmarks5.ts", "../src/classes/FaceLandmarks68.ts", "../src/classes/FaceMatch.ts", "../src/classes/LabeledBox.ts", "../src/classes/LabeledFaceDescriptors.ts", "../src/classes/PredictedBox.ts", "../src/factories/WithFaceDetection.ts", "../src/env/createBrowserEnv.ts", "../src/env/createFileSystem.ts", "../src/env/createNodejsEnv.ts", "../src/env/isBrowser.ts", "../src/env/index.ts", "../src/dom/resolveInput.ts", "../src/dom/getContext2dOrThrow.ts", "../src/draw/DrawTextField.ts", "../src/draw/DrawBox.ts", "../src/draw/drawDetections.ts", "../src/dom/isMediaLoaded.ts", "../src/dom/awaitMediaLoaded.ts", "../src/dom/bufferToImage.ts", "../src/dom/getMediaDimensions.ts", "../src/dom/createCanvas.ts", "../src/dom/imageTensorToCanvas.ts", "../src/dom/isMediaElement.ts", "../src/dom/imageToSquare.ts", "../src/dom/NetInput.ts", "../src/dom/toNetInput.ts", "../src/dom/extractFaces.ts", "../src/dom/extractFaceTensors.ts", "../src/dom/fetchOrThrow.ts", "../src/dom/fetchImage.ts", "../src/dom/fetchJson.ts", "../src/dom/fetchNetWeights.ts", "../src/common/getModelUris.ts", "../src/dom/loadWeightMap.ts", "../src/dom/matchDimensions.ts", "../src/NeuralNetwork.ts", "../src/common/depthwiseSeparableConv.ts", "../src/faceFeatureExtractor/denseBlock.ts", "../src/common/convLayer.ts", "../src/common/disposeUnusedWeightTensors.ts", "../src/common/extractConvParamsFactory.ts", "../src/common/extractFCParamsFactory.ts", "../src/common/types.ts", "../src/common/extractSeparableConvParamsFactory.ts", "../src/common/extractWeightEntryFactory.ts", "../src/common/extractWeightsFactory.ts", "../src/faceFeatureExtractor/extractorsFactory.ts", "../src/faceFeatureExtractor/extractParams.ts", "../src/common/loadConvParamsFactory.ts", "../src/faceFeatureExtractor/loadParamsFactory.ts", "../src/faceFeatureExtractor/extractParamsFromWeigthMap.ts", "../src/faceFeatureExtractor/FaceFeatureExtractor.ts", "../src/common/fullyConnectedLayer.ts", "../src/faceProcessor/extractParams.ts", "../src/faceProcessor/extractParamsFromWeigthMap.ts", "../src/faceProcessor/util.ts", "../src/faceProcessor/FaceProcessor.ts", "../src/faceExpressionNet/FaceExpressions.ts", "../src/faceExpressionNet/FaceExpressionNet.ts", "../src/factories/WithFaceExpressions.ts", "../src/draw/drawFaceExpressions.ts", "../src/factories/WithFaceLandmarks.ts", "../src/draw/DrawFaceLandmarks.ts", "../src/xception/extractParams.ts", "../src/xception/extractParamsFromWeigthMap.ts", "../src/xception/TinyXception.ts", "../src/ageGenderNet/extractParams.ts", "../src/ageGenderNet/extractParamsFromWeigthMap.ts", "../src/ageGenderNet/types.ts", "../src/ageGenderNet/AgeGenderNet.ts", "../src/faceLandmarkNet/FaceLandmark68NetBase.ts", "../src/faceLandmarkNet/FaceLandmark68Net.ts", "../src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts", "../src/faceFeatureExtractor/extractParamsTiny.ts", "../src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts", "../src/faceLandmarkNet/FaceLandmark68TinyNet.ts", "../src/faceLandmarkNet/index.ts", "../src/faceRecognitionNet/scaleLayer.ts", "../src/faceRecognitionNet/convLayer.ts", "../src/faceRecognitionNet/extractParams.ts", "../src/faceRecognitionNet/extractParamsFromWeigthMap.ts", "../src/faceRecognitionNet/residualLayer.ts", "../src/faceRecognitionNet/FaceRecognitionNet.ts", "../src/faceRecognitionNet/index.ts", "../src/factories/WithFaceDescriptor.ts", "../src/factories/WithAge.ts", "../src/factories/WithGender.ts", "../src/ssdMobilenetv1/extractParams.ts", "../src/ssdMobilenetv1/extractParamsFromWeigthMap.ts", "../src/ssdMobilenetv1/pointwiseConvLayer.ts", "../src/ssdMobilenetv1/mobileNetV1.ts", "../src/ssdMobilenetv1/nonMaxSuppression.ts", "../src/ssdMobilenetv1/outputLayer.ts", "../src/ssdMobilenetv1/boxPredictionLayer.ts", "../src/ssdMobilenetv1/predictionLayer.ts", "../src/ssdMobilenetv1/SsdMobilenetv1Options.ts", "../src/ssdMobilenetv1/SsdMobilenetv1.ts", "../src/ssdMobilenetv1/index.ts", "../src/tinyYolov2/const.ts", "../src/tinyYolov2/config.ts", "../src/tinyYolov2/leaky.ts", "../src/tinyYolov2/convWithBatchNorm.ts", "../src/tinyYolov2/depthwiseSeparableConv.ts", "../src/tinyYolov2/extractParams.ts", "../src/tinyYolov2/extractParamsFromWeigthMap.ts", "../src/tinyYolov2/TinyYolov2Options.ts", "../src/tinyYolov2/TinyYolov2Base.ts", "../src/tinyYolov2/TinyYolov2.ts", "../src/tinyYolov2/index.ts", "../src/tinyFaceDetector/TinyFaceDetectorOptions.ts", "../src/globalApi/ComposableTask.ts", "../src/globalApi/extractFacesAndComputeResults.ts", "../src/tinyFaceDetector/const.ts", "../src/tinyFaceDetector/TinyFaceDetector.ts", "../src/globalApi/nets.ts", "../src/globalApi/PredictFaceExpressionsTask.ts", "../src/globalApi/PredictAgeAndGenderTask.ts", "../src/globalApi/ComputeFaceDescriptorsTasks.ts", "../src/globalApi/DetectFaceLandmarksTasks.ts", "../src/globalApi/DetectFacesTasks.ts", "../src/globalApi/detectFaces.ts", "../src/globalApi/allFaces.ts", "../src/euclideanDistance.ts", "../src/globalApi/FaceMatcher.ts", "../src/tinyFaceDetector/index.ts", "../src/resizeResults.ts", "../src/index.ts"], - "sourcesContent": ["export function isNodejs(): boolean {\n return typeof global === 'object'\n && typeof require === 'function'\n && typeof module !== 'undefined'\n // issues with gatsby.js: module.exports is undefined\n // && !!module.exports\n && typeof process !== 'undefined' && !!process.version;\n}\n", "", "// A port of an algorithm by Johannes Baag\u00F8e , 2010\n// http://baagoe.com/en/RandomMusings/javascript/\n// https://github.com/nquinlan/better-random-numbers-for-javascript-mirror\n// Original work is under MIT license -\n\n// Copyright (C) 2010 by Johannes Baag\u00F8e \n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// \n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n\n\n(function(global, module, define) {\n\nfunction Alea(seed) {\n var me = this, mash = Mash();\n\n me.next = function() {\n var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32\n me.s0 = me.s1;\n me.s1 = me.s2;\n return me.s2 = t - (me.c = t | 0);\n };\n\n // Apply the seeding algorithm from Baagoe.\n me.c = 1;\n me.s0 = mash(' ');\n me.s1 = mash(' ');\n me.s2 = mash(' ');\n me.s0 -= mash(seed);\n if (me.s0 < 0) { me.s0 += 1; }\n me.s1 -= mash(seed);\n if (me.s1 < 0) { me.s1 += 1; }\n me.s2 -= mash(seed);\n if (me.s2 < 0) { me.s2 += 1; }\n mash = null;\n}\n\nfunction copy(f, t) {\n t.c = f.c;\n t.s0 = f.s0;\n t.s1 = f.s1;\n t.s2 = f.s2;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new Alea(seed),\n state = opts && opts.state,\n prng = xg.next;\n prng.int32 = function() { return (xg.next() * 0x100000000) | 0; }\n prng.double = function() {\n return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53\n };\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nfunction Mash() {\n var n = 0xefc8249d;\n\n var mash = function(data) {\n data = data.toString();\n for (var i = 0; i < data.length; i++) {\n n += data.charCodeAt(i);\n var h = 0.02519603282416938 * n;\n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 0x100000000; // 2^32\n }\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n };\n\n return mash;\n}\n\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.alea = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xor128\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n\n // Set up generator function.\n me.next = function() {\n var t = me.x ^ (me.x << 11);\n me.x = me.y;\n me.y = me.z;\n me.z = me.w;\n return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8);\n };\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor128 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xorwow\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var t = (me.x ^ (me.x >>> 2));\n me.x = me.y; me.y = me.z; me.z = me.w; me.w = me.v;\n return (me.d = (me.d + 362437 | 0)) +\n (me.v = (me.v ^ (me.v << 4)) ^ (t ^ (t << 1))) | 0;\n };\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n me.v = 0;\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n if (k == strseed.length) {\n me.d = me.x << 10 ^ me.x >>> 4;\n }\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n t.v = f.v;\n t.d = f.d;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorwow = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xorshift7\" algorithm by\n// Fran\u00E7ois Panneton and Pierre L'ecuyer:\n// \"On the Xorgshift Random Number Generators\"\n// http://saluc.engr.uconn.edu/refs/crypto/rng/panneton05onthexorshift.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n // Update xor generator.\n var X = me.x, i = me.i, t, v, w;\n t = X[i]; t ^= (t >>> 7); v = t ^ (t << 24);\n t = X[(i + 1) & 7]; v ^= t ^ (t >>> 10);\n t = X[(i + 3) & 7]; v ^= t ^ (t >>> 3);\n t = X[(i + 4) & 7]; v ^= t ^ (t << 7);\n t = X[(i + 7) & 7]; t = t ^ (t << 13); v ^= t ^ (t << 9);\n X[i] = v;\n me.i = (i + 1) & 7;\n return v;\n };\n\n function init(me, seed) {\n var j, w, X = [];\n\n if (seed === (seed | 0)) {\n // Seed state array using a 32-bit integer.\n w = X[0] = seed;\n } else {\n // Seed state using a string.\n seed = '' + seed;\n for (j = 0; j < seed.length; ++j) {\n X[j & 7] = (X[j & 7] << 15) ^\n (seed.charCodeAt(j) + X[(j + 1) & 7] << 13);\n }\n }\n // Enforce an array length of 8, not all zeroes.\n while (X.length < 8) X.push(0);\n for (j = 0; j < 8 && X[j] === 0; ++j);\n if (j == 8) w = X[7] = -1; else w = X[j];\n\n me.x = X;\n me.i = 0;\n\n // Discard an initial 256 values.\n for (j = 256; j > 0; --j) {\n me.next();\n }\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.x = f.x.slice();\n t.i = f.i;\n return t;\n}\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.x) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorshift7 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n", "// A Javascript implementaion of Richard Brent's Xorgens xor4096 algorithm.\n//\n// This fast non-cryptographic random number generator is designed for\n// use in Monte-Carlo algorithms. It combines a long-period xorshift\n// generator with a Weyl generator, and it passes all common batteries\n// of stasticial tests for randomness while consuming only a few nanoseconds\n// for each prng generated. For background on the generator, see Brent's\n// paper: \"Some long-period random number generators using shifts and xors.\"\n// http://arxiv.org/pdf/1004.3115v1.pdf\n//\n// Usage:\n//\n// var xor4096 = require('xor4096');\n// random = xor4096(1); // Seed with int32 or string.\n// assert.equal(random(), 0.1520436450538547); // (0, 1) range, 53 bits.\n// assert.equal(random.int32(), 1806534897); // signed int32, 32 bits.\n//\n// For nonzero numeric keys, this impelementation provides a sequence\n// identical to that by Brent's xorgens 3 implementaion in C. This\n// implementation also provides for initalizing the generator with\n// string seeds, or for saving and restoring the state of the generator.\n//\n// On Chrome, this prng benchmarks about 2.1 times slower than\n// Javascript's built-in Math.random().\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n var w = me.w,\n X = me.X, i = me.i, t, v;\n // Update Weyl generator.\n me.w = w = (w + 0x61c88647) | 0;\n // Update xor generator.\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n // Update Xor generator array state.\n v = X[i] = v ^ t;\n me.i = i;\n // Result is the combination.\n return (v + (w ^ (w >>> 16))) | 0;\n };\n\n function init(me, seed) {\n var t, v, i, j, w, X = [], limit = 128;\n if (seed === (seed | 0)) {\n // Numeric seeds initialize v, which is used to generates X.\n v = seed;\n seed = null;\n } else {\n // String seeds are mixed into v and X one character at a time.\n seed = seed + '\\0';\n v = 0;\n limit = Math.max(limit, seed.length);\n }\n // Initialize circular array and weyl value.\n for (i = 0, j = -32; j < limit; ++j) {\n // Put the unicode characters into the array, and shuffle them.\n if (seed) v ^= seed.charCodeAt((j + 32) % seed.length);\n // After 32 shuffles, take v as the starting w value.\n if (j === 0) w = v;\n v ^= v << 10;\n v ^= v >>> 15;\n v ^= v << 4;\n v ^= v >>> 13;\n if (j >= 0) {\n w = (w + 0x61c88647) | 0; // Weyl.\n t = (X[j & 127] ^= (v + w)); // Combine xor and weyl to init array.\n i = (0 == t) ? i + 1 : 0; // Count zeroes.\n }\n }\n // We have detected all zeroes; make the key nonzero.\n if (i >= 128) {\n X[(seed && seed.length || 0) & 127] = -1;\n }\n // Run the generator 512 times to further mix the state before using it.\n // Factoring this as a function slows the main generator, so it is just\n // unrolled here. The weyl generator is not advanced while warming up.\n i = 127;\n for (j = 4 * 128; j > 0; --j) {\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n X[i] = v ^ t;\n }\n // Storing state as object members is faster than using closure variables.\n me.w = w;\n me.X = X;\n me.i = i;\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.i = f.i;\n t.w = f.w;\n t.X = f.X.slice();\n return t;\n};\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.X) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor4096 = impl;\n}\n\n})(\n this, // window object or global\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n", "// A Javascript implementaion of the \"Tyche-i\" prng algorithm by\n// Samuel Neves and Filipe Araujo.\n// See https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var b = me.b, c = me.c, d = me.d, a = me.a;\n b = (b << 25) ^ (b >>> 7) ^ c;\n c = (c - d) | 0;\n d = (d << 24) ^ (d >>> 8) ^ a;\n a = (a - b) | 0;\n me.b = b = (b << 20) ^ (b >>> 12) ^ c;\n me.c = c = (c - d) | 0;\n me.d = (d << 16) ^ (c >>> 16) ^ a;\n return me.a = (a - b) | 0;\n };\n\n /* The following is non-inverted tyche, which has better internal\n * bit diffusion, but which is about 25% slower than tyche-i in JS.\n me.next = function() {\n var a = me.a, b = me.b, c = me.c, d = me.d;\n a = (me.a + me.b | 0) >>> 0;\n d = me.d ^ a; d = d << 16 ^ d >>> 16;\n c = me.c + d | 0;\n b = me.b ^ c; b = b << 12 ^ d >>> 20;\n me.a = a = a + b | 0;\n d = d ^ a; me.d = d = d << 8 ^ d >>> 24;\n me.c = c = c + d | 0;\n b = b ^ c;\n return me.b = (b << 7 ^ b >>> 25);\n }\n */\n\n me.a = 0;\n me.b = 0;\n me.c = 2654435769 | 0;\n me.d = 1367130551;\n\n if (seed === Math.floor(seed)) {\n // Integer seed.\n me.a = (seed / 0x100000000) | 0;\n me.b = seed | 0;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 20; k++) {\n me.b ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.a = f.a;\n t.b = f.b;\n t.c = f.c;\n t.d = f.d;\n return t;\n};\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.tychei = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "", "/*\nCopyright 2014 David Bau.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\n(function (pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\nvar global = this,\n width = 256, // each RC4 output is 0 <= x < 256\n chunks = 6, // at least six RC4 outputs for each double\n digits = 52, // there are 52 significant digits in a double\n rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\nfunction seedrandom(seed, options, callback) {\n var key = [];\n options = (options == true) ? { entropy: true } : (options || {});\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(\n options.entropy ? [seed, tostring(pool)] :\n (seed == null) ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n var prng = function() {\n var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\n d = startdenom, // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n while (n < significance) { // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\n x = arc4.g(1); // new least-significant-byte.\n }\n while (n >= overflow) { // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n d /= 2; // right using integer math until\n x >>>= 1; // we have exactly the desired bits.\n }\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function() { return arc4.g(4) | 0; }\n prng.quick = function() { return arc4.g(4) / 0x100000000; }\n prng.double = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\n return (options.pass || callback ||\n function(prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) { copy(state, arc4); }\n // Only provide the .state method if requested via options.state.\n prng.state = function() { return copy(arc4, {}); }\n }\n\n // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n if (is_math_call) { math[rngname] = prng; return seed; }\n\n // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(\n prng,\n shortseed,\n 'global' in options ? options.global : (this == math),\n options.state);\n}\nmath['seed' + rngname] = seedrandom;\n\n//\n// ARC4\n//\n// An ARC4 implementation. The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4. Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\nfunction ARC4(key) {\n var t, keylen = key.length,\n me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) { key = [keylen++]; }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\n }\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n s[j] = t;\n }\n\n // The \"g\" method returns the next (count) outputs as one number.\n (me.g = function(count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t, r = 0,\n i = me.i, j = me.j, s = me.S;\n while (count--) {\n t = s[i = mask & (i + 1)];\n r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n }\n me.i = i; me.j = j;\n return r;\n // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n })(width);\n}\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\nfunction copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n};\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\nfunction flatten(obj, depth) {\n var result = [], typ = (typeof obj), prop;\n if (depth && typ == 'object') {\n for (prop in obj) {\n try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n }\n }\n return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n}\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\nfunction mixkey(seed, key) {\n var stringseed = seed + '', smear, j = 0;\n while (j < stringseed.length) {\n key[mask & j] =\n mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n }\n return tostring(key);\n}\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\nfunction autoseed() {\n try {\n var out;\n if (nodecrypto && (out = nodecrypto.randomBytes)) {\n // The use of 'out' to remember randomBytes makes tight minified code.\n out = out(width);\n } else {\n out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n }\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date, global, plugins, global.screen, tostring(pool)];\n }\n}\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\nfunction tostring(a) {\n return String.fromCharCode.apply(0, a);\n}\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool. Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\nmixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\nif ((typeof module) == 'object' && module.exports) {\n module.exports = seedrandom;\n // When in node.js, try using crypto package for autoseeding.\n try {\n nodecrypto = require('crypto');\n } catch (ex) {}\n} else if ((typeof define) == 'function' && define.amd) {\n define(function() { return seedrandom; });\n}\n\n// End anonymous scope, and pass initial values.\n})(\n [], // pool: entropy pool starts empty\n Math // math: package containing random, pow, and seedrandom\n);\n", "// A library of seedable RNGs implemented in Javascript.\n//\n// Usage:\n//\n// var seedrandom = require('seedrandom');\n// var random = seedrandom(1); // or any seed.\n// var x = random(); // 0 <= x < 1. Every bit is random.\n// var x = random.quick(); // 0 <= x < 1. 32 bits of randomness.\n\n// alea, a 53-bit multiply-with-carry generator by Johannes Baag\u00F8e.\n// Period: ~2^116\n// Reported to pass all BigCrush tests.\nvar alea = require('./lib/alea');\n\n// xor128, a pure xor-shift generator by George Marsaglia.\n// Period: 2^128-1.\n// Reported to fail: MatrixRank and LinearComp.\nvar xor128 = require('./lib/xor128');\n\n// xorwow, George Marsaglia's 160-bit xor-shift combined plus weyl.\n// Period: 2^192-2^32\n// Reported to fail: CollisionOver, SimpPoker, and LinearComp.\nvar xorwow = require('./lib/xorwow');\n\n// xorshift7, by Fran\u00E7ois Panneton and Pierre L'ecuyer, takes\n// a different approach: it adds robustness by allowing more shifts\n// than Marsaglia's original three. It is a 7-shift generator\n// with 256 bits, that passes BigCrush with no systmatic failures.\n// Period 2^256-1.\n// No systematic BigCrush failures reported.\nvar xorshift7 = require('./lib/xorshift7');\n\n// xor4096, by Richard Brent, is a 4096-bit xor-shift with a\n// very long period that also adds a Weyl generator. It also passes\n// BigCrush with no systematic failures. Its long period may\n// be useful if you have many generators and need to avoid\n// collisions.\n// Period: 2^4128-2^32.\n// No systematic BigCrush failures reported.\nvar xor4096 = require('./lib/xor4096');\n\n// Tyche-i, by Samuel Neves and Filipe Araujo, is a bit-shifting random\n// number generator derived from ChaCha, a modern stream cipher.\n// https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n// Period: ~2^127\n// No systematic BigCrush failures reported.\nvar tychei = require('./lib/tychei');\n\n// The original ARC4-based prng included in this library.\n// Period: ~2^1600\nvar sr = require('./seedrandom');\n\nsr.alea = alea;\nsr.xor128 = xor128;\nsr.xorwow = xorwow;\nsr.xorshift7 = xorshift7;\nsr.xor4096 = xor4096;\nsr.tychei = tychei;\n\nmodule.exports = sr;\n", "", "", "", "", "\nvar WasmBackendModuleThreadedSimd = (function() {\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n return (\nfunction(WasmBackendModuleThreadedSimd) {\n WasmBackendModuleThreadedSimd = WasmBackendModuleThreadedSimd || {};\n\nfunction GROWABLE_HEAP_I8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP8}function GROWABLE_HEAP_U8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU8}function GROWABLE_HEAP_I32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP32}function GROWABLE_HEAP_U32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU32}function GROWABLE_HEAP_F64(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPF64}var Module=typeof WasmBackendModuleThreadedSimd!==\"undefined\"?WasmBackendModuleThreadedSimd:{};var _scriptDir=undefined;var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram=\"./this.program\";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_PTHREAD=Module[\"ENVIRONMENT_IS_PTHREAD\"]||false;if(ENVIRONMENT_IS_PTHREAD){buffer=Module[\"buffer\"];DYNAMIC_BASE=Module[\"DYNAMIC_BASE\"];DYNAMICTOP_PTR=Module[\"DYNAMICTOP_PTR\"]}var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require(\"path\").dirname(scriptDirectory)+\"/\"}else{scriptDirectory=__dirname+\"/\"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);return nodeFS[\"readFileSync\"](filename,binary?null:\"utf8\")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process[\"argv\"].length>1){thisProgram=process[\"argv\"][1].replace(/\\\\/g,\"/\")}arguments_=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process[\"on\"](\"unhandledRejection\",abort);quit_=function(status){process[\"exit\"](status)};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\"};var nodeWorkerThreads;try{nodeWorkerThreads=require(\"worker_threads\")}catch(e){console.error('The \"worker_threads\" module is not supported in this node.js build - perhaps a newer version is needed?');throw e}Worker=nodeWorkerThreads.Worker}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){arguments_=scriptArgs}else if(typeof arguments!=\"undefined\"){arguments_=arguments}if(typeof quit===\"function\"){quit_=function(status){quit(status)}}if(typeof print!==\"undefined\"){if(typeof console===\"undefined\")console={};console.log=print;console.warn=console.error=typeof printErr!==\"undefined\"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}if(ENVIRONMENT_IS_NODE){read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);return nodeFS[\"readFileSync\"](filename,binary?null:\"utf8\")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret}}else{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}if(ENVIRONMENT_IS_NODE){if(typeof performance===\"undefined\"){performance=require(\"perf_hooks\").performance}}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var Atomics_load=Atomics.load;var Atomics_store=Atomics.store;var Atomics_compareExchange=Atomics.compareExchange;var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];var noExitRuntime;if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(typeof WebAssembly!==\"object\"){err(\"no native wasm support detected\")}var wasmMemory;var wasmTable=new WebAssembly.Table({\"initial\":167,\"maximum\":167+0,\"element\":\"anyfunc\"});var wasmModule;var threadInfoStruct=0;var selfThreadId=0;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={\"string\":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},\"array\":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\")return UTF8ToString(ret);if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx)){var u0=heap[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(GROWABLE_HEAP_U8(),ptr,maxBytesToRead):\"\"}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,GROWABLE_HEAP_U8(),outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function writeArrayToMemory(array,buffer){GROWABLE_HEAP_I8().set(array,buffer)}var WASM_PAGE_SIZE=65536;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var STACK_BASE=5256464,STACKTOP=STACK_BASE,STACK_MAX=13584,DYNAMIC_BASE=5256464,DYNAMICTOP_PTR=12656;if(ENVIRONMENT_IS_PTHREAD){}var INITIAL_INITIAL_MEMORY=Module[\"INITIAL_MEMORY\"]||16777216;if(ENVIRONMENT_IS_PTHREAD){wasmMemory=Module[\"wasmMemory\"];buffer=Module[\"buffer\"]}else{if(Module[\"wasmMemory\"]){wasmMemory=Module[\"wasmMemory\"]}else{wasmMemory=new WebAssembly.Memory({\"initial\":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,\"maximum\":2147483648/WASM_PAGE_SIZE,\"shared\":true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err(\"requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag\");if(ENVIRONMENT_IS_NODE){console.log(\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)\")}throw Error(\"bad memory\")}}}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);if(!ENVIRONMENT_IS_PTHREAD){GROWABLE_HEAP_I32()[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback(Module);continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func)}else{Module[\"dynCall_vi\"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;if(ENVIRONMENT_IS_PTHREAD)runtimeInitialized=true;function preRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){if(ENVIRONMENT_IS_PTHREAD)return;callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_ceil=Math.ceil;var Math_floor=Math.floor;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){assert(!ENVIRONMENT_IS_PTHREAD,\"addRunDependency cannot be used in a pthread worker\");runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}if(ENVIRONMENT_IS_PTHREAD)console.error(\"Pthread aborting at \"+(new Error).stack);what+=\"\";out(what);err(what);ABORT=true;EXITSTATUS=1;what=\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix=\"file://\";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile=\"tfjs-backend-wasm-threaded-simd.wasm\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw\"both async and sync fetching of the wasm failed\"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch===\"function\"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\"}return response[\"arrayBuffer\"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={\"a\":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module[\"asm\"]=exports;wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD){var numWorkersToLoad=PThread.unusedWorkers.length;PThread.unusedWorkers.forEach(function(w){PThread.loadWasmModuleToWorker(w,function(){if(!--numWorkersToLoad)removeRunDependency(\"wasm-instantiate\")})})}}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency(\"wasm-instantiate\")}function receiveInstantiatedSource(output){receiveInstance(output[\"instance\"],output[\"module\"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming===\"function\"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch===\"function\"){fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module[\"instantiateWasm\"]){try{var exports=Module[\"instantiateWasm\"](info,receiveInstance);return exports}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);return false}}instantiateAsync();return{}}var ASM_CONSTS={};function initPthreadsJS(){PThread.initRuntime()}if(!ENVIRONMENT_IS_PTHREAD)__ATINIT__.push({func:function(){___wasm_call_ctors()}});var __pthread_ptr=0;var __pthread_is_main_runtime_thread=0;var __pthread_is_main_browser_thread=0;function __register_pthread_ptr(pthreadPtr,isMainBrowserThread,isMainRuntimeThread){pthreadPtr=pthreadPtr|0;isMainBrowserThread=isMainBrowserThread|0;isMainRuntimeThread=isMainRuntimeThread|0;__pthread_ptr=pthreadPtr;__pthread_is_main_browser_thread=isMainBrowserThread;__pthread_is_main_runtime_thread=isMainRuntimeThread}Module[\"__register_pthread_ptr\"]=__register_pthread_ptr;var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var __main_thread_futex_wait_address=13568;function _emscripten_futex_wake(addr,count){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0||count<0)return-28;if(count==0)return 0;if(count>=2147483647)count=Infinity;var mainThreadWaitAddress=Atomics.load(GROWABLE_HEAP_I32(),__main_thread_futex_wait_address>>2);var mainThreadWoken=0;if(mainThreadWaitAddress==addr){var loadedAddr=Atomics.compareExchange(GROWABLE_HEAP_I32(),__main_thread_futex_wait_address>>2,mainThreadWaitAddress,0);if(loadedAddr==mainThreadWaitAddress){--count;mainThreadWoken=1;if(count<=0)return 1}}var ret=Atomics.notify(GROWABLE_HEAP_I32(),addr>>2,count);if(ret>=0)return ret+mainThreadWoken;throw\"Atomics.notify returned an unexpected value \"+ret}Module[\"_emscripten_futex_wake\"]=_emscripten_futex_wake;function __kill_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw\"Internal Error! _kill_thread() can only ever be called from main application thread!\";if(!pthread_ptr)throw\"Internal Error! Null pthread_ptr in _kill_thread!\";GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];pthread.worker.terminate();PThread.freeThreadData(pthread);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(pthread.worker),1);pthread.worker.pthread=undefined}function __cancel_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw\"Internal Error! _cancel_thread() can only ever be called from main application thread!\";if(!pthread_ptr)throw\"Internal Error! Null pthread_ptr in _cancel_thread!\";var pthread=PThread.pthreads[pthread_ptr];pthread.worker.postMessage({\"cmd\":\"cancel\"})}function __cleanup_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw\"Internal Error! _cleanup_thread() can only ever be called from main application thread!\";if(!pthread_ptr)throw\"Internal Error! Null pthread_ptr in _cleanup_thread!\";GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];if(pthread){var worker=pthread.worker;PThread.returnWorkerToPool(worker)}}var PThread={MAIN_THREAD_ID:1,mainThreadInfo:{schedPolicy:0,schedPrio:0},unusedWorkers:[],runningWorkers:[],initRuntime:function(){__register_pthread_ptr(PThread.mainThreadBlock,!ENVIRONMENT_IS_WORKER,1);_emscripten_register_main_browser_thread_id(PThread.mainThreadBlock)},initMainThreadBlock:function(){var pthreadPoolSize=8;for(var i=0;i>2]=PThread.mainThreadBlock;var headPtr=PThread.mainThreadBlock+156;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var tlsMemory=13056;for(var i=0;i<128;++i)GROWABLE_HEAP_U32()[tlsMemory/4+i]=0;Atomics.store(GROWABLE_HEAP_U32(),PThread.mainThreadBlock+104>>2,tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),PThread.mainThreadBlock+40>>2,PThread.mainThreadBlock);Atomics.store(GROWABLE_HEAP_U32(),PThread.mainThreadBlock+44>>2,42)},initWorker:function(){},pthreads:{},exitHandlers:null,setThreadStatus:function(){},runExitHandlers:function(){if(PThread.exitHandlers!==null){while(PThread.exitHandlers.length>0){PThread.exitHandlers.pop()()}PThread.exitHandlers=null}if(ENVIRONMENT_IS_PTHREAD&&threadInfoStruct)___pthread_tsd_run_dtors()},threadExit:function(exitCode){var tb=_pthread_self();if(tb){Atomics.store(GROWABLE_HEAP_U32(),tb+4>>2,exitCode);Atomics.store(GROWABLE_HEAP_U32(),tb+0>>2,1);Atomics.store(GROWABLE_HEAP_U32(),tb+60>>2,1);Atomics.store(GROWABLE_HEAP_U32(),tb+64>>2,0);PThread.runExitHandlers();_emscripten_futex_wake(tb+0,2147483647);__register_pthread_ptr(0,0,0);threadInfoStruct=0;if(ENVIRONMENT_IS_PTHREAD){postMessage({\"cmd\":\"exit\"})}}},threadCancel:function(){PThread.runExitHandlers();Atomics.store(GROWABLE_HEAP_U32(),threadInfoStruct+4>>2,-1);Atomics.store(GROWABLE_HEAP_U32(),threadInfoStruct+0>>2,1);_emscripten_futex_wake(threadInfoStruct+0,2147483647);threadInfoStruct=selfThreadId=0;__register_pthread_ptr(0,0,0);postMessage({\"cmd\":\"cancelDone\"})},terminateAllThreads:function(){for(var t in PThread.pthreads){var pthread=PThread.pthreads[t];if(pthread&&pthread.worker){PThread.returnWorkerToPool(pthread.worker)}}PThread.pthreads={};for(var i=0;i>2];GROWABLE_HEAP_I32()[pthread.threadInfoStruct+104>>2]=0;_free(tlsMemory);_free(pthread.threadInfoStruct)}pthread.threadInfoStruct=0;if(pthread.allocatedOwnStack&&pthread.stackBase)_free(pthread.stackBase);pthread.stackBase=0;if(pthread.worker)pthread.worker.pthread=null},returnWorkerToPool:function(worker){delete PThread.pthreads[worker.pthread.thread];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);PThread.freeThreadData(worker.pthread);worker.pthread=undefined},receiveObjectTransfer:function(data){},loadWasmModuleToWorker:function(worker,onFinishedLoading){worker.onmessage=function(e){var d=e[\"data\"];var cmd=d[\"cmd\"];if(worker.pthread)PThread.currentProxiedOperationCallerThread=worker.pthread.threadInfoStruct;if(d[\"targetThread\"]&&d[\"targetThread\"]!=_pthread_self()){var thread=PThread.pthreads[d.targetThread];if(thread){thread.worker.postMessage(e.data,d[\"transferList\"])}else{console.error('Internal error! Worker sent a message \"'+cmd+'\" to target pthread '+d[\"targetThread\"]+\", but that thread no longer exists!\")}PThread.currentProxiedOperationCallerThread=undefined;return}if(cmd===\"processQueuedMainThreadWork\"){_emscripten_main_thread_process_queued_calls()}else if(cmd===\"spawnThread\"){__spawn_thread(e.data)}else if(cmd===\"cleanupThread\"){__cleanup_thread(d[\"thread\"])}else if(cmd===\"killThread\"){__kill_thread(d[\"thread\"])}else if(cmd===\"cancelThread\"){__cancel_thread(d[\"thread\"])}else if(cmd===\"loaded\"){worker.loaded=true;if(onFinishedLoading)onFinishedLoading(worker);if(worker.runPthread){worker.runPthread();delete worker.runPthread}}else if(cmd===\"print\"){out(\"Thread \"+d[\"threadId\"]+\": \"+d[\"text\"])}else if(cmd===\"printErr\"){err(\"Thread \"+d[\"threadId\"]+\": \"+d[\"text\"])}else if(cmd===\"alert\"){alert(\"Thread \"+d[\"threadId\"]+\": \"+d[\"text\"])}else if(cmd===\"exit\"){var detached=worker.pthread&&Atomics.load(GROWABLE_HEAP_U32(),worker.pthread.thread+68>>2);if(detached){PThread.returnWorkerToPool(worker)}}else if(cmd===\"cancelDone\"){PThread.returnWorkerToPool(worker)}else if(cmd===\"objectTransfer\"){PThread.receiveObjectTransfer(e.data)}else if(e.data.target===\"setimmediate\"){worker.postMessage(e.data)}else{err(\"worker sent an unknown command \"+cmd)}PThread.currentProxiedOperationCallerThread=undefined};worker.onerror=function(e){err(\"pthread sent an error! \"+e.filename+\":\"+e.lineno+\": \"+e.message)};if(ENVIRONMENT_IS_NODE){worker.on(\"message\",function(data){worker.onmessage({data:data})});worker.on(\"error\",function(data){worker.onerror(data)});worker.on(\"exit\",function(data){console.log(\"worker exited - TODO: update the worker queue?\")})}worker.postMessage({\"cmd\":\"load\",\"urlOrBlob\":Module[\"mainScriptUrlOrBlob\"]||_scriptDir,\"wasmMemory\":wasmMemory,\"wasmModule\":wasmModule,\"DYNAMIC_BASE\":DYNAMIC_BASE,\"DYNAMICTOP_PTR\":DYNAMICTOP_PTR})},allocateUnusedWorker:function(){var pthreadMainJs=locateFile(\"tfjs-backend-wasm-threaded-simd.worker.js\");PThread.unusedWorkers.push(new Worker(pthreadMainJs))},getNewWorker:function(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}if(PThread.unusedWorkers.length>0)return PThread.unusedWorkers.pop();else return null},busySpinWait:function(msecs){var t=performance.now()+msecs;while(performance.now()>2]=value;return value}function _atexit(func,arg){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,func,arg);__ATEXIT__.unshift({func:func,arg:arg})}function __emscripten_notify_thread_queue(targetThreadId,mainThreadId){if(targetThreadId==mainThreadId){postMessage({\"cmd\":\"processQueuedMainThreadWork\"})}else if(ENVIRONMENT_IS_PTHREAD){postMessage({\"targetThread\":targetThreadId,\"cmd\":\"processThreadQueue\"})}else{var pthread=PThread.pthreads[targetThreadId];var worker=pthread&&pthread.worker;if(!worker){return}worker.postMessage({\"cmd\":\"processThreadQueue\"})}return 1}function _abort(){abort()}function _emscripten_conditional_set_current_thread_status(expectedStatus,newStatus){expectedStatus=expectedStatus|0;newStatus=newStatus|0}function _emscripten_futex_wait(addr,val,timeout){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0)return-28;if(ENVIRONMENT_IS_WORKER){var ret=Atomics.wait(GROWABLE_HEAP_I32(),addr>>2,val,timeout);if(ret===\"timed-out\")return-73;if(ret===\"not-equal\")return-6;if(ret===\"ok\")return 0;throw\"Atomics.wait returned an unexpected value \"+ret}else{var loadedVal=Atomics.load(GROWABLE_HEAP_I32(),addr>>2);if(val!=loadedVal)return-6;var tNow=performance.now();var tEnd=tNow+timeout;Atomics.store(GROWABLE_HEAP_I32(),__main_thread_futex_wait_address>>2,addr);var ourWaitAddress=addr;while(addr==ourWaitAddress){tNow=performance.now();if(tNow>tEnd){return-73}_emscripten_main_thread_process_queued_calls();addr=Atomics.load(GROWABLE_HEAP_I32(),__main_thread_futex_wait_address>>2)}return 0}}function _emscripten_is_main_browser_thread(){return __pthread_is_main_browser_thread|0}function _emscripten_is_main_runtime_thread(){return __pthread_is_main_runtime_thread|0}function _emscripten_memcpy_big(dest,src,num){GROWABLE_HEAP_U8().copyWithin(dest,src,src+num)}function _emscripten_num_logical_cores(){return navigator[\"hardwareConcurrency\"]}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var stack=stackSave();var args=stackAlloc(numCallArgs*8);var b=args>>3;for(var i=0;i>3]);buf+=8}else{buf=buf+3&~3;args.push(GROWABLE_HEAP_I32()[buf>>2]);buf+=4}}return args}function _emscripten_receive_on_main_thread_js(index,numCallArgs,args){_emscripten_receive_on_main_thread_js_callArgs.length=numCallArgs;var b=args>>3;for(var i=0;i>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();if(requestedSize<=oldSize){return false}var PAGE_MULTIPLE=65536;var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),PAGE_MULTIPLE));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence>2]=eventTypeId;GROWABLE_HEAP_I32()[varargs+4>>2]=eventData;GROWABLE_HEAP_I32()[varargs+8>>2]=userData;_emscripten_async_queue_on_thread_(targetThread,637534208,eventHandlerFunc,eventData,varargs);stackRestore(stackTop)},getTargetThreadForEventCallback:function(targetThread){switch(targetThread){case 1:return 0;case 2:return PThread.currentProxiedOperationCallerThread;default:return targetThread}},getNodeNameForTarget:function(target){if(!target)return\"\";if(target==window)return\"#window\";if(target==screen)return\"#screen\";return target&&target.nodeName?target.nodeName:\"\"},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height){var stackTop=stackSave();var varargs=stackAlloc(12);var targetCanvasPtr=0;if(targetCanvas){targetCanvasPtr=stringToNewUTF8(targetCanvas)}GROWABLE_HEAP_I32()[varargs>>2]=targetCanvasPtr;GROWABLE_HEAP_I32()[varargs+4>>2]=width;GROWABLE_HEAP_I32()[varargs+8>>2]=height;_emscripten_async_queue_on_thread_(targetThread,657457152,0,targetCanvasPtr,varargs);stackRestore(stackTop)}function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread,targetCanvas,width,height){targetCanvas=targetCanvas?UTF8ToString(targetCanvas):\"\";_emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height)}function __maybeCStringToJsString(cString){return cString>2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!==\"undefined\"?document:0,typeof window!==\"undefined\"?window:0];function __findEventTarget(target){target=__maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!==\"undefined\"?document.querySelector(target):undefined);return domElement}function __findCanvasEventTarget(target){return __findEventTarget(target)}function _emscripten_set_canvas_element_size_calling_thread(target,width,height){var canvas=__findCanvasEventTarget(target);if(!canvas)return-4;if(canvas.canvasSharedPtr){GROWABLE_HEAP_I32()[canvas.canvasSharedPtr>>2]=width;GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+4>>2]=height}if(canvas.offscreenCanvas||!canvas.controlTransferredOffscreen){if(canvas.offscreenCanvas)canvas=canvas.offscreenCanvas;var autoResizeViewport=false;if(canvas.GLctxObject&&canvas.GLctxObject.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(2978);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else if(canvas.canvasSharedPtr){var targetThread=GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+8>>2];_emscripten_set_offscreencanvas_size_on_target_thread(targetThread,target,width,height);return 1}else{return-4}return 0}function _emscripten_set_canvas_element_size_main_thread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(2,1,target,width,height);return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=__findCanvasEventTarget(target);if(canvas){return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}else{return _emscripten_set_canvas_element_size_main_thread(target,width,height)}}function _emscripten_set_current_thread_status(newStatus){newStatus=newStatus|0}function _emscripten_set_thread_name(threadId,name){threadId=threadId|0;name=name|0}function __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension(\"ANGLE_instanced_arrays\");if(ext){ctx[\"vertexAttribDivisor\"]=function(index,divisor){ext[\"vertexAttribDivisorANGLE\"](index,divisor)};ctx[\"drawArraysInstanced\"]=function(mode,first,count,primcount){ext[\"drawArraysInstancedANGLE\"](mode,first,count,primcount)};ctx[\"drawElementsInstanced\"]=function(mode,count,type,indices,primcount){ext[\"drawElementsInstancedANGLE\"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension(\"OES_vertex_array_object\");if(ext){ctx[\"createVertexArray\"]=function(){return ext[\"createVertexArrayOES\"]()};ctx[\"deleteVertexArray\"]=function(vao){ext[\"deleteVertexArrayOES\"](vao)};ctx[\"bindVertexArray\"]=function(vao){ext[\"bindVertexArrayOES\"](vao)};ctx[\"isVertexArray\"]=function(vao){return ext[\"isVertexArrayOES\"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension(\"WEBGL_draw_buffers\");if(ext){ctx[\"drawBuffers\"]=function(n,bufs){ext[\"drawBuffersWEBGL\"](n,bufs)};return 1}}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){var miniTempFloatBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(GROWABLE_HEAP_I32()[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext(\"webgl\",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);GROWABLE_HEAP_I32()[handle+4>>2]=_pthread_self();var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault===\"undefined\"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents===\"object\")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle].handle);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;__webgl_enable_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension(\"EXT_disjoint_timer_query\");var automaticallyEnabledExtensions=[\"OES_texture_float\",\"OES_texture_half_float\",\"OES_standard_derivatives\",\"OES_vertex_array_object\",\"WEBGL_compressed_texture_s3tc\",\"WEBGL_depth_texture\",\"OES_element_index_uint\",\"EXT_texture_filter_anisotropic\",\"EXT_frag_depth\",\"WEBGL_draw_buffers\",\"ANGLE_instanced_arrays\",\"OES_texture_float_linear\",\"OES_texture_half_float_linear\",\"EXT_blend_minmax\",\"EXT_shader_texture_lod\",\"EXT_texture_norm16\",\"WEBGL_compressed_texture_pvrtc\",\"EXT_color_buffer_half_float\",\"WEBGL_color_buffer_float\",\"EXT_sRGB\",\"WEBGL_compressed_texture_etc1\",\"EXT_disjoint_timer_query\",\"WEBGL_compressed_texture_etc\",\"WEBGL_compressed_texture_astc\",\"EXT_color_buffer_float\",\"WEBGL_compressed_texture_s3tc_srgb\",\"EXT_disjoint_timer_query_webgl2\",\"WEBKIT_WEBGL_compressed_texture_pvrtc\"];var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2;contextAttributes[\"alpha\"]=!!GROWABLE_HEAP_I32()[a+(0>>2)];contextAttributes[\"depth\"]=!!GROWABLE_HEAP_I32()[a+(4>>2)];contextAttributes[\"stencil\"]=!!GROWABLE_HEAP_I32()[a+(8>>2)];contextAttributes[\"antialias\"]=!!GROWABLE_HEAP_I32()[a+(12>>2)];contextAttributes[\"premultipliedAlpha\"]=!!GROWABLE_HEAP_I32()[a+(16>>2)];contextAttributes[\"preserveDrawingBuffer\"]=!!GROWABLE_HEAP_I32()[a+(20>>2)];var powerPreference=GROWABLE_HEAP_I32()[a+(24>>2)];contextAttributes[\"powerPreference\"]=__emscripten_webgl_power_preferences[powerPreference];contextAttributes[\"failIfMajorPerformanceCaveat\"]=!!GROWABLE_HEAP_I32()[a+(28>>2)];contextAttributes.majorVersion=GROWABLE_HEAP_I32()[a+(32>>2)];contextAttributes.minorVersion=GROWABLE_HEAP_I32()[a+(36>>2)];contextAttributes.enableExtensionsByDefault=GROWABLE_HEAP_I32()[a+(40>>2)];contextAttributes.explicitSwapControl=GROWABLE_HEAP_I32()[a+(44>>2)];contextAttributes.proxyContextToMainThread=GROWABLE_HEAP_I32()[a+(48>>2)];contextAttributes.renderViaOffscreenBackBuffer=GROWABLE_HEAP_I32()[a+(52>>2)];var canvas=__findCanvasEventTarget(target);if(!canvas){return-4}if(contextAttributes.explicitSwapControl){return-1}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _emscripten_webgl_create_context(a0,a1){return _emscripten_webgl_do_create_context(a0,a1)}var PATH={splitPath:function(filename){var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1)}else if(last===\"..\"){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)===\"/\",trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p}),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\"}if(path&&trailingSlash){path+=\"/\"}return(isAbsolute?\"/\":\"\")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\"}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path===\"/\")return\"/\";var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join(\"/\"))},join2:function(l,r){return PATH.normalize(l+\"/\"+r)}};var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=GROWABLE_HEAP_I32()[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(3,1,fd);return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(4,1,fd,offset_low,offset_high,whence,newOffset)}function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(5,1,fd,iov,iovcnt,pnum);var num=0;for(var i=0;i>2];var len=GROWABLE_HEAP_I32()[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _pthread_cleanup_pop(execute){var routine=PThread.exitHandlers.pop();if(execute)routine()}function _pthread_cleanup_push(routine,arg){if(PThread.exitHandlers===null){PThread.exitHandlers=[]}PThread.exitHandlers.push(function(){dynCall_vi(routine,arg)})}function __spawn_thread(threadParams){if(ENVIRONMENT_IS_PTHREAD)throw\"Internal Error! _spawn_thread() can only ever be called from main application thread!\";var worker=PThread.getNewWorker();if(worker.pthread!==undefined)throw\"Internal error!\";if(!threadParams.pthread_ptr)throw\"Internal error, no pthread ptr!\";PThread.runningWorkers.push(worker);var tlsMemory=_malloc(128*4);for(var i=0;i<128;++i){GROWABLE_HEAP_I32()[tlsMemory+i*4>>2]=0}var stackHigh=threadParams.stackBase+threadParams.stackSize;var pthread=PThread.pthreads[threadParams.pthread_ptr]={worker:worker,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize,allocatedOwnStack:threadParams.allocatedOwnStack,thread:threadParams.pthread_ptr,threadInfoStruct:threadParams.pthread_ptr};var tis=pthread.threadInfoStruct>>2;Atomics.store(GROWABLE_HEAP_U32(),tis+(0>>2),0);Atomics.store(GROWABLE_HEAP_U32(),tis+(4>>2),0);Atomics.store(GROWABLE_HEAP_U32(),tis+(8>>2),0);Atomics.store(GROWABLE_HEAP_U32(),tis+(68>>2),threadParams.detached);Atomics.store(GROWABLE_HEAP_U32(),tis+(104>>2),tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),tis+(48>>2),0);Atomics.store(GROWABLE_HEAP_U32(),tis+(40>>2),pthread.threadInfoStruct);Atomics.store(GROWABLE_HEAP_U32(),tis+(44>>2),42);Atomics.store(GROWABLE_HEAP_U32(),tis+(108>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(84>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(80>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(108+8>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(108+12>>2),threadParams.detached);Atomics.store(GROWABLE_HEAP_U32(),tis+(108+20>>2),threadParams.schedPolicy);Atomics.store(GROWABLE_HEAP_U32(),tis+(108+24>>2),threadParams.schedPrio);var global_libc=_emscripten_get_global_libc();var global_locale=global_libc+40;Atomics.store(GROWABLE_HEAP_U32(),tis+(176>>2),global_locale);worker.pthread=pthread;var msg={\"cmd\":\"run\",\"start_routine\":threadParams.startRoutine,\"arg\":threadParams.arg,\"threadInfoStruct\":threadParams.pthread_ptr,\"selfThreadId\":threadParams.pthread_ptr,\"parentThreadId\":threadParams.parent_pthread_ptr,\"stackBase\":threadParams.stackBase,\"stackSize\":threadParams.stackSize};worker.runPthread=function(){msg.time=performance.now();worker.postMessage(msg,threadParams.transferList)};if(worker.loaded){worker.runPthread();delete worker.runPthread}}function _pthread_getschedparam(thread,policy,schedparam){if(!policy&&!schedparam)return ERRNO_CODES.EINVAL;if(!thread){err(\"pthread_getschedparam called with a null thread pointer!\");return ERRNO_CODES.ESRCH}var self=GROWABLE_HEAP_I32()[thread+12>>2];if(self!==thread){err(\"pthread_getschedparam attempted on thread \"+thread+\", which does not point to a valid thread, or does not exist anymore!\");return ERRNO_CODES.ESRCH}var schedPolicy=Atomics.load(GROWABLE_HEAP_U32(),thread+108+20>>2);var schedPrio=Atomics.load(GROWABLE_HEAP_U32(),thread+108+24>>2);if(policy)GROWABLE_HEAP_I32()[policy>>2]=schedPolicy;if(schedparam)GROWABLE_HEAP_I32()[schedparam>>2]=schedPrio;return 0}function _pthread_self(){return __pthread_ptr|0}Module[\"_pthread_self\"]=_pthread_self;function _pthread_create(pthread_ptr,attr,start_routine,arg){if(typeof SharedArrayBuffer===\"undefined\"){err(\"Current environment does not support SharedArrayBuffer, pthreads are not available!\");return 6}if(!pthread_ptr){err(\"pthread_create called with a null thread pointer!\");return 28}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return _emscripten_sync_run_in_main_thread_4(687865856,pthread_ptr,attr,start_routine,arg)}if(error)return error;var stackSize=0;var stackBase=0;var detached=0;var schedPolicy=0;var schedPrio=0;if(attr){stackSize=GROWABLE_HEAP_I32()[attr>>2];stackSize+=81920;stackBase=GROWABLE_HEAP_I32()[attr+8>>2];detached=GROWABLE_HEAP_I32()[attr+12>>2]!==0;var inheritSched=GROWABLE_HEAP_I32()[attr+16>>2]===0;if(inheritSched){var prevSchedPolicy=GROWABLE_HEAP_I32()[attr+20>>2];var prevSchedPrio=GROWABLE_HEAP_I32()[attr+24>>2];var parentThreadPtr=PThread.currentProxiedOperationCallerThread?PThread.currentProxiedOperationCallerThread:_pthread_self();_pthread_getschedparam(parentThreadPtr,attr+20,attr+24);schedPolicy=GROWABLE_HEAP_I32()[attr+20>>2];schedPrio=GROWABLE_HEAP_I32()[attr+24>>2];GROWABLE_HEAP_I32()[attr+20>>2]=prevSchedPolicy;GROWABLE_HEAP_I32()[attr+24>>2]=prevSchedPrio}else{schedPolicy=GROWABLE_HEAP_I32()[attr+20>>2];schedPrio=GROWABLE_HEAP_I32()[attr+24>>2]}}else{stackSize=2097152}var allocatedOwnStack=stackBase==0;if(allocatedOwnStack){stackBase=_memalign(16,stackSize)}else{stackBase-=stackSize;assert(stackBase>0)}var threadInfoStruct=_malloc(232);for(var i=0;i<232>>2;++i)GROWABLE_HEAP_U32()[(threadInfoStruct>>2)+i]=0;GROWABLE_HEAP_I32()[pthread_ptr>>2]=threadInfoStruct;GROWABLE_HEAP_I32()[threadInfoStruct+12>>2]=threadInfoStruct;var headPtr=threadInfoStruct+156;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var threadParams={stackBase:stackBase,stackSize:stackSize,allocatedOwnStack:allocatedOwnStack,schedPolicy:schedPolicy,schedPrio:schedPrio,detached:detached,startRoutine:start_routine,pthread_ptr:threadInfoStruct,parent_pthread_ptr:_pthread_self(),arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd=\"spawnThread\";postMessage(threadParams,transferList)}else{__spawn_thread(threadParams)}return 0}function _roundf(d){d=+d;return d>=+0?+Math_floor(d+ +.5):+Math_ceil(d-+.5)}function _sysconf(name){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(6,1,name);switch(name){case 30:return 16384;case 85:var maxHeapSize=2147483648;return maxHeapSize/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:case 79:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator===\"object\")return navigator[\"hardwareConcurrency\"]||1;return 1}}setErrNo(28);return-1}if(!ENVIRONMENT_IS_PTHREAD)PThread.initMainThreadBlock();else PThread.initWorker();var GLctx;GL.init();var proxiedFunctionTable=[null,_atexit,_emscripten_set_canvas_element_size_main_thread,_fd_close,_fd_seek,_fd_write,_sysconf];var asmLibraryArg={\"e\":___assert_fail,\"r\":___call_main,\"w\":__emscripten_notify_thread_queue,\"a\":_abort,\"l\":_emscripten_conditional_set_current_thread_status,\"d\":_emscripten_futex_wait,\"c\":_emscripten_futex_wake,\"h\":_emscripten_get_now,\"g\":_emscripten_is_main_browser_thread,\"x\":_emscripten_is_main_runtime_thread,\"q\":_emscripten_memcpy_big,\"B\":_emscripten_num_logical_cores,\"t\":_emscripten_receive_on_main_thread_js,\"A\":_emscripten_resize_heap,\"u\":_emscripten_set_canvas_element_size,\"k\":_emscripten_set_current_thread_status,\"s\":_emscripten_set_thread_name,\"v\":_emscripten_webgl_create_context,\"m\":_fd_close,\"o\":_fd_seek,\"i\":_fd_write,\"p\":initPthreadsJS,\"memory\":wasmMemory||Module[\"wasmMemory\"],\"y\":_pthread_cleanup_pop,\"z\":_pthread_cleanup_push,\"j\":_pthread_create,\"b\":_pthread_self,\"f\":_roundf,\"n\":_sysconf,\"table\":wasmTable};var asm=createWasm();Module[\"asm\"]=asm;var ___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=function(){return(___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=Module[\"asm\"][\"C\"]).apply(null,arguments)};var _init=Module[\"_init\"]=function(){return(_init=Module[\"_init\"]=Module[\"asm\"][\"D\"]).apply(null,arguments)};var _register_tensor=Module[\"_register_tensor\"]=function(){return(_register_tensor=Module[\"_register_tensor\"]=Module[\"asm\"][\"E\"]).apply(null,arguments)};var _dispose_data=Module[\"_dispose_data\"]=function(){return(_dispose_data=Module[\"_dispose_data\"]=Module[\"asm\"][\"F\"]).apply(null,arguments)};var _dispose=Module[\"_dispose\"]=function(){return(_dispose=Module[\"_dispose\"]=Module[\"asm\"][\"G\"]).apply(null,arguments)};var _Abs=Module[\"_Abs\"]=function(){return(_Abs=Module[\"_Abs\"]=Module[\"asm\"][\"H\"]).apply(null,arguments)};var _Add=Module[\"_Add\"]=function(){return(_Add=Module[\"_Add\"]=Module[\"asm\"][\"I\"]).apply(null,arguments)};var _AddN=Module[\"_AddN\"]=function(){return(_AddN=Module[\"_AddN\"]=Module[\"asm\"][\"J\"]).apply(null,arguments)};var _ArgMax=Module[\"_ArgMax\"]=function(){return(_ArgMax=Module[\"_ArgMax\"]=Module[\"asm\"][\"K\"]).apply(null,arguments)};var _AvgPool=Module[\"_AvgPool\"]=function(){return(_AvgPool=Module[\"_AvgPool\"]=Module[\"asm\"][\"L\"]).apply(null,arguments)};var _BatchMatMul=Module[\"_BatchMatMul\"]=function(){return(_BatchMatMul=Module[\"_BatchMatMul\"]=Module[\"asm\"][\"M\"]).apply(null,arguments)};var _ClipByValue=Module[\"_ClipByValue\"]=function(){return(_ClipByValue=Module[\"_ClipByValue\"]=Module[\"asm\"][\"N\"]).apply(null,arguments)};var _Conv2D=Module[\"_Conv2D\"]=function(){return(_Conv2D=Module[\"_Conv2D\"]=Module[\"asm\"][\"O\"]).apply(null,arguments)};var _Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=function(){return(_Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=Module[\"asm\"][\"P\"]).apply(null,arguments)};var _Cos=Module[\"_Cos\"]=function(){return(_Cos=Module[\"_Cos\"]=Module[\"asm\"][\"Q\"]).apply(null,arguments)};var _CropAndResize=Module[\"_CropAndResize\"]=function(){return(_CropAndResize=Module[\"_CropAndResize\"]=Module[\"asm\"][\"R\"]).apply(null,arguments)};var _Cumsum=Module[\"_Cumsum\"]=function(){return(_Cumsum=Module[\"_Cumsum\"]=Module[\"asm\"][\"S\"]).apply(null,arguments)};var _DepthToSpace=Module[\"_DepthToSpace\"]=function(){return(_DepthToSpace=Module[\"_DepthToSpace\"]=Module[\"asm\"][\"T\"]).apply(null,arguments)};var _DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=function(){return(_DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=Module[\"asm\"][\"U\"]).apply(null,arguments)};var _Equal=Module[\"_Equal\"]=function(){return(_Equal=Module[\"_Equal\"]=Module[\"asm\"][\"V\"]).apply(null,arguments)};var _Exp=Module[\"_Exp\"]=function(){return(_Exp=Module[\"_Exp\"]=Module[\"asm\"][\"W\"]).apply(null,arguments)};var _FlipLeftRight=Module[\"_FlipLeftRight\"]=function(){return(_FlipLeftRight=Module[\"_FlipLeftRight\"]=Module[\"asm\"][\"X\"]).apply(null,arguments)};var _Floor=Module[\"_Floor\"]=function(){return(_Floor=Module[\"_Floor\"]=Module[\"asm\"][\"Y\"]).apply(null,arguments)};var _FloorDiv=Module[\"_FloorDiv\"]=function(){return(_FloorDiv=Module[\"_FloorDiv\"]=Module[\"asm\"][\"Z\"]).apply(null,arguments)};var _FusedBatchNorm=Module[\"_FusedBatchNorm\"]=function(){return(_FusedBatchNorm=Module[\"_FusedBatchNorm\"]=Module[\"asm\"][\"_\"]).apply(null,arguments)};var _FusedConv2D=Module[\"_FusedConv2D\"]=function(){return(_FusedConv2D=Module[\"_FusedConv2D\"]=Module[\"asm\"][\"$\"]).apply(null,arguments)};var _FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=function(){return(_FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=Module[\"asm\"][\"aa\"]).apply(null,arguments)};var _Gather=Module[\"_Gather\"]=function(){return(_Gather=Module[\"_Gather\"]=Module[\"asm\"][\"ba\"]).apply(null,arguments)};var _GatherNd=Module[\"_GatherNd\"]=function(){return(_GatherNd=Module[\"_GatherNd\"]=Module[\"asm\"][\"ca\"]).apply(null,arguments)};var _Greater=Module[\"_Greater\"]=function(){return(_Greater=Module[\"_Greater\"]=Module[\"asm\"][\"da\"]).apply(null,arguments)};var _GreaterEqual=Module[\"_GreaterEqual\"]=function(){return(_GreaterEqual=Module[\"_GreaterEqual\"]=Module[\"asm\"][\"ea\"]).apply(null,arguments)};var _LeakyRelu=Module[\"_LeakyRelu\"]=function(){return(_LeakyRelu=Module[\"_LeakyRelu\"]=Module[\"asm\"][\"fa\"]).apply(null,arguments)};var _Less=Module[\"_Less\"]=function(){return(_Less=Module[\"_Less\"]=Module[\"asm\"][\"ga\"]).apply(null,arguments)};var _LessEqual=Module[\"_LessEqual\"]=function(){return(_LessEqual=Module[\"_LessEqual\"]=Module[\"asm\"][\"ha\"]).apply(null,arguments)};var _Log=Module[\"_Log\"]=function(){return(_Log=Module[\"_Log\"]=Module[\"asm\"][\"ia\"]).apply(null,arguments)};var _LogicalAnd=Module[\"_LogicalAnd\"]=function(){return(_LogicalAnd=Module[\"_LogicalAnd\"]=Module[\"asm\"][\"ja\"]).apply(null,arguments)};var _Max=Module[\"_Max\"]=function(){return(_Max=Module[\"_Max\"]=Module[\"asm\"][\"ka\"]).apply(null,arguments)};var _MaxPool=Module[\"_MaxPool\"]=function(){return(_MaxPool=Module[\"_MaxPool\"]=Module[\"asm\"][\"la\"]).apply(null,arguments)};var _Maximum=Module[\"_Maximum\"]=function(){return(_Maximum=Module[\"_Maximum\"]=Module[\"asm\"][\"ma\"]).apply(null,arguments)};var _Mean=Module[\"_Mean\"]=function(){return(_Mean=Module[\"_Mean\"]=Module[\"asm\"][\"na\"]).apply(null,arguments)};var _Min=Module[\"_Min\"]=function(){return(_Min=Module[\"_Min\"]=Module[\"asm\"][\"oa\"]).apply(null,arguments)};var _Minimum=Module[\"_Minimum\"]=function(){return(_Minimum=Module[\"_Minimum\"]=Module[\"asm\"][\"pa\"]).apply(null,arguments)};var _Multiply=Module[\"_Multiply\"]=function(){return(_Multiply=Module[\"_Multiply\"]=Module[\"asm\"][\"qa\"]).apply(null,arguments)};var _Neg=Module[\"_Neg\"]=function(){return(_Neg=Module[\"_Neg\"]=Module[\"asm\"][\"ra\"]).apply(null,arguments)};var _NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=function(){return(_NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=Module[\"asm\"][\"sa\"]).apply(null,arguments)};var _NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=function(){return(_NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=Module[\"asm\"][\"ta\"]).apply(null,arguments)};var _NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=function(){return(_NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=Module[\"asm\"][\"ua\"]).apply(null,arguments)};var _NotEqual=Module[\"_NotEqual\"]=function(){return(_NotEqual=Module[\"_NotEqual\"]=Module[\"asm\"][\"va\"]).apply(null,arguments)};var _OneHot=Module[\"_OneHot\"]=function(){return(_OneHot=Module[\"_OneHot\"]=Module[\"asm\"][\"wa\"]).apply(null,arguments)};var _PadV2=Module[\"_PadV2\"]=function(){return(_PadV2=Module[\"_PadV2\"]=Module[\"asm\"][\"xa\"]).apply(null,arguments)};var _Pow=Module[\"_Pow\"]=function(){return(_Pow=Module[\"_Pow\"]=Module[\"asm\"][\"ya\"]).apply(null,arguments)};var _Prelu=Module[\"_Prelu\"]=function(){return(_Prelu=Module[\"_Prelu\"]=Module[\"asm\"][\"za\"]).apply(null,arguments)};var _Prod=Module[\"_Prod\"]=function(){return(_Prod=Module[\"_Prod\"]=Module[\"asm\"][\"Aa\"]).apply(null,arguments)};var _RealDiv=Module[\"_RealDiv\"]=function(){return(_RealDiv=Module[\"_RealDiv\"]=Module[\"asm\"][\"Ba\"]).apply(null,arguments)};var _Relu=Module[\"_Relu\"]=function(){return(_Relu=Module[\"_Relu\"]=Module[\"asm\"][\"Ca\"]).apply(null,arguments)};var _Relu6=Module[\"_Relu6\"]=function(){return(_Relu6=Module[\"_Relu6\"]=Module[\"asm\"][\"Da\"]).apply(null,arguments)};var _ResizeBilinear=Module[\"_ResizeBilinear\"]=function(){return(_ResizeBilinear=Module[\"_ResizeBilinear\"]=Module[\"asm\"][\"Ea\"]).apply(null,arguments)};var _Reverse=Module[\"_Reverse\"]=function(){return(_Reverse=Module[\"_Reverse\"]=Module[\"asm\"][\"Fa\"]).apply(null,arguments)};var _RotateWithOffset=Module[\"_RotateWithOffset\"]=function(){return(_RotateWithOffset=Module[\"_RotateWithOffset\"]=Module[\"asm\"][\"Ga\"]).apply(null,arguments)};var _Rsqrt=Module[\"_Rsqrt\"]=function(){return(_Rsqrt=Module[\"_Rsqrt\"]=Module[\"asm\"][\"Ha\"]).apply(null,arguments)};var _ScatterNd=Module[\"_ScatterNd\"]=function(){return(_ScatterNd=Module[\"_ScatterNd\"]=Module[\"asm\"][\"Ia\"]).apply(null,arguments)};var _SelectV2=Module[\"_SelectV2\"]=function(){return(_SelectV2=Module[\"_SelectV2\"]=Module[\"asm\"][\"Ja\"]).apply(null,arguments)};var _Sigmoid=Module[\"_Sigmoid\"]=function(){return(_Sigmoid=Module[\"_Sigmoid\"]=Module[\"asm\"][\"Ka\"]).apply(null,arguments)};var _Sin=Module[\"_Sin\"]=function(){return(_Sin=Module[\"_Sin\"]=Module[\"asm\"][\"La\"]).apply(null,arguments)};var _Softmax=Module[\"_Softmax\"]=function(){return(_Softmax=Module[\"_Softmax\"]=Module[\"asm\"][\"Ma\"]).apply(null,arguments)};var _Sqrt=Module[\"_Sqrt\"]=function(){return(_Sqrt=Module[\"_Sqrt\"]=Module[\"asm\"][\"Na\"]).apply(null,arguments)};var _Square=Module[\"_Square\"]=function(){return(_Square=Module[\"_Square\"]=Module[\"asm\"][\"Oa\"]).apply(null,arguments)};var _SquaredDifference=Module[\"_SquaredDifference\"]=function(){return(_SquaredDifference=Module[\"_SquaredDifference\"]=Module[\"asm\"][\"Pa\"]).apply(null,arguments)};var _StridedSlice=Module[\"_StridedSlice\"]=function(){return(_StridedSlice=Module[\"_StridedSlice\"]=Module[\"asm\"][\"Qa\"]).apply(null,arguments)};var _Sub=Module[\"_Sub\"]=function(){return(_Sub=Module[\"_Sub\"]=Module[\"asm\"][\"Ra\"]).apply(null,arguments)};var _Sum=Module[\"_Sum\"]=function(){return(_Sum=Module[\"_Sum\"]=Module[\"asm\"][\"Sa\"]).apply(null,arguments)};var _Tanh=Module[\"_Tanh\"]=function(){return(_Tanh=Module[\"_Tanh\"]=Module[\"asm\"][\"Ta\"]).apply(null,arguments)};var _Tile=Module[\"_Tile\"]=function(){return(_Tile=Module[\"_Tile\"]=Module[\"asm\"][\"Ua\"]).apply(null,arguments)};var _TopK=Module[\"_TopK\"]=function(){return(_TopK=Module[\"_TopK\"]=Module[\"asm\"][\"Va\"]).apply(null,arguments)};var _Transpose=Module[\"_Transpose\"]=function(){return(_Transpose=Module[\"_Transpose\"]=Module[\"asm\"][\"Wa\"]).apply(null,arguments)};var __FusedMatMul=Module[\"__FusedMatMul\"]=function(){return(__FusedMatMul=Module[\"__FusedMatMul\"]=Module[\"asm\"][\"Xa\"]).apply(null,arguments)};var _malloc=Module[\"_malloc\"]=function(){return(_malloc=Module[\"_malloc\"]=Module[\"asm\"][\"Ya\"]).apply(null,arguments)};var _free=Module[\"_free\"]=function(){return(_free=Module[\"_free\"]=Module[\"asm\"][\"Za\"]).apply(null,arguments)};var ___errno_location=Module[\"___errno_location\"]=function(){return(___errno_location=Module[\"___errno_location\"]=Module[\"asm\"][\"_a\"]).apply(null,arguments)};var _emscripten_get_global_libc=Module[\"_emscripten_get_global_libc\"]=function(){return(_emscripten_get_global_libc=Module[\"_emscripten_get_global_libc\"]=Module[\"asm\"][\"$a\"]).apply(null,arguments)};var ___em_js__initPthreadsJS=Module[\"___em_js__initPthreadsJS\"]=function(){return(___em_js__initPthreadsJS=Module[\"___em_js__initPthreadsJS\"]=Module[\"asm\"][\"ab\"]).apply(null,arguments)};var _memalign=Module[\"_memalign\"]=function(){return(_memalign=Module[\"_memalign\"]=Module[\"asm\"][\"bb\"]).apply(null,arguments)};var ___pthread_tsd_run_dtors=Module[\"___pthread_tsd_run_dtors\"]=function(){return(___pthread_tsd_run_dtors=Module[\"___pthread_tsd_run_dtors\"]=Module[\"asm\"][\"cb\"]).apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module[\"_emscripten_main_thread_process_queued_calls\"]=function(){return(_emscripten_main_thread_process_queued_calls=Module[\"_emscripten_main_thread_process_queued_calls\"]=Module[\"asm\"][\"db\"]).apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module[\"_emscripten_current_thread_process_queued_calls\"]=function(){return(_emscripten_current_thread_process_queued_calls=Module[\"_emscripten_current_thread_process_queued_calls\"]=Module[\"asm\"][\"eb\"]).apply(null,arguments)};var _emscripten_register_main_browser_thread_id=Module[\"_emscripten_register_main_browser_thread_id\"]=function(){return(_emscripten_register_main_browser_thread_id=Module[\"_emscripten_register_main_browser_thread_id\"]=Module[\"asm\"][\"fb\"]).apply(null,arguments)};var _emscripten_main_browser_thread_id=Module[\"_emscripten_main_browser_thread_id\"]=function(){return(_emscripten_main_browser_thread_id=Module[\"_emscripten_main_browser_thread_id\"]=Module[\"asm\"][\"gb\"]).apply(null,arguments)};var _emscripten_async_run_in_main_thread=Module[\"_emscripten_async_run_in_main_thread\"]=function(){return(_emscripten_async_run_in_main_thread=Module[\"_emscripten_async_run_in_main_thread\"]=Module[\"asm\"][\"hb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread=Module[\"_emscripten_sync_run_in_main_thread\"]=function(){return(_emscripten_sync_run_in_main_thread=Module[\"_emscripten_sync_run_in_main_thread\"]=Module[\"asm\"][\"ib\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_0=Module[\"_emscripten_sync_run_in_main_thread_0\"]=function(){return(_emscripten_sync_run_in_main_thread_0=Module[\"_emscripten_sync_run_in_main_thread_0\"]=Module[\"asm\"][\"jb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_1=Module[\"_emscripten_sync_run_in_main_thread_1\"]=function(){return(_emscripten_sync_run_in_main_thread_1=Module[\"_emscripten_sync_run_in_main_thread_1\"]=Module[\"asm\"][\"kb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_2=Module[\"_emscripten_sync_run_in_main_thread_2\"]=function(){return(_emscripten_sync_run_in_main_thread_2=Module[\"_emscripten_sync_run_in_main_thread_2\"]=Module[\"asm\"][\"lb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_xprintf_varargs=Module[\"_emscripten_sync_run_in_main_thread_xprintf_varargs\"]=function(){return(_emscripten_sync_run_in_main_thread_xprintf_varargs=Module[\"_emscripten_sync_run_in_main_thread_xprintf_varargs\"]=Module[\"asm\"][\"mb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_3=Module[\"_emscripten_sync_run_in_main_thread_3\"]=function(){return(_emscripten_sync_run_in_main_thread_3=Module[\"_emscripten_sync_run_in_main_thread_3\"]=Module[\"asm\"][\"nb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_4=Module[\"_emscripten_sync_run_in_main_thread_4\"]=function(){return(_emscripten_sync_run_in_main_thread_4=Module[\"_emscripten_sync_run_in_main_thread_4\"]=Module[\"asm\"][\"ob\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_5=Module[\"_emscripten_sync_run_in_main_thread_5\"]=function(){return(_emscripten_sync_run_in_main_thread_5=Module[\"_emscripten_sync_run_in_main_thread_5\"]=Module[\"asm\"][\"pb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_6=Module[\"_emscripten_sync_run_in_main_thread_6\"]=function(){return(_emscripten_sync_run_in_main_thread_6=Module[\"_emscripten_sync_run_in_main_thread_6\"]=Module[\"asm\"][\"qb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_7=Module[\"_emscripten_sync_run_in_main_thread_7\"]=function(){return(_emscripten_sync_run_in_main_thread_7=Module[\"_emscripten_sync_run_in_main_thread_7\"]=Module[\"asm\"][\"rb\"]).apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module[\"_emscripten_run_in_main_runtime_thread_js\"]=function(){return(_emscripten_run_in_main_runtime_thread_js=Module[\"_emscripten_run_in_main_runtime_thread_js\"]=Module[\"asm\"][\"sb\"]).apply(null,arguments)};var _emscripten_async_queue_on_thread_=Module[\"_emscripten_async_queue_on_thread_\"]=function(){return(_emscripten_async_queue_on_thread_=Module[\"_emscripten_async_queue_on_thread_\"]=Module[\"asm\"][\"tb\"]).apply(null,arguments)};var _emscripten_tls_init=Module[\"_emscripten_tls_init\"]=function(){return(_emscripten_tls_init=Module[\"_emscripten_tls_init\"]=Module[\"asm\"][\"ub\"]).apply(null,arguments)};var stackSave=Module[\"stackSave\"]=function(){return(stackSave=Module[\"stackSave\"]=Module[\"asm\"][\"vb\"]).apply(null,arguments)};var stackAlloc=Module[\"stackAlloc\"]=function(){return(stackAlloc=Module[\"stackAlloc\"]=Module[\"asm\"][\"wb\"]).apply(null,arguments)};var stackRestore=Module[\"stackRestore\"]=function(){return(stackRestore=Module[\"stackRestore\"]=Module[\"asm\"][\"xb\"]).apply(null,arguments)};var dynCall_vi=Module[\"dynCall_vi\"]=function(){return(dynCall_vi=Module[\"dynCall_vi\"]=Module[\"asm\"][\"yb\"]).apply(null,arguments)};var dynCall_v=Module[\"dynCall_v\"]=function(){return(dynCall_v=Module[\"dynCall_v\"]=Module[\"asm\"][\"zb\"]).apply(null,arguments)};var dynCall_ii=Module[\"dynCall_ii\"]=function(){return(dynCall_ii=Module[\"dynCall_ii\"]=Module[\"asm\"][\"Ab\"]).apply(null,arguments)};Module[\"asm\"]=asm;Module[\"cwrap\"]=cwrap;Module[\"PThread\"]=PThread;Module[\"PThread\"]=PThread;Module[\"_pthread_self\"]=_pthread_self;Module[\"wasmMemory\"]=wasmMemory;Module[\"ExitStatus\"]=ExitStatus;var calledRun;Module[\"then\"]=function(func){if(calledRun){func(Module)}else{var old=Module[\"onRuntimeInitialized\"];Module[\"onRuntimeInitialized\"]=function(){if(old)old();func(Module)}}return Module};function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}Module[\"run\"]=run;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}if(!ENVIRONMENT_IS_PTHREAD)noExitRuntime=true;if(!ENVIRONMENT_IS_PTHREAD)run();\n\n\n return WasmBackendModuleThreadedSimd\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n module.exports = WasmBackendModuleThreadedSimd;\n else if (typeof define === 'function' && define['amd'])\n define([], function() { return WasmBackendModuleThreadedSimd; });\n else if (typeof exports === 'object')\n exports[\"WasmBackendModuleThreadedSimd\"] = WasmBackendModuleThreadedSimd;\n ", "\nvar WasmBackendModule = (function() {\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n return (\nfunction(WasmBackendModule) {\n WasmBackendModule = WasmBackendModule || {};\n\nvar Module=typeof WasmBackendModule!==\"undefined\"?WasmBackendModule:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram=\"./this.program\";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require(\"path\").dirname(scriptDirectory)+\"/\"}else{scriptDirectory=__dirname+\"/\"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);return nodeFS[\"readFileSync\"](filename,binary?null:\"utf8\")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process[\"argv\"].length>1){thisProgram=process[\"argv\"][1].replace(/\\\\/g,\"/\")}arguments_=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process[\"on\"](\"unhandledRejection\",abort);quit_=function(status){process[\"exit\"](status)};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){arguments_=scriptArgs}else if(typeof arguments!=\"undefined\"){arguments_=arguments}if(typeof quit===\"function\"){quit_=function(status){quit(status)}}if(typeof print!==\"undefined\"){if(typeof console===\"undefined\")console={};console.log=print;console.warn=console.error=typeof printErr!==\"undefined\"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];var noExitRuntime;if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(typeof WebAssembly!==\"object\"){err(\"no native wasm support detected\")}var wasmMemory;var wasmTable=new WebAssembly.Table({\"initial\":149,\"maximum\":149+0,\"element\":\"anyfunc\"});var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={\"string\":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},\"array\":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\")return UTF8ToString(ret);if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str=\"\";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\"}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var INITIAL_INITIAL_MEMORY=Module[\"INITIAL_MEMORY\"]||16777216;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback(Module);continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func)}else{Module[\"dynCall_vi\"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_ceil=Math.ceil;var Math_floor=Math.floor;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}what+=\"\";out(what);err(what);ABORT=true;EXITSTATUS=1;what=\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix=\"file://\";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile=\"tfjs-backend-wasm.wasm\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw\"both async and sync fetching of the wasm failed\"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch===\"function\"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\"}return response[\"arrayBuffer\"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={\"env\":asmLibraryArg,\"wasi_snapshot_preview1\":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module[\"asm\"]=exports;wasmMemory=exports[\"memory\"];updateGlobalBufferAndViews(wasmMemory.buffer);removeRunDependency(\"wasm-instantiate\")}addRunDependency(\"wasm-instantiate\");function receiveInstantiatedSource(output){receiveInstance(output[\"instance\"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming===\"function\"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch===\"function\"){fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module[\"instantiateWasm\"]){try{var exports=Module[\"instantiateWasm\"](info,receiveInstance);return exports}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);return false}}instantiateAsync();return{}}__ATINIT__.push();function _emscripten_notify_memory_growth(memoryIndex){updateGlobalBufferAndViews(wasmMemory.buffer)}var PATH={splitPath:function(filename){var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1)}else if(last===\"..\"){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)===\"/\",trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p}),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\"}if(path&&trailingSlash){path+=\"/\"}return(isAbsolute?\"/\":\"\")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\"}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path===\"/\")return\"/\";var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join(\"/\"))},join2:function(l,r){return PATH.normalize(l+\"/\"+r)}};var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _exit(status){exit(status)}function _proc_exit(code){_exit(code)}function _roundf(d){d=+d;return d>=+0?+Math_floor(d+ +.5):+Math_ceil(d-+.5)}var asmLibraryArg={\"emscripten_notify_memory_growth\":_emscripten_notify_memory_growth,\"fd_close\":_fd_close,\"fd_seek\":_fd_seek,\"fd_write\":_fd_write,\"proc_exit\":_proc_exit,\"roundf\":_roundf};var asm=createWasm();Module[\"asm\"]=asm;var _init=Module[\"_init\"]=function(){return(_init=Module[\"_init\"]=Module[\"asm\"][\"init\"]).apply(null,arguments)};var _register_tensor=Module[\"_register_tensor\"]=function(){return(_register_tensor=Module[\"_register_tensor\"]=Module[\"asm\"][\"register_tensor\"]).apply(null,arguments)};var _dispose_data=Module[\"_dispose_data\"]=function(){return(_dispose_data=Module[\"_dispose_data\"]=Module[\"asm\"][\"dispose_data\"]).apply(null,arguments)};var _dispose=Module[\"_dispose\"]=function(){return(_dispose=Module[\"_dispose\"]=Module[\"asm\"][\"dispose\"]).apply(null,arguments)};var _Abs=Module[\"_Abs\"]=function(){return(_Abs=Module[\"_Abs\"]=Module[\"asm\"][\"Abs\"]).apply(null,arguments)};var _Add=Module[\"_Add\"]=function(){return(_Add=Module[\"_Add\"]=Module[\"asm\"][\"Add\"]).apply(null,arguments)};var _AddN=Module[\"_AddN\"]=function(){return(_AddN=Module[\"_AddN\"]=Module[\"asm\"][\"AddN\"]).apply(null,arguments)};var _ArgMax=Module[\"_ArgMax\"]=function(){return(_ArgMax=Module[\"_ArgMax\"]=Module[\"asm\"][\"ArgMax\"]).apply(null,arguments)};var _AvgPool=Module[\"_AvgPool\"]=function(){return(_AvgPool=Module[\"_AvgPool\"]=Module[\"asm\"][\"AvgPool\"]).apply(null,arguments)};var _BatchMatMul=Module[\"_BatchMatMul\"]=function(){return(_BatchMatMul=Module[\"_BatchMatMul\"]=Module[\"asm\"][\"BatchMatMul\"]).apply(null,arguments)};var _ClipByValue=Module[\"_ClipByValue\"]=function(){return(_ClipByValue=Module[\"_ClipByValue\"]=Module[\"asm\"][\"ClipByValue\"]).apply(null,arguments)};var _Conv2D=Module[\"_Conv2D\"]=function(){return(_Conv2D=Module[\"_Conv2D\"]=Module[\"asm\"][\"Conv2D\"]).apply(null,arguments)};var _Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=function(){return(_Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=Module[\"asm\"][\"Conv2DBackpropInput\"]).apply(null,arguments)};var _Cos=Module[\"_Cos\"]=function(){return(_Cos=Module[\"_Cos\"]=Module[\"asm\"][\"Cos\"]).apply(null,arguments)};var _CropAndResize=Module[\"_CropAndResize\"]=function(){return(_CropAndResize=Module[\"_CropAndResize\"]=Module[\"asm\"][\"CropAndResize\"]).apply(null,arguments)};var _Cumsum=Module[\"_Cumsum\"]=function(){return(_Cumsum=Module[\"_Cumsum\"]=Module[\"asm\"][\"Cumsum\"]).apply(null,arguments)};var _DepthToSpace=Module[\"_DepthToSpace\"]=function(){return(_DepthToSpace=Module[\"_DepthToSpace\"]=Module[\"asm\"][\"DepthToSpace\"]).apply(null,arguments)};var _DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=function(){return(_DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=Module[\"asm\"][\"DepthwiseConv2dNative\"]).apply(null,arguments)};var _Equal=Module[\"_Equal\"]=function(){return(_Equal=Module[\"_Equal\"]=Module[\"asm\"][\"Equal\"]).apply(null,arguments)};var _Exp=Module[\"_Exp\"]=function(){return(_Exp=Module[\"_Exp\"]=Module[\"asm\"][\"Exp\"]).apply(null,arguments)};var _FlipLeftRight=Module[\"_FlipLeftRight\"]=function(){return(_FlipLeftRight=Module[\"_FlipLeftRight\"]=Module[\"asm\"][\"FlipLeftRight\"]).apply(null,arguments)};var _Floor=Module[\"_Floor\"]=function(){return(_Floor=Module[\"_Floor\"]=Module[\"asm\"][\"Floor\"]).apply(null,arguments)};var _FloorDiv=Module[\"_FloorDiv\"]=function(){return(_FloorDiv=Module[\"_FloorDiv\"]=Module[\"asm\"][\"FloorDiv\"]).apply(null,arguments)};var _FusedBatchNorm=Module[\"_FusedBatchNorm\"]=function(){return(_FusedBatchNorm=Module[\"_FusedBatchNorm\"]=Module[\"asm\"][\"FusedBatchNorm\"]).apply(null,arguments)};var _FusedConv2D=Module[\"_FusedConv2D\"]=function(){return(_FusedConv2D=Module[\"_FusedConv2D\"]=Module[\"asm\"][\"FusedConv2D\"]).apply(null,arguments)};var _FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=function(){return(_FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=Module[\"asm\"][\"FusedDepthwiseConv2D\"]).apply(null,arguments)};var _Gather=Module[\"_Gather\"]=function(){return(_Gather=Module[\"_Gather\"]=Module[\"asm\"][\"Gather\"]).apply(null,arguments)};var _GatherNd=Module[\"_GatherNd\"]=function(){return(_GatherNd=Module[\"_GatherNd\"]=Module[\"asm\"][\"GatherNd\"]).apply(null,arguments)};var _Greater=Module[\"_Greater\"]=function(){return(_Greater=Module[\"_Greater\"]=Module[\"asm\"][\"Greater\"]).apply(null,arguments)};var _GreaterEqual=Module[\"_GreaterEqual\"]=function(){return(_GreaterEqual=Module[\"_GreaterEqual\"]=Module[\"asm\"][\"GreaterEqual\"]).apply(null,arguments)};var _LeakyRelu=Module[\"_LeakyRelu\"]=function(){return(_LeakyRelu=Module[\"_LeakyRelu\"]=Module[\"asm\"][\"LeakyRelu\"]).apply(null,arguments)};var _Less=Module[\"_Less\"]=function(){return(_Less=Module[\"_Less\"]=Module[\"asm\"][\"Less\"]).apply(null,arguments)};var _LessEqual=Module[\"_LessEqual\"]=function(){return(_LessEqual=Module[\"_LessEqual\"]=Module[\"asm\"][\"LessEqual\"]).apply(null,arguments)};var _Log=Module[\"_Log\"]=function(){return(_Log=Module[\"_Log\"]=Module[\"asm\"][\"Log\"]).apply(null,arguments)};var _LogicalAnd=Module[\"_LogicalAnd\"]=function(){return(_LogicalAnd=Module[\"_LogicalAnd\"]=Module[\"asm\"][\"LogicalAnd\"]).apply(null,arguments)};var _Max=Module[\"_Max\"]=function(){return(_Max=Module[\"_Max\"]=Module[\"asm\"][\"Max\"]).apply(null,arguments)};var _MaxPool=Module[\"_MaxPool\"]=function(){return(_MaxPool=Module[\"_MaxPool\"]=Module[\"asm\"][\"MaxPool\"]).apply(null,arguments)};var _Maximum=Module[\"_Maximum\"]=function(){return(_Maximum=Module[\"_Maximum\"]=Module[\"asm\"][\"Maximum\"]).apply(null,arguments)};var _Mean=Module[\"_Mean\"]=function(){return(_Mean=Module[\"_Mean\"]=Module[\"asm\"][\"Mean\"]).apply(null,arguments)};var _Min=Module[\"_Min\"]=function(){return(_Min=Module[\"_Min\"]=Module[\"asm\"][\"Min\"]).apply(null,arguments)};var _Minimum=Module[\"_Minimum\"]=function(){return(_Minimum=Module[\"_Minimum\"]=Module[\"asm\"][\"Minimum\"]).apply(null,arguments)};var _Multiply=Module[\"_Multiply\"]=function(){return(_Multiply=Module[\"_Multiply\"]=Module[\"asm\"][\"Multiply\"]).apply(null,arguments)};var _Neg=Module[\"_Neg\"]=function(){return(_Neg=Module[\"_Neg\"]=Module[\"asm\"][\"Neg\"]).apply(null,arguments)};var _NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=function(){return(_NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=Module[\"asm\"][\"NonMaxSuppressionV3\"]).apply(null,arguments)};var _NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=function(){return(_NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=Module[\"asm\"][\"NonMaxSuppressionV4\"]).apply(null,arguments)};var _NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=function(){return(_NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=Module[\"asm\"][\"NonMaxSuppressionV5\"]).apply(null,arguments)};var _NotEqual=Module[\"_NotEqual\"]=function(){return(_NotEqual=Module[\"_NotEqual\"]=Module[\"asm\"][\"NotEqual\"]).apply(null,arguments)};var _OneHot=Module[\"_OneHot\"]=function(){return(_OneHot=Module[\"_OneHot\"]=Module[\"asm\"][\"OneHot\"]).apply(null,arguments)};var _PadV2=Module[\"_PadV2\"]=function(){return(_PadV2=Module[\"_PadV2\"]=Module[\"asm\"][\"PadV2\"]).apply(null,arguments)};var _Pow=Module[\"_Pow\"]=function(){return(_Pow=Module[\"_Pow\"]=Module[\"asm\"][\"Pow\"]).apply(null,arguments)};var _Prelu=Module[\"_Prelu\"]=function(){return(_Prelu=Module[\"_Prelu\"]=Module[\"asm\"][\"Prelu\"]).apply(null,arguments)};var _Prod=Module[\"_Prod\"]=function(){return(_Prod=Module[\"_Prod\"]=Module[\"asm\"][\"Prod\"]).apply(null,arguments)};var _RealDiv=Module[\"_RealDiv\"]=function(){return(_RealDiv=Module[\"_RealDiv\"]=Module[\"asm\"][\"RealDiv\"]).apply(null,arguments)};var _Relu=Module[\"_Relu\"]=function(){return(_Relu=Module[\"_Relu\"]=Module[\"asm\"][\"Relu\"]).apply(null,arguments)};var _Relu6=Module[\"_Relu6\"]=function(){return(_Relu6=Module[\"_Relu6\"]=Module[\"asm\"][\"Relu6\"]).apply(null,arguments)};var _ResizeBilinear=Module[\"_ResizeBilinear\"]=function(){return(_ResizeBilinear=Module[\"_ResizeBilinear\"]=Module[\"asm\"][\"ResizeBilinear\"]).apply(null,arguments)};var _Reverse=Module[\"_Reverse\"]=function(){return(_Reverse=Module[\"_Reverse\"]=Module[\"asm\"][\"Reverse\"]).apply(null,arguments)};var _RotateWithOffset=Module[\"_RotateWithOffset\"]=function(){return(_RotateWithOffset=Module[\"_RotateWithOffset\"]=Module[\"asm\"][\"RotateWithOffset\"]).apply(null,arguments)};var _Rsqrt=Module[\"_Rsqrt\"]=function(){return(_Rsqrt=Module[\"_Rsqrt\"]=Module[\"asm\"][\"Rsqrt\"]).apply(null,arguments)};var _ScatterNd=Module[\"_ScatterNd\"]=function(){return(_ScatterNd=Module[\"_ScatterNd\"]=Module[\"asm\"][\"ScatterNd\"]).apply(null,arguments)};var _SelectV2=Module[\"_SelectV2\"]=function(){return(_SelectV2=Module[\"_SelectV2\"]=Module[\"asm\"][\"SelectV2\"]).apply(null,arguments)};var _Sigmoid=Module[\"_Sigmoid\"]=function(){return(_Sigmoid=Module[\"_Sigmoid\"]=Module[\"asm\"][\"Sigmoid\"]).apply(null,arguments)};var _Sin=Module[\"_Sin\"]=function(){return(_Sin=Module[\"_Sin\"]=Module[\"asm\"][\"Sin\"]).apply(null,arguments)};var _Softmax=Module[\"_Softmax\"]=function(){return(_Softmax=Module[\"_Softmax\"]=Module[\"asm\"][\"Softmax\"]).apply(null,arguments)};var _Sqrt=Module[\"_Sqrt\"]=function(){return(_Sqrt=Module[\"_Sqrt\"]=Module[\"asm\"][\"Sqrt\"]).apply(null,arguments)};var _Square=Module[\"_Square\"]=function(){return(_Square=Module[\"_Square\"]=Module[\"asm\"][\"Square\"]).apply(null,arguments)};var _SquaredDifference=Module[\"_SquaredDifference\"]=function(){return(_SquaredDifference=Module[\"_SquaredDifference\"]=Module[\"asm\"][\"SquaredDifference\"]).apply(null,arguments)};var _StridedSlice=Module[\"_StridedSlice\"]=function(){return(_StridedSlice=Module[\"_StridedSlice\"]=Module[\"asm\"][\"StridedSlice\"]).apply(null,arguments)};var _Sub=Module[\"_Sub\"]=function(){return(_Sub=Module[\"_Sub\"]=Module[\"asm\"][\"Sub\"]).apply(null,arguments)};var _Sum=Module[\"_Sum\"]=function(){return(_Sum=Module[\"_Sum\"]=Module[\"asm\"][\"Sum\"]).apply(null,arguments)};var _Tanh=Module[\"_Tanh\"]=function(){return(_Tanh=Module[\"_Tanh\"]=Module[\"asm\"][\"Tanh\"]).apply(null,arguments)};var _Tile=Module[\"_Tile\"]=function(){return(_Tile=Module[\"_Tile\"]=Module[\"asm\"][\"Tile\"]).apply(null,arguments)};var _TopK=Module[\"_TopK\"]=function(){return(_TopK=Module[\"_TopK\"]=Module[\"asm\"][\"TopK\"]).apply(null,arguments)};var _Transpose=Module[\"_Transpose\"]=function(){return(_Transpose=Module[\"_Transpose\"]=Module[\"asm\"][\"Transpose\"]).apply(null,arguments)};var __FusedMatMul=Module[\"__FusedMatMul\"]=function(){return(__FusedMatMul=Module[\"__FusedMatMul\"]=Module[\"asm\"][\"_FusedMatMul\"]).apply(null,arguments)};var _malloc=Module[\"_malloc\"]=function(){return(_malloc=Module[\"_malloc\"]=Module[\"asm\"][\"malloc\"]).apply(null,arguments)};var _free=Module[\"_free\"]=function(){return(_free=Module[\"_free\"]=Module[\"asm\"][\"free\"]).apply(null,arguments)};var __start=Module[\"__start\"]=function(){return(__start=Module[\"__start\"]=Module[\"asm\"][\"_start\"]).apply(null,arguments)};var stackSave=Module[\"stackSave\"]=function(){return(stackSave=Module[\"stackSave\"]=Module[\"asm\"][\"stackSave\"]).apply(null,arguments)};var stackAlloc=Module[\"stackAlloc\"]=function(){return(stackAlloc=Module[\"stackAlloc\"]=Module[\"asm\"][\"stackAlloc\"]).apply(null,arguments)};var stackRestore=Module[\"stackRestore\"]=function(){return(stackRestore=Module[\"stackRestore\"]=Module[\"asm\"][\"stackRestore\"]).apply(null,arguments)};Module[\"asm\"]=asm;Module[\"cwrap\"]=cwrap;var calledRun;Module[\"then\"]=function(func){if(calledRun){func(Module)}else{var old=Module[\"onRuntimeInitialized\"];Module[\"onRuntimeInitialized\"]=function(){if(old)old();func(Module)}}return Module};function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module[\"__start\"];try{entryFunction();var ret=0;exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e==\"unwind\"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e===\"object\"&&e.stack){toLog=[e,e.stack]}err(\"exception thrown: \"+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();if(shouldRunNow)callMain(args);postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}Module[\"run\"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module[\"onExit\"])Module[\"onExit\"](status)}quit_(status,new ExitStatus(status))}if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}var shouldRunNow=true;if(Module[\"noInitialRun\"])shouldRunNow=false;noExitRuntime=true;run();\n\n\n return WasmBackendModule\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n module.exports = WasmBackendModule;\n else if (typeof define === 'function' && define['amd'])\n define([], function() { return WasmBackendModule; });\n else if (typeof exports === 'object')\n exports[\"WasmBackendModule\"] = WasmBackendModule;\n ", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "export const wasmWorkerContents = 'var threadInfoStruct=0;var selfThreadId=0;var parentThreadId=0;var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(\" \");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(\" \");postMessage({cmd:\"alert\",text:text,threadId:selfThreadId})}var err=threadPrintErr;this.alert=threadAlert;Module[\"instantiateWasm\"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module[\"wasmModule\"],info);Module[\"wasmModule\"]=null;receiveInstance(instance);return instance.exports};this.onmessage=function(e){try{if(e.data.cmd===\"load\"){Module[\"DYNAMIC_BASE\"]=e.data.DYNAMIC_BASE;Module[\"DYNAMICTOP_PTR\"]=e.data.DYNAMICTOP_PTR;Module[\"wasmModule\"]=e.data.wasmModule;Module[\"wasmMemory\"]=e.data.wasmMemory;Module[\"buffer\"]=Module[\"wasmMemory\"].buffer;Module[\"ENVIRONMENT_IS_PTHREAD\"]=true;if(typeof e.data.urlOrBlob===\"string\"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}Module=WasmBackendModuleThreadedSimd(Module);postMessage({\"cmd\":\"loaded\"})}else if(e.data.cmd===\"objectTransfer\"){Module[\"PThread\"].receiveObjectTransfer(e.data)}else if(e.data.cmd===\"run\"){Module[\"__performance_now_clock_drift\"]=performance.now()-e.data.time;threadInfoStruct=e.data.threadInfoStruct;Module[\"__register_pthread_ptr\"](threadInfoStruct,0,0);selfThreadId=e.data.selfThreadId;parentThreadId=e.data.parentThreadId;var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module[\"establishStackSpace\"](top,max);Module[\"_emscripten_tls_init\"]();Module[\"PThread\"].receiveObjectTransfer(e.data);Module[\"PThread\"].setThreadStatus(Module[\"_pthread_self\"](),1);try{var result=Module[\"dynCall_ii\"](e.data.start_routine,e.data.arg);if(!Module[\"getNoExitRuntime\"]())Module[\"PThread\"].threadExit(result)}catch(ex){if(ex===\"Canceled!\"){Module[\"PThread\"].threadCancel()}else if(ex!=\"unwind\"){Atomics.store(Module[\"HEAPU32\"],threadInfoStruct+4>>2,ex instanceof Module[\"ExitStatus\"]?ex.status:-2);Atomics.store(Module[\"HEAPU32\"],threadInfoStruct+0>>2,1);Module[\"_emscripten_futex_wake\"](threadInfoStruct+0,2147483647);if(!(ex instanceof Module[\"ExitStatus\"]))throw ex}}}else if(e.data.cmd===\"cancel\"){if(threadInfoStruct){Module[\"PThread\"].threadCancel()}}else if(e.data.target===\"setimmediate\"){}else if(e.data.cmd===\"processThreadQueue\"){if(threadInfoStruct){Module[\"_emscripten_current_thread_process_queued_calls\"]()}}else{err(\"worker.js received unknown command \"+e.data.cmd);err(e.data)}}catch(ex){err(\"worker.js onmessage() captured an uncaught exception: \"+ex);if(ex.stack)err(ex.stack);throw ex}};if(typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\"){self={location:{href:__filename}};var onmessage=this.onmessage;var nodeWorkerThreads=require(\"worker_threads\");Worker=nodeWorkerThreads.Worker;var parentPort=nodeWorkerThreads.parentPort;parentPort.on(\"message\",function(data){onmessage({data:data})});var nodeFS=require(\"fs\");var nodeRead=function(filename){return nodeFS.readFileSync(filename,\"utf8\")};function globalEval(x){global.require=require;global.Module=Module;eval.call(null,x)}importScripts=function(f){globalEval(nodeRead(f))};postMessage=function(msg){parentPort.postMessage(msg)};if(typeof performance===\"undefined\"){performance={now:function(){return Date.now()}}}}';", null, null, null, "export * from './drawContour';\nexport * from './drawDetections';\nexport * from './drawFaceExpressions';\nexport * from './DrawBox';\nexport * from './DrawFaceLandmarks';\nexport * from './DrawTextField';\n", "import { Point } from '../classes/index';\n\nexport function drawContour(\n ctx: CanvasRenderingContext2D,\n points: Point[],\n isClosed: boolean = false,\n) {\n ctx.beginPath();\n\n points.slice(1).forEach(({ x, y }, prevIdx) => {\n const from = points[prevIdx];\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(x, y);\n });\n\n if (isClosed) {\n const from = points[points.length - 1];\n const to = points[0];\n if (!from || !to) {\n return;\n }\n\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n }\n\n ctx.stroke();\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Point } from '../classes/index';\nimport { Dimensions, IDimensions } from '../classes/Dimensions';\n\nexport function isTensor(tensor: any, dim: number) {\n return tensor instanceof tf.Tensor && tensor.shape.length === dim;\n}\n\nexport function isTensor1D(tensor: any): tensor is tf.Tensor1D {\n return isTensor(tensor, 1);\n}\n\nexport function isTensor2D(tensor: any): tensor is tf.Tensor2D {\n return isTensor(tensor, 2);\n}\n\nexport function isTensor3D(tensor: any): tensor is tf.Tensor3D {\n return isTensor(tensor, 3);\n}\n\nexport function isTensor4D(tensor: any): tensor is tf.Tensor4D {\n return isTensor(tensor, 4);\n}\n\nexport function isFloat(num: number) {\n return num % 1 !== 0;\n}\n\nexport function isEven(num: number) {\n return num % 2 === 0;\n}\n\nexport function round(num: number, prec: number = 2) {\n const f = 10 ** prec;\n return Math.floor(num * f) / f;\n}\n\nexport function isDimensions(obj: any): boolean {\n return obj && obj.width && obj.height;\n}\n\nexport function computeReshapedDimensions({ width, height }: IDimensions, inputSize: number) {\n const scale = inputSize / Math.max(height, width);\n return new Dimensions(Math.round(width * scale), Math.round(height * scale));\n}\n\nexport function getCenterPoint(pts: Point[]): Point {\n return pts.reduce((sum, pt) => sum.add(pt), new Point(0, 0))\n .div(new Point(pts.length, pts.length));\n}\n\nexport function range(num: number, start: number, step: number): number[] {\n return Array(num).fill(0).map((_, i) => start + (i * step));\n}\n\nexport function isValidNumber(num: any) {\n // eslint-disable-next-line no-mixed-operators\n return !!num && (num !== Infinity) && (num !== -Infinity) && !Number.isNaN(num) || num === 0;\n}\n\nexport function isValidProbablitiy(num: any) {\n return isValidNumber(num) && num >= 0 && num <= 1.0;\n}\n", "import { isValidNumber } from '../utils/index';\n\nexport interface IDimensions {\n width: number\n height: number\n}\n\nexport class Dimensions implements IDimensions {\n private _width: number\n\n private _height: number\n\n constructor(width: number, height: number) {\n if (!isValidNumber(width) || !isValidNumber(height)) {\n throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({ width, height })}`);\n }\n\n this._width = width;\n this._height = height;\n }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public reverse(): Dimensions {\n return new Dimensions(1 / this.width, 1 / this.height);\n }\n}\n", "export interface IPoint {\n x: number\n y: number\n}\n\nexport class Point implements IPoint {\n private _x: number\n\n private _y: number\n\n constructor(x: number, y: number) {\n this._x = x;\n this._y = y;\n }\n\n get x(): number { return this._x; }\n\n get y(): number { return this._y; }\n\n public add(pt: IPoint): Point {\n return new Point(this.x + pt.x, this.y + pt.y);\n }\n\n public sub(pt: IPoint): Point {\n return new Point(this.x - pt.x, this.y - pt.y);\n }\n\n public mul(pt: IPoint): Point {\n return new Point(this.x * pt.x, this.y * pt.y);\n }\n\n public div(pt: IPoint): Point {\n return new Point(this.x / pt.x, this.y / pt.y);\n }\n\n public abs(): Point {\n return new Point(Math.abs(this.x), Math.abs(this.y));\n }\n\n public magnitude(): number {\n return Math.sqrt((this.x ** 2) + (this.y ** 2));\n }\n\n public floor(): Point {\n return new Point(Math.floor(this.x), Math.floor(this.y));\n }\n}\n", "import { isDimensions, isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { IDimensions } from './Dimensions';\nimport { Point } from './Point';\nimport { IRect } from './Rect';\n\nexport class Box implements IBoundingBox, IRect {\n public static isRect(rect: any): boolean {\n return !!rect && [rect.x, rect.y, rect.width, rect.height].every(isValidNumber);\n }\n\n public static assertIsValidBox(box: any, callee: string, allowNegativeDimensions: boolean = false) {\n if (!Box.isRect(box)) {\n throw new Error(`${callee} - invalid box: ${JSON.stringify(box)}, expected object with properties x, y, width, height`);\n }\n\n if (!allowNegativeDimensions && (box.width < 0 || box.height < 0)) {\n throw new Error(`${callee} - width (${box.width}) and height (${box.height}) must be positive numbers`);\n }\n }\n\n private _x: number\n\n private _y: number\n\n private _width: number\n\n private _height: number\n\n constructor(_box: IBoundingBox | IRect, allowNegativeDimensions: boolean = true) {\n const box = (_box || {}) as any;\n\n const isBbox = [box.left, box.top, box.right, box.bottom].every(isValidNumber);\n const isRect = [box.x, box.y, box.width, box.height].every(isValidNumber);\n\n if (!isRect && !isBbox) {\n throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(box)}`);\n }\n\n const [x, y, width, height] = isRect\n ? [box.x, box.y, box.width, box.height]\n : [box.left, box.top, box.right - box.left, box.bottom - box.top];\n\n Box.assertIsValidBox({\n x, y, width, height,\n }, 'Box.constructor', allowNegativeDimensions);\n\n this._x = x;\n this._y = y;\n this._width = width;\n this._height = height;\n }\n\n public get x(): number { return this._x; }\n\n public get y(): number { return this._y; }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public get left(): number { return this.x; }\n\n public get top(): number { return this.y; }\n\n public get right(): number { return this.x + this.width; }\n\n public get bottom(): number { return this.y + this.height; }\n\n public get area(): number { return this.width * this.height; }\n\n public get topLeft(): Point { return new Point(this.left, this.top); }\n\n public get topRight(): Point { return new Point(this.right, this.top); }\n\n public get bottomLeft(): Point { return new Point(this.left, this.bottom); }\n\n public get bottomRight(): Point { return new Point(this.right, this.bottom); }\n\n public round(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.round(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public floor(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.floor(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public toSquare(): Box {\n let {\n x, y, width, height,\n } = this;\n const diff = Math.abs(width - height);\n if (width < height) {\n x -= (diff / 2);\n width += diff;\n }\n if (height < width) {\n y -= (diff / 2);\n height += diff;\n }\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public rescale(s: IDimensions | number): Box {\n const scaleX = isDimensions(s) ? (s as IDimensions).width : s as number;\n const scaleY = isDimensions(s) ? (s as IDimensions).height : s as number;\n return new Box({\n x: this.x * scaleX,\n y: this.y * scaleY,\n width: this.width * scaleX,\n height: this.height * scaleY,\n });\n }\n\n public pad(padX: number, padY: number): Box {\n const [x, y, width, height] = [\n this.x - (padX / 2),\n this.y - (padY / 2),\n this.width + padX,\n this.height + padY,\n ];\n return new Box({\n x, y, width, height,\n });\n }\n\n public clipAtImageBorders(imgWidth: number, imgHeight: number): Box {\n const {\n x, y, right, bottom,\n } = this;\n const clippedX = Math.max(x, 0);\n const clippedY = Math.max(y, 0);\n\n const newWidth = right - clippedX;\n const newHeight = bottom - clippedY;\n const clippedWidth = Math.min(newWidth, imgWidth - clippedX);\n const clippedHeight = Math.min(newHeight, imgHeight - clippedY);\n\n return (new Box({\n x: clippedX, y: clippedY, width: clippedWidth, height: clippedHeight,\n })).floor();\n }\n\n public shift(sx: number, sy: number): Box {\n const { width, height } = this;\n const x = this.x + sx;\n const y = this.y + sy;\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public padAtBorders(imageHeight: number, imageWidth: number) {\n const w = this.width + 1;\n const h = this.height + 1;\n\n const dx = 1;\n const dy = 1;\n let edx = w;\n let edy = h;\n\n let x = this.left;\n let y = this.top;\n let ex = this.right;\n let ey = this.bottom;\n\n if (ex > imageWidth) {\n edx = -ex + imageWidth + w;\n ex = imageWidth;\n }\n if (ey > imageHeight) {\n edy = -ey + imageHeight + h;\n ey = imageHeight;\n }\n if (x < 1) {\n edy = 2 - x;\n x = 1;\n }\n if (y < 1) {\n edy = 2 - y;\n y = 1;\n }\n\n return {\n dy, edy, dx, edx, y, ey, x, ex, w, h,\n };\n }\n\n public calibrate(region: Box) {\n return new Box({\n left: this.left + (region.left * this.width),\n top: this.top + (region.top * this.height),\n right: this.right + (region.right * this.width),\n bottom: this.bottom + (region.bottom * this.height),\n }).toSquare().round();\n }\n}\n", "import { Box } from './Box';\n\nexport interface IBoundingBox {\n left: number\n top: number\n right: number\n bottom: number\n}\n\nexport class BoundingBox extends Box implements IBoundingBox {\n constructor(left: number, top: number, right: number, bottom: number, allowNegativeDimensions: boolean = false) {\n super({\n left, top, right, bottom,\n }, allowNegativeDimensions);\n }\n}\n", "import { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { IRect, Rect } from './Rect';\n\nexport class ObjectDetection {\n private _score: number\n\n private _classScore: number\n\n private _className: string\n\n private _box: Rect\n\n private _imageDims: Dimensions\n\n constructor(\n score: number,\n classScore: number,\n className: string,\n relativeBox: IRect,\n imageDims: IDimensions,\n ) {\n this._imageDims = new Dimensions(imageDims.width, imageDims.height);\n this._score = score;\n this._classScore = classScore;\n this._className = className;\n this._box = new Box(relativeBox).rescale(this._imageDims);\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n\n public get className(): string { return this._className; }\n\n public get box(): Box { return this._box; }\n\n public get imageDims(): Dimensions { return this._imageDims; }\n\n public get imageWidth(): number { return this.imageDims.width; }\n\n public get imageHeight(): number { return this.imageDims.height; }\n\n public get relativeBox(): Box { return new Box(this._box).rescale(this.imageDims.reverse()); }\n\n public forSize(width: number, height: number): ObjectDetection {\n return new ObjectDetection(\n this.score,\n this.classScore,\n this.className,\n this.relativeBox,\n { width, height },\n );\n }\n}\n", "import { Box } from './Box';\nimport { IDimensions } from './Dimensions';\nimport { ObjectDetection } from './ObjectDetection';\nimport { Rect } from './Rect';\n\nexport interface IFaceDetecion {\n score: number\n box: Box\n}\n\nexport class FaceDetection extends ObjectDetection implements IFaceDetecion {\n constructor(\n score: number,\n relativeBox: Rect,\n imageDims: IDimensions,\n ) {\n super(score, score, '', relativeBox, imageDims);\n }\n\n public forSize(width: number, height: number): FaceDetection {\n const { score, relativeBox, imageDims } = super.forSize(width, height);\n return new FaceDetection(score, relativeBox, imageDims);\n }\n}\n", "import { Box } from '../classes/Box';\n\nexport function iou(box1: Box, box2: Box, isIOU: boolean = true) {\n const width = Math.max(0.0, Math.min(box1.right, box2.right) - Math.max(box1.left, box2.left));\n const height = Math.max(0.0, Math.min(box1.bottom, box2.bottom) - Math.max(box1.top, box2.top));\n const interSection = width * height;\n\n return isIOU\n ? interSection / (box1.area + box2.area - interSection)\n : interSection / Math.min(box1.area, box2.area);\n}\n", "import { BoundingBox, IPoint } from '../classes/index';\n\nexport function minBbox(pts: IPoint[]): BoundingBox {\n const xs = pts.map((pt) => pt.x);\n const ys = pts.map((pt) => pt.y);\n const minX = xs.reduce((min, x) => (x < min ? x : min), Infinity);\n const minY = ys.reduce((min, y) => (y < min ? y : min), Infinity);\n const maxX = xs.reduce((max, x) => (max < x ? x : max), 0);\n const maxY = ys.reduce((max, y) => (max < y ? y : max), 0);\n\n return new BoundingBox(minX, minY, maxX, maxY);\n}\n", "import { Box } from '../classes/Box';\nimport { iou } from './iou';\n\nexport function nonMaxSuppression(\n boxes: Box[],\n scores: number[],\n iouThreshold: number,\n isIOU: boolean = true,\n): number[] {\n let indicesSortedByScore = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .sort((c1, c2) => c1.score - c2.score)\n .map((c) => c.boxIndex);\n\n const pick: number[] = [];\n\n while (indicesSortedByScore.length > 0) {\n const curr = indicesSortedByScore.pop() as number;\n pick.push(curr);\n\n const indices = indicesSortedByScore;\n\n const outputs: number[] = [];\n for (let i = 0; i < indices.length; i++) {\n const idx = indices[i];\n\n const currBox = boxes[curr];\n const idxBox = boxes[idx];\n\n outputs.push(iou(currBox, idxBox, isIOU));\n }\n\n indicesSortedByScore = indicesSortedByScore.filter(\n (_, j) => outputs[j] <= iouThreshold,\n );\n }\n\n return pick;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nexport function normalize(x: tf.Tensor4D, meanRgb: number[]): tf.Tensor4D {\n return tf.tidy(() => {\n const [r, g, b] = meanRgb;\n const avg_r = tf.fill([...x.shape.slice(0, 3), 1], r, 'float32');\n const avg_g = tf.fill([...x.shape.slice(0, 3), 1], g, 'float32');\n const avg_b = tf.fill([...x.shape.slice(0, 3), 1], b, 'float32');\n const avg_rgb = tf.concat([avg_r, avg_g, avg_b], 3);\n\n return tf.sub(x, avg_rgb);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\n/**\n * Pads the smaller dimension of an image tensor with zeros, such that width === height.\n *\n * @param imgTensor The image tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The padded tensor with width === height.\n */\nexport function padToSquare(\n imgTensor: tf.Tensor4D,\n isCenterImage: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const [height, width] = imgTensor.shape.slice(1);\n if (height === width) {\n return imgTensor;\n }\n\n const dimDiff = Math.abs(height - width);\n const paddingAmount = Math.round(dimDiff * (isCenterImage ? 0.5 : 1));\n const paddingAxis = height > width ? 2 : 1;\n\n const createPaddingTensor = (paddingAmountLocal: number): tf.Tensor => {\n const paddingTensorShape = imgTensor.shape.slice();\n paddingTensorShape[paddingAxis] = paddingAmountLocal;\n return tf.fill(paddingTensorShape, 0, 'float32');\n };\n\n const paddingTensorAppend = createPaddingTensor(paddingAmount);\n const remainingPaddingAmount = dimDiff - (paddingTensorAppend.shape[paddingAxis] as number);\n\n const paddingTensorPrepend = isCenterImage && remainingPaddingAmount\n ? createPaddingTensor(remainingPaddingAmount)\n : null;\n\n const tensorsToStack = [\n paddingTensorPrepend,\n imgTensor,\n paddingTensorAppend,\n ]\n .filter((t) => !!t)\n // .map((t: tf.Tensor) => t.toFloat()) as tf.Tensor4D[]\n .map((t: tf.Tensor) => tf.cast(t, 'float32')) as tf.Tensor4D[];\n return tf.concat(tensorsToStack, paddingAxis);\n });\n}\n", "export function shuffleArray(inputArray: any[]) {\n const array = inputArray.slice();\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const x = array[i];\n array[i] = array[j];\n array[j] = x;\n }\n return array;\n}\n", "export * from './iou';\nexport * from './minBbox';\nexport * from './nonMaxSuppression';\nexport * from './normalize';\nexport * from './padToSquare';\nexport * from './shuffleArray';\n\nexport function sigmoid(x: number) {\n return 1 / (1 + Math.exp(-x));\n}\n\nexport function inverseSigmoid(x: number) {\n return Math.log(x / (1 - x));\n}\n", "import { Box } from './Box';\n\nexport interface IRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport class Rect extends Box implements IRect {\n constructor(x: number, y: number, width: number, height: number, allowNegativeDimensions: boolean = false) {\n super({\n x, y, width, height,\n }, allowNegativeDimensions);\n }\n}\n", "import { minBbox } from '../ops/index';\nimport { getCenterPoint } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { FaceDetection } from './FaceDetection';\nimport { Point } from './Point';\nimport { IRect, Rect } from './Rect';\n\n// face alignment constants\nconst relX = 0.5;\nconst relY = 0.43;\nconst relScale = 0.45;\n\nexport interface IFaceLandmarks {\n positions: Point[]\n shift: Point\n}\n\nexport class FaceLandmarks implements IFaceLandmarks {\n protected _shift: Point\n\n protected _positions: Point[]\n\n protected _imgDims: Dimensions\n\n constructor(\n relativeFaceLandmarkPositions: Point[],\n imgDims: IDimensions,\n shift: Point = new Point(0, 0),\n ) {\n const { width, height } = imgDims;\n this._imgDims = new Dimensions(width, height);\n this._shift = shift;\n this._positions = relativeFaceLandmarkPositions.map(\n (pt) => pt.mul(new Point(width, height)).add(shift),\n );\n }\n\n public get shift(): Point { return new Point(this._shift.x, this._shift.y); }\n\n public get imageWidth(): number { return this._imgDims.width; }\n\n public get imageHeight(): number { return this._imgDims.height; }\n\n public get positions(): Point[] { return this._positions; }\n\n public get relativePositions(): Point[] {\n return this._positions.map(\n (pt) => pt.sub(this._shift).div(new Point(this.imageWidth, this.imageHeight)),\n );\n }\n\n public forSize(width: number, height: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n { width, height },\n );\n }\n\n public shiftBy(x: number, y: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n this._imgDims,\n new Point(x, y),\n );\n }\n\n public shiftByPoint(pt: Point): T {\n return this.shiftBy(pt.x, pt.y);\n }\n\n /**\n * Aligns the face landmarks after face detection from the relative positions of the faces\n * bounding box, or it's current shift. This function should be used to align the face images\n * after face detection has been performed, before they are passed to the face recognition net.\n * This will make the computed face descriptor more accurate.\n *\n * @param detection (optional) The bounding box of the face or the face detection result. If\n * no argument was passed the position of the face landmarks are assumed to be relative to\n * it's current shift.\n * @returns The bounding box of the aligned face.\n */\n public align(\n detection?: FaceDetection | IRect | IBoundingBox | null,\n options: { useDlibAlignment?: boolean, minBoxPadding?: number } = { },\n ): Box {\n if (detection) {\n const box = detection instanceof FaceDetection\n ? detection.box.floor()\n : new Box(detection);\n\n return this.shiftBy(box.x, box.y).align(null, options);\n }\n\n const { useDlibAlignment, minBoxPadding } = { useDlibAlignment: false, minBoxPadding: 0.2, ...options };\n\n if (useDlibAlignment) {\n return this.alignDlib();\n }\n\n return this.alignMinBbox(minBoxPadding);\n }\n\n private alignDlib(): Box {\n const centers = this.getRefPointsForAlignment();\n\n const [leftEyeCenter, rightEyeCenter, mouthCenter] = centers;\n const distToMouth = (pt: Point) => mouthCenter.sub(pt).magnitude();\n const eyeToMouthDist = (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2;\n\n const size = Math.floor(eyeToMouthDist / relScale);\n\n const refPoint = getCenterPoint(centers);\n // TODO: pad in case rectangle is out of image bounds\n const x = Math.floor(Math.max(0, refPoint.x - (relX * size)));\n const y = Math.floor(Math.max(0, refPoint.y - (relY * size)));\n\n return new Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y));\n }\n\n private alignMinBbox(padding: number): Box {\n const box = minBbox(this.positions);\n return box.pad(box.width * padding, box.height * padding);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n throw new Error('getRefPointsForAlignment not implemented by base class');\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks5 extends FaceLandmarks {\n protected getRefPointsForAlignment(): Point[] {\n const pts = this.positions;\n return [\n pts[0],\n pts[1],\n getCenterPoint([pts[3], pts[4]]),\n ];\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks68 extends FaceLandmarks {\n public getJawOutline(): Point[] {\n return this.positions.slice(0, 17);\n }\n\n public getLeftEyeBrow(): Point[] {\n return this.positions.slice(17, 22);\n }\n\n public getRightEyeBrow(): Point[] {\n return this.positions.slice(22, 27);\n }\n\n public getNose(): Point[] {\n return this.positions.slice(27, 36);\n }\n\n public getLeftEye(): Point[] {\n return this.positions.slice(36, 42);\n }\n\n public getRightEye(): Point[] {\n return this.positions.slice(42, 48);\n }\n\n public getMouth(): Point[] {\n return this.positions.slice(48, 68);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n return [\n this.getLeftEye(),\n this.getRightEye(),\n this.getMouth(),\n ].map(getCenterPoint);\n }\n}\n", "import { round } from '../utils/index';\n\nexport interface IFaceMatch {\n label: string\n distance: number\n}\n\nexport class FaceMatch implements IFaceMatch {\n private _label: string\n\n private _distance: number\n\n constructor(label: string, distance: number) {\n this._label = label;\n this._distance = distance;\n }\n\n public get label(): string { return this._label; }\n\n public get distance(): number { return this._distance; }\n\n public toString(withDistance: boolean = true): string {\n return `${this.label}${withDistance ? ` (${round(this.distance)})` : ''}`;\n }\n}\n", "import { isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { IRect } from './Rect';\n\nexport class LabeledBox extends Box {\n public static assertIsValidLabeledBox(box: any, callee: string) {\n Box.assertIsValidBox(box, callee);\n\n if (!isValidNumber(box.label)) {\n throw new Error(`${callee} - expected property label (${box.label}) to be a number`);\n }\n }\n\n private _label: number\n\n constructor(box: IBoundingBox | IRect | any, label: number) {\n super(box);\n this._label = label;\n }\n\n public get label(): number { return this._label; }\n}\n", "export class LabeledFaceDescriptors {\n private _label: string\n\n private _descriptors: Float32Array[]\n\n constructor(label: string, descriptors: Float32Array[]) {\n if (!(typeof label === 'string')) {\n throw new Error('LabeledFaceDescriptors - constructor expected label to be a string');\n }\n\n if (!Array.isArray(descriptors) || descriptors.some((desc) => !(desc instanceof Float32Array))) {\n throw new Error('LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array');\n }\n\n this._label = label;\n this._descriptors = descriptors;\n }\n\n public get label(): string { return this._label; }\n\n public get descriptors(): Float32Array[] { return this._descriptors; }\n\n public toJSON(): any {\n return {\n label: this.label,\n descriptors: this.descriptors.map((d) => Array.from(d)),\n };\n }\n\n public static fromJSON(json: any): LabeledFaceDescriptors {\n const descriptors = json.descriptors.map((d: any) => new Float32Array(d));\n return new LabeledFaceDescriptors(json.label, descriptors);\n }\n}\n", "import { isValidProbablitiy } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { LabeledBox } from './LabeledBox';\nimport { IRect } from './Rect';\n\nexport class PredictedBox extends LabeledBox {\n public static assertIsValidPredictedBox(box: any, callee: string) {\n LabeledBox.assertIsValidLabeledBox(box, callee);\n\n if (\n !isValidProbablitiy(box.score)\n || !isValidProbablitiy(box.classScore)\n ) {\n throw new Error(`${callee} - expected properties score (${box.score}) and (${box.classScore}) to be a number between [0, 1]`);\n }\n }\n\n private _score: number\n\n private _classScore: number\n\n constructor(box: IBoundingBox | IRect | any, label: number, score: number, classScore: number) {\n super(box, label);\n this._score = score;\n this._classScore = classScore;\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\n\nexport type WithFaceDetection = TSource & {\n detection: FaceDetection\n}\n\nexport function isWithFaceDetection(obj: any): obj is WithFaceDetection<{}> {\n return obj.detection instanceof FaceDetection;\n}\n\nexport function extendWithFaceDetection<\n TSource\n>(\n sourceObj: TSource,\n detection: FaceDetection,\n): WithFaceDetection {\n const extension = { detection };\n return { ...sourceObj, ...extension };\n}\n", "import { Environment } from './types';\n\nexport function createBrowserEnv(): Environment {\n const fetch = window.fetch;\n if (!fetch) throw new Error('fetch - missing fetch implementation for browser environment');\n\n const readFile = () => {\n throw new Error('readFile - filesystem not available for browser environment');\n };\n\n return {\n Canvas: HTMLCanvasElement,\n CanvasRenderingContext2D,\n Image: HTMLImageElement,\n ImageData,\n Video: HTMLVideoElement,\n createCanvasElement: () => document.createElement('canvas'),\n createImageElement: () => document.createElement('img'),\n fetch,\n readFile,\n };\n}\n", "import { FileSystem } from './types';\n\nexport function createFileSystem(fs?: any): FileSystem {\n let requireFsError = '';\n\n if (!fs) {\n try {\n // eslint-disable-next-line global-require\n fs = require('fs');\n } catch (err) {\n requireFsError = err.toString();\n }\n }\n\n const readFile = fs\n ? (filePath: string) => new Promise((resolve, reject) => {\n fs.readFile(filePath, (err: any, buffer: Buffer) => (err ? reject(err) : resolve(buffer)));\n })\n : () => {\n throw new Error(`readFile - failed to require fs in nodejs environment with error: ${requireFsError}`);\n };\n\n return {\n readFile,\n };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { createFileSystem } from './createFileSystem';\nimport { Environment } from './types';\n\nexport function createNodejsEnv(): Environment {\n // eslint-disable-next-line dot-notation\n const Canvas = global['Canvas'] || global.HTMLCanvasElement;\n const Image = global.Image || global.HTMLImageElement;\n\n const createCanvasElement = () => {\n if (Canvas) return new Canvas();\n throw new Error('createCanvasElement - missing Canvas implementation for nodejs environment');\n };\n\n const createImageElement = () => {\n if (Image) return new Image();\n throw new Error('createImageElement - missing Image implementation for nodejs environment');\n };\n\n const fetch = global.fetch;\n // if (!fetch) throw new Error('fetch - missing fetch implementation for nodejs environment');\n\n const fileSystem = createFileSystem();\n\n return {\n Canvas: Canvas || class {},\n CanvasRenderingContext2D: global.CanvasRenderingContext2D || class {},\n Image: Image || class {},\n ImageData: global.ImageData || class {},\n Video: global.HTMLVideoElement || class {},\n createCanvasElement,\n createImageElement,\n fetch,\n ...fileSystem,\n };\n}\n", "export function isBrowser(): boolean {\n return typeof window === 'object'\n && typeof document !== 'undefined'\n && typeof HTMLImageElement !== 'undefined'\n && typeof HTMLCanvasElement !== 'undefined'\n && typeof HTMLVideoElement !== 'undefined'\n && typeof ImageData !== 'undefined'\n && typeof CanvasRenderingContext2D !== 'undefined';\n}\n", "import { createBrowserEnv } from './createBrowserEnv';\nimport { createFileSystem } from './createFileSystem';\nimport { createNodejsEnv } from './createNodejsEnv';\nimport { isBrowser } from './isBrowser';\nimport { isNodejs } from './isNodejs';\nimport { Environment } from './types';\n\nlet environment: Environment | null;\n\nfunction getEnv(): Environment {\n if (!environment) {\n throw new Error('getEnv - environment is not defined, check isNodejs() and isBrowser()');\n }\n return environment;\n}\n\nfunction setEnv(env: Environment) {\n environment = env;\n}\n\nfunction initialize() {\n // check for isBrowser() first to prevent electron renderer process\n // to be initialized with wrong environment due to isNodejs() returning true\n if (isBrowser()) return setEnv(createBrowserEnv());\n if (isNodejs()) return setEnv(createNodejsEnv());\n return null;\n}\n\nfunction monkeyPatch(env: Partial) {\n if (!environment) {\n initialize();\n }\n\n if (!environment) {\n throw new Error('monkeyPatch - environment is not defined, check isNodejs() and isBrowser()');\n }\n\n const { Canvas = environment.Canvas, Image = environment.Image } = env;\n environment.Canvas = Canvas;\n environment.Image = Image;\n environment.createCanvasElement = env.createCanvasElement || (() => new Canvas());\n environment.createImageElement = env.createImageElement || (() => new Image());\n\n environment.ImageData = env.ImageData || environment.ImageData;\n environment.Video = env.Video || environment.Video;\n environment.fetch = env.fetch || environment.fetch;\n environment.readFile = env.readFile || environment.readFile;\n}\n\nexport const env = {\n getEnv,\n setEnv,\n initialize,\n createBrowserEnv,\n createFileSystem,\n createNodejsEnv,\n monkeyPatch,\n isBrowser,\n isNodejs,\n};\n\ninitialize();\n\nexport * from './types';\n", "import { env } from '../env/index';\n\nexport function resolveInput(arg: string | any) {\n if (!env.isNodejs() && typeof arg === 'string') {\n return document.getElementById(arg);\n }\n return arg;\n}\n", "import { env } from '../env/index';\nimport { resolveInput } from './resolveInput';\n\nexport function getContext2dOrThrow(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D): CanvasRenderingContext2D {\n const { Canvas, CanvasRenderingContext2D } = env.getEnv();\n\n if (canvasArg instanceof CanvasRenderingContext2D) {\n return canvasArg;\n }\n\n const canvas = resolveInput(canvasArg);\n\n if (!(canvas instanceof Canvas)) {\n throw new Error('resolveContext2d - expected canvas to be of instance of Canvas');\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('resolveContext2d - canvas 2d context is null');\n }\n\n return ctx;\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IDimensions, IPoint } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { resolveInput } from '../dom/resolveInput';\n\n// eslint-disable-next-line no-shadow\nexport enum AnchorPosition {\n // eslint-disable-next-line no-unused-vars\n TOP_LEFT = 'TOP_LEFT',\n // eslint-disable-next-line no-unused-vars\n TOP_RIGHT = 'TOP_RIGHT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_LEFT = 'BOTTOM_LEFT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_RIGHT = 'BOTTOM_RIGHT'\n}\n\nexport interface IDrawTextFieldOptions {\n anchorPosition?: AnchorPosition\n backgroundColor?: string\n fontColor?: string\n fontSize?: number\n fontStyle?: string\n padding?: number\n}\n\nexport class DrawTextFieldOptions implements IDrawTextFieldOptions {\n public anchorPosition: AnchorPosition\n\n public backgroundColor: string\n\n public fontColor: string\n\n public fontSize: number\n\n public fontStyle: string\n\n public padding: number\n\n constructor(options: IDrawTextFieldOptions = {}) {\n const {\n anchorPosition, backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = options;\n this.anchorPosition = anchorPosition || AnchorPosition.TOP_LEFT;\n this.backgroundColor = backgroundColor || 'rgba(0, 0, 0, 0.5)';\n this.fontColor = fontColor || 'rgba(255, 255, 255, 1)';\n this.fontSize = fontSize || 14;\n this.fontStyle = fontStyle || 'Georgia';\n this.padding = padding || 4;\n }\n}\n\nexport class DrawTextField {\n public text: string[]\n\n public anchor : IPoint\n\n public options: DrawTextFieldOptions\n\n constructor(\n text: string | string[] | DrawTextField,\n anchor: IPoint,\n options: IDrawTextFieldOptions = {},\n ) {\n // eslint-disable-next-line no-nested-ternary\n this.text = typeof text === 'string'\n ? [text]\n : (text instanceof DrawTextField ? text.text : text);\n this.anchor = anchor;\n this.options = new DrawTextFieldOptions(options);\n }\n\n measureWidth(ctx: CanvasRenderingContext2D): number {\n const { padding } = this.options;\n return this.text.map((l) => ctx.measureText(l).width).reduce((w0, w1) => (w0 < w1 ? w1 : w0), 0) + (2 * padding);\n }\n\n measureHeight(): number {\n const { fontSize, padding } = this.options;\n return this.text.length * fontSize + (2 * padding);\n }\n\n getUpperLeft(ctx: CanvasRenderingContext2D, canvasDims?: IDimensions): IPoint {\n const { anchorPosition } = this.options;\n const isShiftLeft = anchorPosition === AnchorPosition.BOTTOM_RIGHT || anchorPosition === AnchorPosition.TOP_RIGHT;\n const isShiftTop = anchorPosition === AnchorPosition.BOTTOM_LEFT || anchorPosition === AnchorPosition.BOTTOM_RIGHT;\n\n const textFieldWidth = this.measureWidth(ctx);\n const textFieldHeight = this.measureHeight();\n const x = (isShiftLeft ? this.anchor.x - textFieldWidth : this.anchor.x);\n const y = isShiftTop ? this.anchor.y - textFieldHeight : this.anchor.y;\n\n // adjust anchor if text box exceeds canvas borders\n if (canvasDims) {\n const { width, height } = canvasDims;\n const newX = Math.max(Math.min(x, width - textFieldWidth), 0);\n const newY = Math.max(Math.min(y, height - textFieldHeight), 0);\n return { x: newX, y: newY };\n }\n return { x, y };\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const canvas = resolveInput(canvasArg);\n const ctx = getContext2dOrThrow(canvas);\n\n const {\n backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = this.options;\n\n ctx.font = `${fontSize}px ${fontStyle}`;\n const maxTextWidth = this.measureWidth(ctx);\n const textHeight = this.measureHeight();\n\n ctx.fillStyle = backgroundColor;\n const upperLeft = this.getUpperLeft(ctx, canvas);\n ctx.fillRect(upperLeft.x, upperLeft.y, maxTextWidth, textHeight);\n\n ctx.fillStyle = fontColor;\n this.text.forEach((textLine, i) => {\n const x = padding + upperLeft.x;\n const y = padding + upperLeft.y + ((i + 1) * fontSize);\n ctx.fillText(textLine, x, y);\n });\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { Box, IBoundingBox, IRect } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport {\n AnchorPosition, DrawTextField, DrawTextFieldOptions, IDrawTextFieldOptions,\n} from './DrawTextField';\n\nexport interface IDrawBoxOptions {\n boxColor?: string\n lineWidth?: number\n drawLabelOptions?: IDrawTextFieldOptions\n label?: string\n}\n\nexport class DrawBoxOptions {\n public boxColor: string\n\n public lineWidth: number\n\n public drawLabelOptions: DrawTextFieldOptions\n\n public label?: string\n\n constructor(options: IDrawBoxOptions = {}) {\n const {\n boxColor, lineWidth, label, drawLabelOptions,\n } = options;\n this.boxColor = boxColor || 'rgba(0, 0, 255, 1)';\n this.lineWidth = lineWidth || 2;\n this.label = label;\n\n const defaultDrawLabelOptions = {\n anchorPosition: AnchorPosition.BOTTOM_LEFT,\n backgroundColor: this.boxColor,\n };\n this.drawLabelOptions = new DrawTextFieldOptions({ ...defaultDrawLabelOptions, ...drawLabelOptions });\n }\n}\n\nexport class DrawBox {\n public box: Box\n\n public options: DrawBoxOptions\n\n constructor(\n box: IBoundingBox | IRect,\n options: IDrawBoxOptions = {},\n ) {\n this.box = new Box(box);\n this.options = new DrawBoxOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const { boxColor, lineWidth } = this.options;\n\n const {\n x, y, width, height,\n } = this.box;\n ctx.strokeStyle = boxColor;\n ctx.lineWidth = lineWidth;\n ctx.strokeRect(x, y, width, height);\n\n const { label } = this.options;\n if (label) {\n new DrawTextField([label], { x: x - (lineWidth / 2), y }, this.options.drawLabelOptions).draw(canvasArg);\n }\n }\n}\n", "import { Box, IBoundingBox, IRect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { round } from '../utils/index';\nimport { DrawBox } from './DrawBox';\n\nexport type TDrawDetectionsInput = IRect | IBoundingBox | FaceDetection | WithFaceDetection<{}>\n\nexport function drawDetections(\n canvasArg: string | HTMLCanvasElement,\n detections: TDrawDetectionsInput | Array,\n) {\n const detectionsArray = Array.isArray(detections) ? detections : [detections];\n\n detectionsArray.forEach((det) => {\n // eslint-disable-next-line no-nested-ternary\n const score = det instanceof FaceDetection\n ? det.score\n : (isWithFaceDetection(det) ? det.detection.score : undefined);\n\n // eslint-disable-next-line no-nested-ternary\n const box = det instanceof FaceDetection\n ? det.box\n : (isWithFaceDetection(det) ? det.detection.box : new Box(det));\n\n const label = score ? `${round(score)}` : undefined;\n new DrawBox(box, { label }).draw(canvasArg);\n });\n}\n", "import { env } from '../env/index';\n\nexport function isMediaLoaded(media: HTMLImageElement | HTMLVideoElement) : boolean {\n const { Image, Video } = env.getEnv();\n\n return (media instanceof Image && media.complete)\n || (media instanceof Video && media.readyState >= 3);\n}\n", "import { env } from '../env/index';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function awaitMediaLoaded(media: HTMLImageElement | HTMLVideoElement | HTMLCanvasElement) {\n // eslint-disable-next-line consistent-return\n return new Promise((resolve, reject) => {\n if (media instanceof env.getEnv().Canvas || isMediaLoaded(media)) {\n return resolve(null);\n }\n\n function onError(e: Event) {\n if (!e.currentTarget) return;\n // eslint-disable-next-line no-use-before-define\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n reject(e);\n }\n\n function onLoad(e: Event) {\n if (!e.currentTarget) return;\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n resolve(e);\n }\n\n media.addEventListener('load', onLoad);\n media.addEventListener('error', onError);\n });\n}\n", "import { env } from '../env/index';\n\nexport function bufferToImage(buf: Blob): Promise {\n return new Promise((resolve, reject) => {\n if (!(buf instanceof Blob)) reject(new Error('bufferToImage - expected buf to be of type: Blob'));\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result !== 'string') reject(new Error('bufferToImage - expected reader.result to be a string, in onload'));\n const img = env.getEnv().createImageElement();\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = reader.result as string;\n };\n reader.onerror = reject;\n reader.readAsDataURL(buf);\n });\n}\n", "import { Dimensions, IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\n\nexport function getMediaDimensions(input: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | IDimensions): Dimensions {\n const { Image, Video } = env.getEnv();\n\n if (input instanceof Image) {\n return new Dimensions(input.naturalWidth, input.naturalHeight);\n }\n if (input instanceof Video) {\n return new Dimensions(input.videoWidth, input.videoHeight);\n }\n return new Dimensions(input.width, input.height);\n}\n", "import { IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function createCanvas({ width, height }: IDimensions): HTMLCanvasElement {\n const { createCanvasElement } = env.getEnv();\n const canvas = createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n\nexport function createCanvasFromMedia(media: HTMLImageElement | HTMLVideoElement | ImageData, dims?: IDimensions): HTMLCanvasElement {\n const { ImageData } = env.getEnv();\n\n if (!(media instanceof ImageData) && !isMediaLoaded(media)) {\n throw new Error('createCanvasFromMedia - media has not finished loading yet');\n }\n\n const { width, height } = dims || getMediaDimensions(media);\n const canvas = createCanvas({ width, height });\n\n if (media instanceof ImageData) {\n getContext2dOrThrow(canvas).putImageData(media, 0, 0);\n } else {\n getContext2dOrThrow(canvas).drawImage(media, 0, 0, width, height);\n }\n return canvas;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { env } from '../env/index';\nimport { isTensor4D } from '../utils/index';\n\nexport async function imageTensorToCanvas(\n imgTensor: tf.Tensor,\n canvas?: HTMLCanvasElement,\n): Promise {\n const targetCanvas = canvas || env.getEnv().createCanvasElement();\n\n const [height, width, numChannels] = imgTensor.shape.slice(isTensor4D(imgTensor) ? 1 : 0);\n const imgTensor3D = tf.tidy(() => imgTensor.as3D(height, width, numChannels).toInt());\n await tf.browser.toPixels(imgTensor3D, targetCanvas);\n\n imgTensor3D.dispose();\n\n return targetCanvas;\n}\n", "import { env } from '../env/index';\n\nexport function isMediaElement(input: any) {\n const { Image, Canvas, Video } = env.getEnv();\n\n return input instanceof Image\n || input instanceof Canvas\n || input instanceof Video;\n}\n", "import { env } from '../env/index';\nimport { createCanvas, createCanvasFromMedia } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function imageToSquare(input: HTMLImageElement | HTMLCanvasElement, inputSize: number, centerImage: boolean = false) {\n const { Image, Canvas } = env.getEnv();\n\n if (!(input instanceof Image || input instanceof Canvas)) {\n throw new Error('imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement');\n }\n\n const dims = getMediaDimensions(input);\n const scale = inputSize / Math.max(dims.height, dims.width);\n const width = scale * dims.width;\n const height = scale * dims.height;\n\n const targetCanvas = createCanvas({ width: inputSize, height: inputSize });\n const inputCanvas = input instanceof Canvas ? input : createCanvasFromMedia(input);\n\n const offset = Math.abs(width - height) / 2;\n const dx = centerImage && width < height ? offset : 0;\n const dy = centerImage && height < width ? offset : 0;\n getContext2dOrThrow(targetCanvas).drawImage(inputCanvas, dx, dy, width, height);\n\n return targetCanvas;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Dimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { padToSquare } from '../ops/padToSquare';\nimport {\n computeReshapedDimensions, isTensor3D, isTensor4D, range,\n} from '../utils/index';\nimport { createCanvasFromMedia } from './createCanvas';\nimport { imageToSquare } from './imageToSquare';\nimport { TResolvedNetInput } from './types';\n\nexport class NetInput {\n private _imageTensors: Array = []\n\n private _canvases: HTMLCanvasElement[] = []\n\n private _batchSize: number\n\n private _treatAsBatchInput: boolean = false\n\n private _inputDimensions: number[][] = []\n\n private _inputSize: number\n\n constructor(\n inputs: Array,\n treatAsBatchInput: boolean = false,\n ) {\n if (!Array.isArray(inputs)) {\n throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${inputs}`);\n }\n\n this._treatAsBatchInput = treatAsBatchInput;\n this._batchSize = inputs.length;\n\n inputs.forEach((input, idx) => {\n if (isTensor3D(input)) {\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = input.shape;\n return;\n }\n\n if (isTensor4D(input)) {\n const batchSize = (input as any).shape[0];\n if (batchSize !== 1) {\n throw new Error(`NetInput - tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = (input as any).shape.slice(1);\n return;\n }\n\n const canvas = (input as any) instanceof env.getEnv().Canvas ? input : createCanvasFromMedia(input);\n this._canvases[idx] = canvas;\n this._inputDimensions[idx] = [canvas.height, canvas.width, 3];\n });\n }\n\n public get imageTensors(): Array {\n return this._imageTensors;\n }\n\n public get canvases(): HTMLCanvasElement[] {\n return this._canvases;\n }\n\n public get isBatchInput(): boolean {\n return this.batchSize > 1 || this._treatAsBatchInput;\n }\n\n public get batchSize(): number {\n return this._batchSize;\n }\n\n public get inputDimensions(): number[][] {\n return this._inputDimensions;\n }\n\n public get inputSize(): number | undefined {\n return this._inputSize;\n }\n\n public get reshapedInputDimensions(): Dimensions[] {\n return range(this.batchSize, 0, 1).map(\n (_, batchIdx) => this.getReshapedInputDimensions(batchIdx),\n );\n }\n\n public getInput(batchIdx: number): tf.Tensor3D | tf.Tensor4D | HTMLCanvasElement {\n return this.canvases[batchIdx] || this.imageTensors[batchIdx];\n }\n\n public getInputDimensions(batchIdx: number): number[] {\n return this._inputDimensions[batchIdx];\n }\n\n public getInputHeight(batchIdx: number): number {\n return this._inputDimensions[batchIdx][0];\n }\n\n public getInputWidth(batchIdx: number): number {\n return this._inputDimensions[batchIdx][1];\n }\n\n public getReshapedInputDimensions(batchIdx: number): Dimensions {\n if (typeof this.inputSize !== 'number') {\n throw new Error('getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet');\n }\n\n const width = this.getInputWidth(batchIdx);\n const height = this.getInputHeight(batchIdx);\n return computeReshapedDimensions({ width, height }, this.inputSize);\n }\n\n /**\n * Create a batch tensor from all input canvases and tensors\n * with size [batchSize, inputSize, inputSize, 3].\n *\n * @param inputSize Height and width of the tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The batch tensor.\n */\n public toBatchTensor(inputSize: number, isCenterInputs: boolean = true): tf.Tensor4D {\n this._inputSize = inputSize;\n\n return tf.tidy(() => {\n const inputTensors = range(this.batchSize, 0, 1).map((batchIdx) => {\n const input = this.getInput(batchIdx);\n\n if (input instanceof tf.Tensor) {\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n let imgTensor = isTensor4D(input) ? input : input.expandDims();\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n imgTensor = padToSquare(imgTensor, isCenterInputs);\n\n if (imgTensor.shape[1] !== inputSize || imgTensor.shape[2] !== inputSize) {\n imgTensor = tf.image.resizeBilinear(imgTensor, [inputSize, inputSize]);\n }\n\n return imgTensor.as3D(inputSize, inputSize, 3);\n }\n\n if (input instanceof env.getEnv().Canvas) {\n return tf.browser.fromPixels(imageToSquare(input, inputSize, isCenterInputs));\n }\n\n throw new Error(`toBatchTensor - at batchIdx ${batchIdx}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${input}`);\n });\n\n // const batchTensor = tf.stack(inputTensors.map(t => t.toFloat())).as4D(this.batchSize, inputSize, inputSize, 3)\n const batchTensor = tf.stack(inputTensors.map((t) => tf.cast(t, 'float32'))).as4D(this.batchSize, inputSize, inputSize, 3);\n // const batchTensor = tf.stack(inputTensors.map(t => tf.Tensor.as4D(tf.cast(t, 'float32'))), this.batchSize, inputSize, inputSize, 3);\n\n return batchTensor;\n });\n }\n}\n", "import { isTensor3D, isTensor4D } from '../utils/index';\nimport { awaitMediaLoaded } from './awaitMediaLoaded';\nimport { isMediaElement } from './isMediaElement';\nimport { NetInput } from './NetInput';\nimport { resolveInput } from './resolveInput';\nimport { TNetInput } from './types';\n\n/**\n * Validates the input to make sure, they are valid net inputs and awaits all media elements\n * to be finished loading.\n *\n * @param input The input, which can be a media element or an array of different media elements.\n * @returns A NetInput instance, which can be passed into one of the neural networks.\n */\nexport async function toNetInput(inputs: TNetInput): Promise {\n if (inputs instanceof NetInput) {\n return inputs;\n }\n\n const inputArgArray = Array.isArray(inputs)\n ? inputs\n : [inputs];\n\n if (!inputArgArray.length) {\n throw new Error('toNetInput - empty array passed as input');\n }\n\n const getIdxHint = (idx: number) => (Array.isArray(inputs) ? ` at input index ${idx}:` : '');\n\n const inputArray = inputArgArray.map(resolveInput);\n\n inputArray.forEach((input, i) => {\n if (!isMediaElement(input) && !isTensor3D(input) && !isTensor4D(input)) {\n if (typeof inputArgArray[i] === 'string') {\n throw new Error(`toNetInput -${getIdxHint(i)} string passed, but could not resolve HTMLElement for element id ${inputArgArray[i]}`);\n }\n\n throw new Error(`toNetInput -${getIdxHint(i)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);\n }\n\n if (isTensor4D(input)) {\n // if tf.Tensor4D is passed in the input array, the batch size has to be 1\n const batchSize = input.shape[0];\n if (batchSize !== 1) {\n throw new Error(`toNetInput -${getIdxHint(i)} tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n }\n });\n\n // wait for all media elements being loaded\n await Promise.all(\n inputArray.map((input) => isMediaElement(input) && awaitMediaLoaded(input)),\n );\n\n return new NetInput(inputArray, Array.isArray(inputs));\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { Rect } from '../classes/Rect';\nimport { env } from '../env/index';\nimport { createCanvas } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { imageTensorToCanvas } from './imageTensorToCanvas';\nimport { toNetInput } from './toNetInput';\nimport { TNetInput } from './types';\n\n/**\n * Extracts the image regions containing the detected faces.\n *\n * @param input The image that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns The Canvases of the corresponding image region for each detected face.\n */\nexport async function extractFaces(\n input: TNetInput,\n detections: Array,\n): Promise {\n const { Canvas } = env.getEnv();\n\n let canvas = input as HTMLCanvasElement;\n\n if (!(input instanceof Canvas)) {\n const netInput = await toNetInput(input);\n\n if (netInput.batchSize > 1) {\n throw new Error('extractFaces - batchSize > 1 not supported');\n }\n\n const tensorOrCanvas = netInput.getInput(0);\n canvas = tensorOrCanvas instanceof Canvas\n ? tensorOrCanvas\n : await imageTensorToCanvas(tensorOrCanvas);\n }\n\n const ctx = getContext2dOrThrow(canvas);\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(canvas.width, canvas.height).box.floor()\n : det),\n )\n .map((box) => box.clipAtImageBorders(canvas.width, canvas.height));\n\n return boxes.map(({\n x, y, width, height,\n }) => {\n const faceImg = createCanvas({ width, height });\n getContext2dOrThrow(faceImg)\n .putImageData(ctx.getImageData(x, y, width, height), 0, 0);\n return faceImg;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isTensor3D, isTensor4D } from '../utils/index';\n\n/**\n * Extracts the tensors of the image regions containing the detected faces.\n * Useful if you want to compute the face descriptors for the face images.\n * Using this method is faster then extracting a canvas for each face and\n * converting them to tensors individually.\n *\n * @param imageTensor The image tensor that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns Tensors of the corresponding image region for each detected face.\n */\nexport async function extractFaceTensors(\n imageTensor: tf.Tensor3D | tf.Tensor4D,\n detections: Array,\n): Promise {\n if (!isTensor3D(imageTensor) && !isTensor4D(imageTensor)) {\n throw new Error('extractFaceTensors - expected image tensor to be 3D or 4D');\n }\n\n if (isTensor4D(imageTensor) && imageTensor.shape[0] > 1) {\n throw new Error('extractFaceTensors - batchSize > 1 not supported');\n }\n\n return tf.tidy(() => {\n const [imgHeight, imgWidth, numChannels] = imageTensor.shape.slice(isTensor4D(imageTensor) ? 1 : 0);\n\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(imgWidth, imgHeight).box\n : det),\n )\n .map((box) => box.clipAtImageBorders(imgWidth, imgHeight));\n\n const faceTensors = boxes.map(({\n x, y, width, height,\n }) => tf.slice3d(imageTensor.as3D(imgHeight, imgWidth, numChannels), [y, x, 0], [height, width, numChannels]));\n\n return faceTensors;\n });\n}\n", "import { env } from '../env/index';\n\nexport async function fetchOrThrow(\n url: string,\n // eslint-disable-next-line no-undef\n init?: RequestInit,\n): Promise {\n const { fetch } = env.getEnv();\n const res = await fetch(url, init);\n if (!(res.status < 400)) {\n throw new Error(`failed to fetch: (${res.status}) ${res.statusText}, from url: ${res.url}`);\n }\n return res;\n}\n", "import { bufferToImage } from './bufferToImage';\nimport { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchImage(uri: string): Promise {\n const res = await fetchOrThrow(uri);\n const blob = await (res).blob();\n\n if (!blob.type.startsWith('image/')) {\n throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${blob.type}, for url: ${res.url}`);\n }\n return bufferToImage(blob);\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchJson(uri: string): Promise {\n return (await fetchOrThrow(uri)).json();\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchNetWeights(uri: string): Promise {\n return new Float32Array(await (await fetchOrThrow(uri)).arrayBuffer());\n}\n", "export function getModelUris(uri: string | undefined, defaultModelName: string) {\n const defaultManifestFilename = `${defaultModelName}-weights_manifest.json`;\n\n if (!uri) {\n return {\n modelBaseUri: '',\n manifestUri: defaultManifestFilename,\n };\n }\n\n if (uri === '/') {\n return {\n modelBaseUri: '/',\n manifestUri: `/${defaultManifestFilename}`,\n };\n }\n // eslint-disable-next-line no-nested-ternary\n const protocol = uri.startsWith('http://') ? 'http://' : uri.startsWith('https://') ? 'https://' : '';\n uri = uri.replace(protocol, '');\n\n const parts = uri.split('/').filter((s) => s);\n\n const manifestFile = uri.endsWith('.json')\n ? parts[parts.length - 1]\n : defaultManifestFilename;\n\n let modelBaseUri = protocol + (uri.endsWith('.json') ? parts.slice(0, parts.length - 1) : parts).join('/');\n modelBaseUri = uri.startsWith('/') ? `/${modelBaseUri}` : modelBaseUri;\n\n return {\n modelBaseUri,\n manifestUri: modelBaseUri === '/' ? `/${manifestFile}` : `${modelBaseUri}/${manifestFile}`,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { getModelUris } from '../common/getModelUris';\nimport { fetchJson } from './fetchJson';\n\nexport async function loadWeightMap(\n uri: string | undefined,\n defaultModelName: string,\n): Promise {\n const { manifestUri, modelBaseUri } = getModelUris(uri, defaultModelName);\n const manifest = await fetchJson(manifestUri);\n // if (manifest['weightsManifest']) manifest = manifest['weightsManifest'];\n return tf.io.loadWeights(manifest, modelBaseUri);\n}\n", "import { IDimensions } from '../classes/index';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function matchDimensions(input: IDimensions, reference: IDimensions, useMediaDimensions: boolean = false) {\n const { width, height } = useMediaDimensions\n ? getMediaDimensions(reference)\n : reference;\n input.width = width;\n input.height = height;\n return { width, height };\n}\n", "import * as tf from '../dist/tfjs.esm.js';\n\nimport { ParamMapping } from './common/index';\nimport { getModelUris } from './common/getModelUris';\nimport { loadWeightMap } from './dom/index';\nimport { env } from './env/index';\n\nexport abstract class NeuralNetwork {\n\n protected _params: TNetParams | undefined = undefined\n protected _paramMappings: ParamMapping[] = []\n\n constructor(protected _name: string) {\n }\n\n public get params(): TNetParams | undefined { return this._params }\n public get paramMappings(): ParamMapping[] { return this._paramMappings }\n public get isLoaded(): boolean { return !!this.params }\n\n public getParamFromPath(paramPath: string): tf.Tensor {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n return obj[objProp]\n }\n\n public reassignParamFromPath(paramPath: string, tensor: tf.Tensor) {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n obj[objProp].dispose()\n obj[objProp] = tensor\n }\n\n public getParamList() {\n return this._paramMappings.map(({ paramPath }) => ({\n path: paramPath,\n tensor: this.getParamFromPath(paramPath)\n }))\n }\n\n public getTrainableParams() {\n return this.getParamList().filter(param => param.tensor instanceof tf.Variable)\n }\n\n public getFrozenParams() {\n return this.getParamList().filter(param => !(param.tensor instanceof tf.Variable))\n }\n\n public variable() {\n this.getFrozenParams().forEach(({ path, tensor }) => {\n this.reassignParamFromPath(path, tensor.variable())\n })\n }\n\n public freeze() {\n this.getTrainableParams().forEach(({ path, tensor: variable }) => {\n const tensor = tf.tensor(variable.dataSync())\n variable.dispose()\n this.reassignParamFromPath(path, tensor)\n })\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.getParamList().forEach(param => {\n if (throwOnRedispose && param.tensor.isDisposed) {\n throw new Error(`param tensor has already been disposed for path ${param.path}`)\n }\n param.tensor.dispose()\n })\n this._params = undefined\n }\n\n public serializeParams(): Float32Array {\n return new Float32Array(\n this.getParamList()\n .map(({ tensor }) => Array.from(tensor.dataSync()) as number[])\n .reduce((flat, arr) => flat.concat(arr))\n )\n }\n\n public async load(weightsOrUrl: Float32Array | string | undefined): Promise {\n if (weightsOrUrl instanceof Float32Array) {\n this.extractWeights(weightsOrUrl)\n return\n }\n\n await this.loadFromUri(weightsOrUrl)\n }\n\n public async loadFromUri(uri: string | undefined) {\n if (uri && typeof uri !== 'string') {\n throw new Error(`${this._name}.loadFromUri - expected model uri`)\n }\n\n const weightMap = await loadWeightMap(uri, this.getDefaultModelName())\n this.loadFromWeightMap(weightMap)\n }\n\n public async loadFromDisk(filePath: string | undefined) {\n if (filePath && typeof filePath !== 'string') {\n throw new Error(`${this._name}.loadFromDisk - expected model file path`)\n }\n\n const { readFile } = env.getEnv()\n\n const { manifestUri, modelBaseUri } = getModelUris(filePath, this.getDefaultModelName())\n\n const fetchWeightsFromDisk = (filePaths: string[]) => Promise.all(\n filePaths.map(filePath => readFile(filePath).then(buf => buf.buffer))\n )\n const loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk)\n const manifest = JSON.parse((await readFile(manifestUri)).toString())\n const weightMap = await loadWeights(manifest, modelBaseUri)\n\n this.loadFromWeightMap(weightMap)\n }\n\n public loadFromWeightMap(weightMap: tf.NamedTensorMap) {\n const {\n paramMappings,\n params\n } = this.extractParamsFromWeigthMap(weightMap)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n public extractWeights(weights: Float32Array) {\n const {\n paramMappings,\n params\n } = this.extractParams(weights)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n private traversePropertyPath(paramPath: string) {\n if (!this.params) {\n throw new Error(`traversePropertyPath - model has no loaded params`)\n }\n\n const result = paramPath.split('/').reduce((res: { nextObj: any, obj?: any, objProp?: string }, objProp) => {\n if (!res.nextObj.hasOwnProperty(objProp)) {\n throw new Error(`traversePropertyPath - object does not have property ${objProp}, for path ${paramPath}`)\n }\n\n return { obj: res.nextObj, objProp, nextObj: res.nextObj[objProp] }\n }, { nextObj: this.params })\n\n const { obj, objProp } = result\n if (!obj || !objProp || !(obj[objProp] instanceof tf.Tensor)) {\n throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${paramPath}`)\n }\n\n return { obj, objProp }\n }\n\n protected abstract getDefaultModelName(): string\n protected abstract extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TNetParams, paramMappings: ParamMapping[] }\n protected abstract extractParams(weights: Float32Array): { params: TNetParams, paramMappings: ParamMapping[] }\n}", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { SeparableConvParams } from './types';\n\nexport function depthwiseSeparableConv(\n x: tf.Tensor4D,\n params: SeparableConvParams,\n stride: [number, number],\n): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same');\n out = tf.add(out, params.bias);\n return out;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams, SeparableConvParams } from '../common/index';\nimport { depthwiseSeparableConv } from '../common/depthwiseSeparableConv';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function denseBlock3(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock3Params,\n isFirstLayer: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, [2, 2], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, [2, 2]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n });\n}\n\nexport function denseBlock4(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock4Params,\n isFirstLayer: boolean = false,\n isScaleDown: boolean = true,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, isScaleDown ? [2, 2] : [1, 1], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, isScaleDown ? [2, 2] : [1, 1]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n const in4 = tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n const out4 = depthwiseSeparableConv(in4, denseBlockParams.conv3, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, tf.add(out3, out4)))) as tf.Tensor4D;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams } from './types';\n\nexport function convLayer(\n x: tf.Tensor4D,\n params: ConvParams,\n padding: 'valid' | 'same' = 'same',\n withRelu: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out = tf.add(\n tf.conv2d(x, params.filters, [1, 1], padding),\n params.bias,\n ) as tf.Tensor4D;\n\n return withRelu ? tf.relu(out) : out;\n });\n}\n", "import { ParamMapping } from './types';\n\nexport function disposeUnusedWeightTensors(weightMap: any, paramMappings: ParamMapping[]) {\n Object.keys(weightMap).forEach((path) => {\n if (!paramMappings.some((pm) => pm.originalPath === path)) {\n weightMap[path].dispose();\n }\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams, ExtractWeightsFunction, ParamMapping } from './types';\n\nexport function extractConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams => {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ExtractWeightsFunction, FCParams, ParamMapping } from './types';\n\nexport function extractFCParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): FCParams => {\n const fc_weights = tf.tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]);\n const fc_bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return {\n weights: fc_weights,\n bias: fc_bias,\n };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\n// eslint-disable-next-line no-unused-vars\nexport type ExtractWeightsFunction = (numWeights: number) => Float32Array\n\nexport type ParamMapping = {\n originalPath?: string\n paramPath: string\n}\n\nexport type ConvParams = {\n filters: tf.Tensor4D\n bias: tf.Tensor1D\n}\n\nexport type FCParams = {\n weights: tf.Tensor2D\n bias: tf.Tensor1D\n}\n\nexport class SeparableConvParams {\n // eslint-disable-next-line no-useless-constructor\n constructor(\n // eslint-disable-next-line no-unused-vars\n public depthwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public pointwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public bias: tf.Tensor1D,\n // eslint-disable-next-line no-empty-function\n ) {}\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ExtractWeightsFunction, ParamMapping, SeparableConvParams } from './types';\n\nexport function extractSeparableConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (channelsIn: number, channelsOut: number, mappedPrefix: string): SeparableConvParams => {\n const depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]);\n const pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]);\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/depthwise_filter` },\n { paramPath: `${mappedPrefix}/pointwise_filter` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n\nexport function loadSeparableConvParamsFactory(\n // eslint-disable-next-line no-unused-vars\n extractWeightEntry: (originalPath: string, paramRank: number) => T,\n) {\n return (prefix: string): SeparableConvParams => {\n const depthwise_filter = extractWeightEntry(`${prefix}/depthwise_filter`, 4);\n const pointwise_filter = extractWeightEntry(`${prefix}/pointwise_filter`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n", "import { isTensor } from '../utils/index';\nimport { ParamMapping } from './types';\n\nexport function extractWeightEntryFactory(weightMap: any, paramMappings: ParamMapping[]) {\n return (originalPath: string, paramRank: number, mappedPath?: string) => {\n const tensor = weightMap[originalPath];\n\n if (!isTensor(tensor, paramRank)) {\n throw new Error(`expected weightMap[${originalPath}] to be a Tensor${paramRank}D, instead have ${tensor}`);\n }\n\n paramMappings.push(\n { originalPath, paramPath: mappedPath || originalPath },\n );\n\n return tensor;\n };\n}\n", "export function extractWeightsFactory(weights: Float32Array) {\n let remainingWeights = weights;\n\n function extractWeights(numWeights: number): Float32Array {\n const ret = remainingWeights.slice(0, numWeights);\n remainingWeights = remainingWeights.slice(numWeights);\n return ret;\n }\n\n function getRemainingWeights(): Float32Array {\n return remainingWeights;\n }\n\n return {\n extractWeights,\n getRemainingWeights,\n };\n}\n", "import {\n extractConvParamsFactory,\n extractSeparableConvParamsFactory,\n ExtractWeightsFunction,\n ParamMapping,\n} from '../common/index';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractDenseBlock3Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv0`)\n : extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/conv0`);\n const conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv1`);\n const conv2 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const { conv0, conv1, conv2 } = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer);\n const conv3 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock4Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock4Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock4Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock4Params(64, 128, 'dense2');\n const dense3 = extractDenseBlock4Params(128, 256, 'dense3');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: {\n dense0, dense1, dense2, dense3,\n },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams } from './types';\n\n// eslint-disable-next-line no-unused-vars\nexport function loadConvParamsFactory(extractWeightEntry: (originalPath: string, paramRank: number) => T) {\n return (prefix: string): ConvParams => {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return { filters, bias };\n };\n}\n", "import { extractWeightEntryFactory, loadSeparableConvParamsFactory, ParamMapping } from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractDenseBlock3Params(prefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(prefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n const conv3 = extractSeparableConvParams(`${prefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock4Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock4Params('dense0', true),\n dense1: extractDenseBlock4Params('dense1'),\n dense2: extractDenseBlock4Params('dense2'),\n dense3: extractDenseBlock4Params('dense3'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock4 } from './denseBlock';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { FaceFeatureExtractorParams, IFaceFeatureExtractor } from './types';\n\nexport class FaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('FaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock4(normalized, params.dense0, true);\n out = denseBlock4(out, params.dense1);\n out = denseBlock4(out, params.dense2);\n out = denseBlock4(out, params.dense3);\n out = tf.avgPool(out, [7, 7], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FCParams } from './types';\n\nexport function fullyConnectedLayer(\n x: tf.Tensor2D,\n params: FCParams,\n): tf.Tensor2D {\n return tf.tidy(() => tf.add(\n tf.matMul(x, params.weights),\n params.bias,\n ));\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array, channelsIn: number, channelsOut: number): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const fc = extractFCParams(channelsIn, channelsOut, 'fc');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: extractFcParams('fc'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nexport function seperateWeightMaps(weightMap: tf.NamedTensorMap) {\n const featureExtractorMap: tf.NamedTensorMap = {};\n const classifierMap: tf.NamedTensorMap = {};\n\n Object.keys(weightMap).forEach((key) => {\n const map = key.startsWith('fc') ? classifierMap : featureExtractorMap;\n map[key] = weightMap[key];\n });\n\n return { featureExtractorMap, classifierMap };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { NetInput } from '../dom/index';\nimport {\n FaceFeatureExtractorParams,\n IFaceFeatureExtractor,\n TinyFaceFeatureExtractorParams,\n} from '../faceFeatureExtractor/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { NetParams } from './types';\nimport { seperateWeightMaps } from './util';\n\nexport abstract class FaceProcessor<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends NeuralNetwork {\n protected _faceFeatureExtractor: IFaceFeatureExtractor\n\n constructor(_name: string, faceFeatureExtractor: IFaceFeatureExtractor) {\n super(_name);\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): IFaceFeatureExtractor {\n return this._faceFeatureExtractor;\n }\n\n protected abstract getDefaultModelName(): string\n\n protected abstract getClassifierChannelsIn(): number\n\n protected abstract getClassifierChannelsOut(): number\n\n public runNet(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n return fullyConnectedLayer(bottleneckFeatures.as2D(bottleneckFeatures.shape[0], -1), params.fc);\n });\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights, this.getClassifierChannelsIn(), this.getClassifierChannelsOut());\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const cIn = this.getClassifierChannelsIn();\n const cOut = this.getClassifierChannelsOut();\n const classifierWeightSize = (cOut * cIn) + cOut;\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "export const FACE_EXPRESSION_LABELS = ['neutral', 'happy', 'sad', 'angry', 'fearful', 'disgusted', 'surprised'];\n\nexport class FaceExpressions {\n public neutral: number\n\n public happy: number\n\n public sad: number\n\n public angry: number\n\n public fearful: number\n\n public disgusted: number\n\n public surprised: number\n\n constructor(probabilities: number[] | Float32Array) {\n if (probabilities.length !== 7) {\n throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${probabilities.length}`);\n }\n\n FACE_EXPRESSION_LABELS.forEach((expression, idx) => {\n this[expression] = probabilities[idx];\n });\n }\n\n asSortedArray() {\n return FACE_EXPRESSION_LABELS\n .map((expression) => ({ expression, probability: this[expression] as number }))\n .sort((e0, e1) => e1.probability - e0.probability);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { FaceExpressions } from './FaceExpressions';\n\nexport class FaceExpressionNet extends FaceProcessor {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceExpressionNet', faceFeatureExtractor);\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n return tf.tidy(() => tf.softmax(this.runNet(input)));\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictExpressions(input: TNetInput) {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n const probabilitesByBatch = await Promise.all(tf.unstack(out).map(async (t) => {\n const data = await t.data();\n t.dispose();\n return data;\n }));\n out.dispose();\n\n const predictionsByBatch = probabilitesByBatch\n .map((probabilites) => new FaceExpressions(probabilites as Float32Array));\n\n return netInput.isBatchInput\n ? predictionsByBatch\n : predictionsByBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_expression_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n\n protected getClassifierChannelsOut(): number {\n return 7;\n }\n}\n", "import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\n\nexport type WithFaceExpressions = TSource & {\n expressions: FaceExpressions\n}\n\nexport function isWithFaceExpressions(obj: any): obj is WithFaceExpressions<{}> {\n return obj.expressions instanceof FaceExpressions;\n}\n\nexport function extendWithFaceExpressions<\n TSource\n>(\n sourceObj: TSource,\n expressions: FaceExpressions,\n): WithFaceExpressions {\n const extension = { expressions };\n return { ...sourceObj, ...extension };\n}\n", "import { IPoint, Point } from '../classes/index';\nimport { FaceExpressions } from '../faceExpressionNet/index';\nimport { isWithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { round } from '../utils/index';\nimport { DrawTextField } from './DrawTextField';\n\nexport type DrawFaceExpressionsInput = FaceExpressions | WithFaceExpressions<{}>\n\nexport function drawFaceExpressions(\n canvasArg: string | HTMLCanvasElement,\n faceExpressions: DrawFaceExpressionsInput | Array,\n minConfidence = 0.1,\n textFieldAnchor?: IPoint,\n) {\n const faceExpressionsArray = Array.isArray(faceExpressions) ? faceExpressions : [faceExpressions];\n\n faceExpressionsArray.forEach((e) => {\n // eslint-disable-next-line no-nested-ternary\n const expr = e instanceof FaceExpressions\n ? e\n : (isWithFaceExpressions(e) ? e.expressions : undefined);\n if (!expr) {\n throw new Error('drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof');\n }\n\n const sorted = expr.asSortedArray();\n const resultsToDisplay = sorted.filter((exprLocal) => exprLocal.probability > minConfidence);\n\n const anchor = isWithFaceDetection(e)\n ? e.detection.box.bottomLeft\n : (textFieldAnchor || new Point(0, 0));\n\n const drawTextField = new DrawTextField(\n resultsToDisplay.map((exprLocal) => `${exprLocal.expression} (${round(exprLocal.probability)})`),\n anchor,\n );\n drawTextField.draw(canvasArg);\n });\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { isWithFaceDetection, WithFaceDetection } from './WithFaceDetection';\n\nexport type WithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 > = TSource & {\n landmarks: TFaceLandmarks\n unshiftedLandmarks: TFaceLandmarks\n alignedRect: FaceDetection\n }\n\nexport function isWithFaceLandmarks(obj: any): obj is WithFaceLandmarks, FaceLandmarks> {\n return isWithFaceDetection(obj)\n // eslint-disable-next-line dot-notation\n && obj['landmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['unshiftedLandmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['alignedRect'] instanceof FaceDetection;\n}\n\nexport function extendWithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 >(sourceObj: TSource, unshiftedLandmarks: TFaceLandmarks): WithFaceLandmarks {\n const { box: shift } = sourceObj.detection;\n const landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y);\n\n const rect = landmarks.align();\n const { imageDims } = sourceObj.detection;\n const alignedRect = new FaceDetection(sourceObj.detection.score, rect.rescale(imageDims.reverse()), imageDims);\n\n const extension = {\n landmarks,\n unshiftedLandmarks,\n alignedRect,\n };\n\n return { ...sourceObj, ...extension };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IPoint } from '../classes/index';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { drawContour } from './drawContour';\n\nexport interface IDrawFaceLandmarksOptions {\n drawLines?: boolean\n drawPoints?: boolean\n lineWidth?: number\n pointSize?: number\n lineColor?: string\n pointColor?: string\n}\n\nexport class DrawFaceLandmarksOptions {\n public drawLines: boolean\n\n public drawPoints: boolean\n\n public lineWidth: number\n\n public pointSize: number\n\n public lineColor: string\n\n public pointColor: string\n\n constructor(options: IDrawFaceLandmarksOptions = {}) {\n const {\n drawLines = true, drawPoints = true, lineWidth, lineColor, pointSize, pointColor,\n } = options;\n this.drawLines = drawLines;\n this.drawPoints = drawPoints;\n this.lineWidth = lineWidth || 1;\n this.pointSize = pointSize || 2;\n this.lineColor = lineColor || 'rgba(0, 255, 255, 1)';\n this.pointColor = pointColor || 'rgba(255, 0, 255, 1)';\n }\n}\n\nexport class DrawFaceLandmarks {\n public faceLandmarks: FaceLandmarks\n\n public options: DrawFaceLandmarksOptions\n\n constructor(\n faceLandmarks: FaceLandmarks,\n options: IDrawFaceLandmarksOptions = {},\n ) {\n this.faceLandmarks = faceLandmarks;\n this.options = new DrawFaceLandmarksOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const {\n drawLines, drawPoints, lineWidth, lineColor, pointSize, pointColor,\n } = this.options;\n\n if (drawLines && this.faceLandmarks instanceof FaceLandmarks68) {\n ctx.strokeStyle = lineColor;\n ctx.lineWidth = lineWidth;\n drawContour(ctx, this.faceLandmarks.getJawOutline());\n drawContour(ctx, this.faceLandmarks.getLeftEyeBrow());\n drawContour(ctx, this.faceLandmarks.getRightEyeBrow());\n drawContour(ctx, this.faceLandmarks.getNose());\n drawContour(ctx, this.faceLandmarks.getLeftEye(), true);\n drawContour(ctx, this.faceLandmarks.getRightEye(), true);\n drawContour(ctx, this.faceLandmarks.getMouth(), true);\n }\n\n if (drawPoints) {\n ctx.strokeStyle = pointColor;\n ctx.fillStyle = pointColor;\n\n const drawPoint = (pt: IPoint) => {\n ctx.beginPath();\n ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI);\n ctx.fill();\n };\n this.faceLandmarks.positions.forEach(drawPoint);\n }\n }\n}\n\nexport type DrawFaceLandmarksInput = FaceLandmarks | WithFaceLandmarks>\n\nexport function drawFaceLandmarks(\n canvasArg: string | HTMLCanvasElement,\n faceLandmarks: DrawFaceLandmarksInput | Array,\n) {\n const faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks];\n faceLandmarksArray.forEach((f) => {\n // eslint-disable-next-line no-nested-ternary\n const landmarks = f instanceof FaceLandmarks\n ? f\n : (isWithFaceLandmarks(f) ? f.landmarks : undefined);\n if (!landmarks) {\n throw new Error('drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof');\n }\n\n new DrawFaceLandmarks(landmarks).draw(canvasArg);\n });\n}\n", "import { extractConvParamsFactory, extractSeparableConvParamsFactory, extractWeightsFactory } from '../common/index';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractReductionBlockParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(channels: number, mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParams(weights: Float32Array, numMainBlocks: number): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const entry_flow_conv_in = extractConvParams(3, 32, 3, 'entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams(32, 64, 'entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams(64, 128, 'entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(128, `middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams(128, 256, 'exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams(256, 512, 'exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { entry_flow, middle_flow, exit_flow },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n disposeUnusedWeightTensors,\n extractWeightEntryFactory,\n loadSeparableConvParamsFactory,\n ParamMapping,\n} from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractReductionBlockParams(mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(`${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(`${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n numMainBlocks: number,\n): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const entry_flow_conv_in = extractConvParams('entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams('entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams('entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(`middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams('exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams('exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params: { entry_flow, middle_flow, exit_flow }, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams, depthwiseSeparableConv } from '../common/index';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { range } from '../utils/index';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction conv(x: tf.Tensor4D, params: ConvParams, stride: [number, number]): tf.Tensor4D {\n return tf.add(tf.conv2d(x, params.filters, stride, 'same'), params.bias);\n}\n\nfunction reductionBlock(x: tf.Tensor4D, params: ReductionBlockParams, isActivateInput: boolean = true): tf.Tensor4D {\n let out = isActivateInput ? tf.relu(x) : x;\n out = depthwiseSeparableConv(out, params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = tf.maxPool(out, [3, 3], [2, 2], 'same');\n out = tf.add(out, conv(x, params.expansion_conv, [2, 2]));\n return out;\n}\n\nfunction mainBlock(x: tf.Tensor4D, params: MainBlockParams): tf.Tensor4D {\n let out = depthwiseSeparableConv(tf.relu(x), params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv2, [1, 1]);\n out = tf.add(out, x);\n return out;\n}\n\nexport class TinyXception extends NeuralNetwork {\n private _numMainBlocks: number\n\n constructor(numMainBlocks: number) {\n super('TinyXception');\n this._numMainBlocks = numMainBlocks;\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyXception - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = tf.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));\n out = reductionBlock(out, params.entry_flow.reduction_block_0, false);\n out = reductionBlock(out, params.entry_flow.reduction_block_1);\n\n range(this._numMainBlocks, 0, 1).forEach((idx) => {\n out = mainBlock(out, params.middle_flow[`main_block_${idx}`]);\n });\n\n out = reductionBlock(out, params.exit_flow.reduction_block);\n out = tf.relu(depthwiseSeparableConv(out, params.exit_flow.separable_conv, [1, 1]));\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_xception_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this._numMainBlocks);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights, this._numMainBlocks);\n }\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const age = extractFCParams(512, 1, 'fc/age');\n const gender = extractFCParams(512, 2, 'fc/gender');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc: { age, gender } },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: {\n age: extractFcParams('fc/age'),\n gender: extractFcParams('fc/gender'),\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FCParams } from '../common/index';\n\n// eslint-disable-next-line no-shadow\nexport enum Gender {\n // eslint-disable-next-line no-unused-vars\n FEMALE = 'female',\n // eslint-disable-next-line no-unused-vars\n MALE = 'male'\n}\n\nexport type AgeAndGenderPrediction = {\n age: number\n gender: Gender\n genderProbability: number\n}\n\nexport type NetOutput = { age: tf.Tensor1D, gender: tf.Tensor2D }\n\nexport type NetParams = {\n fc: {\n age: FCParams\n gender: FCParams\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { seperateWeightMaps } from '../faceProcessor/util';\nimport { TinyXception } from '../xception/TinyXception';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport {\n AgeAndGenderPrediction, Gender, NetOutput, NetParams,\n} from './types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\n\nexport class AgeGenderNet extends NeuralNetwork {\n private _faceFeatureExtractor: TinyXception\n\n constructor(faceFeatureExtractor: TinyXception = new TinyXception(2)) {\n super('AgeGenderNet');\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): TinyXception {\n return this._faceFeatureExtractor;\n }\n\n public runNet(input: NetInput | tf.Tensor4D): NetOutput {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n\n const pooled = tf.avgPool(bottleneckFeatures, [7, 7], [2, 2], 'valid').as2D(bottleneckFeatures.shape[0], -1);\n const age = fullyConnectedLayer(pooled, params.fc.age).as1D();\n const gender = fullyConnectedLayer(pooled, params.fc.gender);\n return { age, gender };\n });\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): NetOutput {\n return tf.tidy(() => {\n const { age, gender } = this.runNet(input);\n return { age, gender: tf.softmax(gender) };\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictAgeAndGender(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n\n const ages = tf.unstack(out.age);\n const genders = tf.unstack(out.gender);\n const ageAndGenderTensors = ages.map((ageTensor, i) => ({\n ageTensor,\n genderTensor: genders[i],\n }));\n\n const predictionsByBatch = await Promise.all(\n ageAndGenderTensors.map(async ({ ageTensor, genderTensor }) => {\n const age = (await ageTensor.data())[0];\n const probMale = (await genderTensor.data())[0];\n const isMale = probMale > 0.5;\n const gender = isMale ? Gender.MALE : Gender.FEMALE;\n const genderProbability = isMale ? probMale : (1 - probMale);\n\n ageTensor.dispose();\n genderTensor.dispose();\n return { age, gender, genderProbability };\n }),\n );\n out.age.dispose();\n out.gender.dispose();\n\n return netInput.isBatchInput ? predictionsByBatch as AgeAndGenderPrediction[] : predictionsByBatch[0] as AgeAndGenderPrediction;\n }\n\n protected getDefaultModelName(): string {\n return 'age_gender_model';\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights);\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const classifierWeightSize = (512 * 1 + 1) + (512 * 2 + 2);\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { IDimensions, Point } from '../classes/index';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractorParams, TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { isEven } from '../utils/index';\n\nexport abstract class FaceLandmark68NetBase<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends FaceProcessor {\n public postProcess(output: tf.Tensor2D, inputSize: number, originalDimensions: IDimensions[]): tf.Tensor2D {\n const inputDimensions = originalDimensions.map(({ width, height }) => {\n const scale = inputSize / Math.max(height, width);\n return {\n width: width * scale,\n height: height * scale,\n };\n });\n\n const batchSize = inputDimensions.length;\n\n return tf.tidy(() => {\n const createInterleavedTensor = (fillX: number, fillY: number) => tf.stack([tf.fill([68], fillX, 'float32'), tf.fill([68], fillY, 'float32')], 1).as2D(1, 136).as1D();\n\n // eslint-disable-next-line no-unused-vars\n const getPadding = (batchIdx: number, cond: (w: number, h: number) => boolean): number => {\n const { width, height } = inputDimensions[batchIdx];\n return cond(width, height) ? Math.abs(width - height) / 2 : 0;\n };\n\n const getPaddingX = (batchIdx: number) => getPadding(batchIdx, (w, h) => w < h);\n const getPaddingY = (batchIdx: number) => getPadding(batchIdx, (w, h) => h < w);\n\n const landmarkTensors = output\n .mul(tf.fill([batchSize, 136], inputSize, 'float32'))\n .sub(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n getPaddingX(batchIdx),\n getPaddingY(batchIdx),\n ))))\n .div(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n inputDimensions[batchIdx].width,\n inputDimensions[batchIdx].height,\n ))));\n\n return landmarkTensors as tf.Tensor2D;\n });\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n return tf.tidy(() => {\n const out = this.runNet(input);\n return this.postProcess(\n out,\n input.inputSize as number,\n input.inputDimensions.map(([height, width]) => ({ height, width })),\n );\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async detectLandmarks(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const landmarkTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const landmarksForBatch = await Promise.all(landmarkTensors.map(\n async (landmarkTensor, batchIdx) => {\n const landmarksArray = Array.from(await landmarkTensor.data());\n const xCoords = landmarksArray.filter((_, i) => isEven(i));\n const yCoords = landmarksArray.filter((_, i) => !isEven(i));\n\n return new FaceLandmarks68(\n Array(68).fill(0).map((_, i) => new Point(xCoords[i] as number, yCoords[i] as number)),\n {\n height: netInput.getInputHeight(batchIdx),\n width: netInput.getInputWidth(batchIdx),\n },\n );\n },\n ));\n\n landmarkTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput ? landmarksForBatch as FaceLandmarks68[] : landmarksForBatch[0] as FaceLandmarks68;\n }\n\n protected getClassifierChannelsOut(): number {\n return 136;\n }\n}\n", "import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68Net extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceLandmark68Net', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMapTiny(\n weightMap: tf.NamedTensorMap,\n): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock3Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock3Params('dense0', true),\n dense1: extractDenseBlock3Params('dense1'),\n dense2: extractDenseBlock3Params('dense2'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsTiny(weights: Float32Array): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock3Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock3Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock3Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock3Params(64, 128, 'dense2');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { dense0, dense1, dense2 },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock3 } from './denseBlock';\nimport { extractParamsFromWeigthMapTiny } from './extractParamsFromWeigthMapTiny';\nimport { extractParamsTiny } from './extractParamsTiny';\nimport { IFaceFeatureExtractor, TinyFaceFeatureExtractorParams } from './types';\n\nexport class TinyFaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('TinyFaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyFaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock3(normalized, params.dense0, true);\n out = denseBlock3(out, params.dense1);\n out = denseBlock3(out, params.dense2);\n out = tf.avgPool(out, [14, 14], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_tiny_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMapTiny(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParamsTiny(weights);\n }\n}\n", "import { TinyFaceFeatureExtractor } from '../faceFeatureExtractor/TinyFaceFeatureExtractor';\nimport { TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68TinyNet extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: TinyFaceFeatureExtractor = new TinyFaceFeatureExtractor()) {\n super('FaceLandmark68TinyNet', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_tiny_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 128;\n }\n}\n", "import { FaceLandmark68Net } from './FaceLandmark68Net';\n\nexport * from './FaceLandmark68Net';\nexport * from './FaceLandmark68TinyNet';\n\nexport class FaceLandmarkNet extends FaceLandmark68Net {}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ScaleLayerParams } from './types';\n\nexport function scale(x: tf.Tensor4D, params: ScaleLayerParams): tf.Tensor4D {\n return tf.add(tf.mul(x, params.weights), params.biases);\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { scale } from './scaleLayer';\nimport { ConvLayerParams } from './types';\n\nfunction convLayer(\n x: tf.Tensor4D,\n params: ConvLayerParams,\n strides: [number, number],\n withRelu: boolean,\n padding: 'valid' | 'same' = 'same',\n): tf.Tensor4D {\n const { filters, bias } = params.conv;\n\n let out = tf.conv2d(x, filters, strides, padding);\n out = tf.add(out, bias);\n out = scale(out, params.scale);\n return withRelu ? tf.relu(out) : out;\n}\n\nexport function conv(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], true);\n}\n\nexport function convNoRelu(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], false);\n}\n\nexport function convDown(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [2, 2], true, 'valid');\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n ConvParams, extractWeightsFactory, ExtractWeightsFunction, ParamMapping,\n} from '../common/index';\nimport { isFloat } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractFilterValues(numFilterValues: number, numFilters: number, filterSize: number): tf.Tensor4D {\n const weights = extractWeights(numFilterValues);\n const depth = weights.length / (numFilters * filterSize * filterSize);\n\n if (isFloat(depth)) {\n throw new Error(`depth has to be an integer: ${depth}, weights.length: ${weights.length}, numFilters: ${numFilters}, filterSize: ${filterSize}`);\n }\n\n return tf.tidy(\n () => tf.transpose(\n tf.tensor4d(weights, [numFilters, depth, filterSize, filterSize]),\n [2, 3, 1, 0],\n ),\n );\n }\n\n function extractConvParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams {\n const filters = extractFilterValues(numFilterValues, numFilters, filterSize);\n const bias = tf.tensor1d(extractWeights(numFilters));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n }\n\n function extractScaleLayerParams(numWeights: number, mappedPrefix: string): ScaleLayerParams {\n const weights = tf.tensor1d(extractWeights(numWeights));\n const biases = tf.tensor1d(extractWeights(numWeights));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/biases` },\n );\n\n return {\n weights,\n biases,\n };\n }\n\n function extractConvLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvLayerParams {\n const conv = extractConvParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv`);\n const scale = extractScaleLayerParams(numFilters, `${mappedPrefix}/scale`);\n\n return { conv, scale };\n }\n\n function extractResidualLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n isDown: boolean = false,\n ): ResidualLayerParams {\n const conv1 = extractConvLayerParams((isDown ? 0.5 : 1) * numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv1`);\n const conv2 = extractConvLayerParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv2`);\n\n return { conv1, conv2 };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const conv32_down = extractConvLayerParams(4704, 32, 7, 'conv32_down');\n const conv32_1 = extractResidualLayerParams(9216, 32, 3, 'conv32_1');\n const conv32_2 = extractResidualLayerParams(9216, 32, 3, 'conv32_2');\n const conv32_3 = extractResidualLayerParams(9216, 32, 3, 'conv32_3');\n\n const conv64_down = extractResidualLayerParams(36864, 64, 3, 'conv64_down', true);\n const conv64_1 = extractResidualLayerParams(36864, 64, 3, 'conv64_1');\n const conv64_2 = extractResidualLayerParams(36864, 64, 3, 'conv64_2');\n const conv64_3 = extractResidualLayerParams(36864, 64, 3, 'conv64_3');\n\n const conv128_down = extractResidualLayerParams(147456, 128, 3, 'conv128_down', true);\n const conv128_1 = extractResidualLayerParams(147456, 128, 3, 'conv128_1');\n const conv128_2 = extractResidualLayerParams(147456, 128, 3, 'conv128_2');\n\n const conv256_down = extractResidualLayerParams(589824, 256, 3, 'conv256_down', true);\n const conv256_1 = extractResidualLayerParams(589824, 256, 3, 'conv256_1');\n const conv256_2 = extractResidualLayerParams(589824, 256, 3, 'conv256_2');\n const conv256_down_out = extractResidualLayerParams(589824, 256, 3, 'conv256_down_out');\n\n const fc = tf.tidy(\n () => tf.transpose(tf.tensor2d(extractWeights(256 * 128), [128, 256]), [1, 0]),\n );\n paramMappings.push({ paramPath: 'fc' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping } from '../common/index';\nimport { isTensor2D } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractScaleLayerParams(prefix: string): ScaleLayerParams {\n const weights = extractWeightEntry(`${prefix}/scale/weights`, 1);\n const biases = extractWeightEntry(`${prefix}/scale/biases`, 1);\n\n return { weights, biases };\n }\n\n function extractConvLayerParams(prefix: string): ConvLayerParams {\n const filters = extractWeightEntry(`${prefix}/conv/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/conv/bias`, 1);\n const scale = extractScaleLayerParams(prefix);\n\n return { conv: { filters, bias }, scale };\n }\n\n function extractResidualLayerParams(prefix: string): ResidualLayerParams {\n return {\n conv1: extractConvLayerParams(`${prefix}/conv1`),\n conv2: extractConvLayerParams(`${prefix}/conv2`),\n };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const conv32_down = extractConvLayerParams('conv32_down');\n const conv32_1 = extractResidualLayerParams('conv32_1');\n const conv32_2 = extractResidualLayerParams('conv32_2');\n const conv32_3 = extractResidualLayerParams('conv32_3');\n\n const conv64_down = extractResidualLayerParams('conv64_down');\n const conv64_1 = extractResidualLayerParams('conv64_1');\n const conv64_2 = extractResidualLayerParams('conv64_2');\n const conv64_3 = extractResidualLayerParams('conv64_3');\n\n const conv128_down = extractResidualLayerParams('conv128_down');\n const conv128_1 = extractResidualLayerParams('conv128_1');\n const conv128_2 = extractResidualLayerParams('conv128_2');\n\n const conv256_down = extractResidualLayerParams('conv256_down');\n const conv256_1 = extractResidualLayerParams('conv256_1');\n const conv256_2 = extractResidualLayerParams('conv256_2');\n const conv256_down_out = extractResidualLayerParams('conv256_down_out');\n\n const { fc } = weightMap;\n paramMappings.push({ originalPath: 'fc', paramPath: 'fc' });\n\n if (!isTensor2D(fc)) {\n throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${fc}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { conv, convDown, convNoRelu } from './convLayer';\nimport { ResidualLayerParams } from './types';\n\nexport function residual(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = conv(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n out = tf.add(out, x);\n out = tf.relu(out);\n return out;\n}\n\nexport function residualDown(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = convDown(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n\n let pooled = tf.avgPool(x, 2, 2, 'valid') as tf.Tensor4D;\n const zeros = tf.zeros(pooled.shape);\n const isPad = pooled.shape[3] !== out.shape[3];\n const isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2];\n\n if (isAdjustShape) {\n const padShapeX = [...out.shape] as [number, number, number, number];\n padShapeX[1] = 1;\n const zerosW = tf.zeros(padShapeX);\n out = tf.concat([out, zerosW], 1);\n\n const padShapeY = [...out.shape] as [number, number, number, number];\n padShapeY[2] = 1;\n const zerosH = tf.zeros(padShapeY);\n out = tf.concat([out, zerosH], 2);\n }\n\n pooled = isPad ? tf.concat([pooled, zeros], 3) : pooled;\n out = tf.add(pooled, out) as tf.Tensor4D;\n\n out = tf.relu(out);\n return out;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { convDown } from './convLayer';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { residual, residualDown } from './residualLayer';\nimport { NetParams } from './types';\n\nexport class FaceRecognitionNet extends NeuralNetwork {\n constructor() {\n super('FaceRecognitionNet');\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceRecognitionNet - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(150, true).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(150, true), 'float32');\n\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = convDown(normalized, params.conv32_down);\n out = tf.maxPool(out, 3, 2, 'valid');\n\n out = residual(out, params.conv32_1);\n out = residual(out, params.conv32_2);\n out = residual(out, params.conv32_3);\n\n out = residualDown(out, params.conv64_down);\n out = residual(out, params.conv64_1);\n out = residual(out, params.conv64_2);\n out = residual(out, params.conv64_3);\n\n out = residualDown(out, params.conv128_down);\n out = residual(out, params.conv128_1);\n out = residual(out, params.conv128_2);\n\n out = residualDown(out, params.conv256_down);\n out = residual(out, params.conv256_1);\n out = residual(out, params.conv256_2);\n out = residualDown(out, params.conv256_down_out);\n\n const globalAvg = out.mean([1, 2]) as tf.Tensor2D;\n const fullyConnected = tf.matMul(globalAvg, params.fc);\n\n return fullyConnected;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async computeFaceDescriptor(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n\n const faceDescriptorTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const faceDescriptorsForBatch = await Promise.all(faceDescriptorTensors.map(\n (t) => t.data(),\n )) as Float32Array[];\n\n faceDescriptorTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput\n ? faceDescriptorsForBatch\n : faceDescriptorsForBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_recognition_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import { FaceRecognitionNet } from './FaceRecognitionNet';\n\nexport * from './FaceRecognitionNet';\n\nexport function createFaceRecognitionNet(weights: Float32Array) {\n const net = new FaceRecognitionNet();\n net.extractWeights(weights);\n return net;\n}\n", "export type WithFaceDescriptor = TSource & {\n descriptor: Float32Array\n}\n\nexport function extendWithFaceDescriptor<\n TSource\n>(\n sourceObj: TSource,\n descriptor: Float32Array,\n): WithFaceDescriptor {\n const extension = { descriptor };\n return { ...sourceObj, ...extension };\n}\n", "export type WithAge = TSource & {\n age: number\n}\n\nexport function isWithAge(obj: any): obj is WithAge<{}> {\n return typeof obj.age === 'number';\n}\n\nexport function extendWithAge<\n TSource\n>(\n sourceObj: TSource,\n age: number,\n): WithAge {\n const extension = { age };\n return { ...sourceObj, ...extension };\n}\n", "import { Gender } from '../ageGenderNet/types';\nimport { isValidProbablitiy } from '../utils/index';\n\nexport type WithGender = TSource & {\n gender: Gender\n genderProbability: number\n}\n\nexport function isWithGender(obj: any): obj is WithGender<{}> {\n return (obj.gender === Gender.MALE || obj.gender === Gender.FEMALE)\n && isValidProbablitiy(obj.genderProbability);\n}\n\nexport function extendWithGender<\n TSource\n>(\n sourceObj: TSource,\n gender: Gender,\n genderProbability: number,\n): WithGender {\n const extension = { gender, genderProbability };\n return { ...sourceObj, ...extension };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n ExtractWeightsFunction, ParamMapping, ConvParams, extractWeightsFactory,\n} from '../common/index';\nimport {\n MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractDepthwiseConvParams(numChannels: number, mappedPrefix: string): MobileNetV1.DepthwiseConvParams {\n const filters = tf.tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]);\n const batch_norm_scale = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_offset = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_mean = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_variance = tf.tensor1d(extractWeights(numChannels));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/batch_norm_scale` },\n { paramPath: `${mappedPrefix}/batch_norm_offset` },\n { paramPath: `${mappedPrefix}/batch_norm_mean` },\n { paramPath: `${mappedPrefix}/batch_norm_variance` },\n );\n\n return {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n };\n }\n\n function extractConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n isPointwiseConv?: boolean,\n ): ConvParams {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/${isPointwiseConv ? 'batch_norm_offset' : 'bias'}` },\n );\n\n return { filters, bias };\n }\n\n function extractPointwiseConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): PointwiseConvParams {\n const {\n filters,\n bias,\n } = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true);\n\n return {\n filters,\n batch_norm_offset: bias,\n };\n }\n\n function extractConvPairParams(\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): MobileNetV1.ConvPairParams {\n const depthwise_conv = extractDepthwiseConvParams(channelsIn, `${mappedPrefix}/depthwise_conv`);\n const pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/pointwise_conv`);\n\n return { depthwise_conv, pointwise_conv };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n const conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0');\n\n const conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1');\n const conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2');\n const conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3');\n const conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4');\n const conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5');\n const conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6');\n const conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7');\n const conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8');\n const conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9');\n const conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10');\n const conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11');\n const conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12');\n const conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13');\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n conv_8,\n conv_9,\n conv_10,\n conv_11,\n conv_12,\n conv_13,\n };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n const conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0');\n const conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1');\n const conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2');\n const conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3');\n const conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4');\n const conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5');\n const conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6');\n const conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7');\n\n const box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor');\n const class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor');\n const box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor');\n const class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor');\n const box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor');\n const class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor');\n const box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor');\n const class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor');\n const box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor');\n const class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor');\n const box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor');\n const class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor');\n\n const box_predictor_0 = {\n box_encoding_predictor: box_encoding_0_predictor,\n class_predictor: class_predictor_0,\n };\n const box_predictor_1 = {\n box_encoding_predictor: box_encoding_1_predictor,\n class_predictor: class_predictor_1,\n };\n const box_predictor_2 = {\n box_encoding_predictor: box_encoding_2_predictor,\n class_predictor: class_predictor_2,\n };\n const box_predictor_3 = {\n box_encoding_predictor: box_encoding_3_predictor,\n class_predictor: class_predictor_3,\n };\n const box_predictor_4 = {\n box_encoding_predictor: box_encoding_4_predictor,\n class_predictor: class_predictor_4,\n };\n const box_predictor_5 = {\n box_encoding_predictor: box_encoding_5_predictor,\n class_predictor: class_predictor_5,\n };\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n box_predictor_0,\n box_predictor_1,\n box_predictor_2,\n box_predictor_3,\n box_predictor_4,\n box_predictor_5,\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const mobilenetv1 = extractMobilenetV1Params();\n const prediction_layer = extractPredictionLayerParams();\n const extra_dim = tf.tensor3d(\n extractWeights(5118 * 4),\n [1, 5118, 4],\n );\n const output_layer = {\n extra_dim,\n };\n\n paramMappings.push({ paramPath: 'output_layer/extra_dim' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n params: {\n mobilenetv1,\n prediction_layer,\n output_layer,\n },\n paramMappings,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n ConvParams, disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping,\n} from '../common/index';\nimport { isTensor3D } from '../utils/index';\nimport {\n BoxPredictionParams, MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractPointwiseConvParams(prefix: string, idx: number, mappedPrefix: string): PointwiseConvParams {\n const filters = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/weights`, 4, `${mappedPrefix}/filters`);\n const batch_norm_offset = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/convolution_bn_offset`, 1, `${mappedPrefix}/batch_norm_offset`);\n\n return { filters, batch_norm_offset };\n }\n\n function extractConvPairParams(idx: number): MobileNetV1.ConvPairParams {\n const mappedPrefix = `mobilenetv1/conv_${idx}`;\n const prefixDepthwiseConv = `MobilenetV1/Conv2d_${idx}_depthwise`;\n const mappedPrefixDepthwiseConv = `${mappedPrefix}/depthwise_conv`;\n const mappedPrefixPointwiseConv = `${mappedPrefix}/pointwise_conv`;\n\n const filters = extractWeightEntry(`${prefixDepthwiseConv}/depthwise_weights`, 4, `${mappedPrefixDepthwiseConv}/filters`);\n const batch_norm_scale = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/gamma`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_scale`);\n const batch_norm_offset = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/beta`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_offset`);\n const batch_norm_mean = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_mean`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_mean`);\n const batch_norm_variance = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_variance`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_variance`);\n\n return {\n depthwise_conv: {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n },\n pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv),\n };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n return {\n conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'),\n conv_1: extractConvPairParams(1),\n conv_2: extractConvPairParams(2),\n conv_3: extractConvPairParams(3),\n conv_4: extractConvPairParams(4),\n conv_5: extractConvPairParams(5),\n conv_6: extractConvPairParams(6),\n conv_7: extractConvPairParams(7),\n conv_8: extractConvPairParams(8),\n conv_9: extractConvPairParams(9),\n conv_10: extractConvPairParams(10),\n conv_11: extractConvPairParams(11),\n conv_12: extractConvPairParams(12),\n conv_13: extractConvPairParams(13),\n };\n }\n\n function extractConvParams(prefix: string, mappedPrefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/weights`, 4, `${mappedPrefix}/filters`);\n const bias = extractWeightEntry(`${prefix}/biases`, 1, `${mappedPrefix}/bias`);\n\n return { filters, bias };\n }\n\n function extractBoxPredictorParams(idx: number): BoxPredictionParams {\n const box_encoding_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/BoxEncodingPredictor`,\n `prediction_layer/box_predictor_${idx}/box_encoding_predictor`,\n );\n const class_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/ClassPredictor`,\n `prediction_layer/box_predictor_${idx}/class_predictor`,\n );\n\n return { box_encoding_predictor, class_predictor };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n return {\n conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'),\n conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'),\n conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'),\n conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'),\n conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'),\n conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'),\n conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'),\n conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'),\n box_predictor_0: extractBoxPredictorParams(0),\n box_predictor_1: extractBoxPredictorParams(1),\n box_predictor_2: extractBoxPredictorParams(2),\n box_predictor_3: extractBoxPredictorParams(3),\n box_predictor_4: extractBoxPredictorParams(4),\n box_predictor_5: extractBoxPredictorParams(5),\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const extra_dim = weightMap['Output/extra_dim'];\n paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' });\n\n if (!isTensor3D(extra_dim)) {\n throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${extra_dim}`);\n }\n\n const params = {\n mobilenetv1: extractMobilenetV1Params(),\n prediction_layer: extractPredictionLayerParams(),\n output_layer: {\n extra_dim,\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { PointwiseConvParams } from './types';\n\nexport function pointwiseConvLayer(\n x: tf.Tensor4D,\n params: PointwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.conv2d(x, params.filters, strides, 'same');\n out = tf.add(out, params.batch_norm_offset);\n return tf.clipByValue(out, 0, 6);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { MobileNetV1 } from './types';\n\nconst epsilon = 0.0010000000474974513;\n\nfunction depthwiseConvLayer(\n x: tf.Tensor4D,\n params: MobileNetV1.DepthwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.depthwiseConv2d(x, params.filters, strides, 'same');\n out = tf.batchNorm(\n out,\n params.batch_norm_mean,\n params.batch_norm_variance,\n params.batch_norm_offset,\n params.batch_norm_scale,\n epsilon,\n );\n return tf.clipByValue(out, 0, 6);\n });\n}\n\nfunction getStridesForLayerIdx(layerIdx: number): [number, number] {\n return [2, 4, 6, 12].some((idx) => idx === layerIdx) ? [2, 2] : [1, 1];\n}\n\nexport function mobileNetV1(x: tf.Tensor4D, params: MobileNetV1.Params) {\n return tf.tidy(() => {\n let conv11;\n let out = pointwiseConvLayer(x, params.conv_0, [2, 2]);\n\n const convPairParams = [\n params.conv_1,\n params.conv_2,\n params.conv_3,\n params.conv_4,\n params.conv_5,\n params.conv_6,\n params.conv_7,\n params.conv_8,\n params.conv_9,\n params.conv_10,\n params.conv_11,\n params.conv_12,\n params.conv_13,\n ];\n\n convPairParams.forEach((param, i) => {\n const layerIdx = i + 1;\n const depthwiseConvStrides = getStridesForLayerIdx(layerIdx);\n out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides);\n out = pointwiseConvLayer(out, param.pointwise_conv, [1, 1]);\n if (layerIdx === 11) {\n conv11 = out;\n }\n });\n\n if (conv11 === null) {\n throw new Error('mobileNetV1 - output of conv layer 11 is null');\n }\n\n return {\n out,\n conv11: conv11 as any,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nfunction IOU(boxes: tf.Tensor2D, i: number, j: number) {\n const boxesData = boxes.arraySync();\n const yminI = Math.min(boxesData[i][0], boxesData[i][2]);\n const xminI = Math.min(boxesData[i][1], boxesData[i][3]);\n const ymaxI = Math.max(boxesData[i][0], boxesData[i][2]);\n const xmaxI = Math.max(boxesData[i][1], boxesData[i][3]);\n const yminJ = Math.min(boxesData[j][0], boxesData[j][2]);\n const xminJ = Math.min(boxesData[j][1], boxesData[j][3]);\n const ymaxJ = Math.max(boxesData[j][0], boxesData[j][2]);\n const xmaxJ = Math.max(boxesData[j][1], boxesData[j][3]);\n const areaI = (ymaxI - yminI) * (xmaxI - xminI);\n const areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ);\n if (areaI <= 0 || areaJ <= 0) {\n return 0.0;\n }\n const intersectionYmin = Math.max(yminI, yminJ);\n const intersectionXmin = Math.max(xminI, xminJ);\n const intersectionYmax = Math.min(ymaxI, ymaxJ);\n const intersectionXmax = Math.min(xmaxI, xmaxJ);\n const intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0)\n * Math.max(intersectionXmax - intersectionXmin, 0.0);\n return intersectionArea / (areaI + areaJ - intersectionArea);\n}\n\nexport function nonMaxSuppression(\n boxes: tf.Tensor2D,\n scores: number[],\n maxOutputSize: number,\n iouThreshold: number,\n scoreThreshold: number,\n): number[] {\n const numBoxes = boxes.shape[0];\n const outputSize = Math.min(\n maxOutputSize,\n numBoxes,\n );\n\n const candidates = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .filter((c) => c.score > scoreThreshold)\n .sort((c1, c2) => c2.score - c1.score);\n\n const suppressFunc = (x: number) => (x <= iouThreshold ? 1 : 0);\n\n const selected: number[] = [];\n\n candidates.forEach((c) => {\n if (selected.length >= outputSize) {\n return;\n }\n const originalScore = c.score;\n\n for (let j = selected.length - 1; j >= 0; --j) {\n const iou = IOU(boxes, c.boxIndex, selected[j]);\n if (iou === 0.0) continue;\n c.score *= suppressFunc(iou);\n if (c.score <= scoreThreshold) break;\n }\n if (originalScore === c.score) {\n selected.push(c.boxIndex);\n }\n });\n\n return selected;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { OutputLayerParams } from './types';\n\nfunction getCenterCoordinatesAndSizesLayer(x: tf.Tensor2D) {\n const vec = tf.unstack(tf.transpose(x, [1, 0]));\n\n const sizes = [\n tf.sub(vec[2], vec[0]),\n tf.sub(vec[3], vec[1]),\n ];\n\n const centers = [\n tf.add(vec[0], tf.div(sizes[0], tf.scalar(2))),\n tf.add(vec[1], tf.div(sizes[1], tf.scalar(2))),\n ];\n\n return {\n sizes,\n centers,\n };\n}\n\nfunction decodeBoxesLayer(x0: tf.Tensor2D, x1: tf.Tensor2D) {\n const {\n sizes,\n centers,\n } = getCenterCoordinatesAndSizesLayer(x0);\n\n const vec = tf.unstack(tf.transpose(x1, [1, 0]));\n\n const div0_out = tf.div(tf.mul(tf.exp(tf.div(vec[2], tf.scalar(5))), sizes[0]), tf.scalar(2));\n const add0_out = tf.add(tf.mul(tf.div(vec[0], tf.scalar(10)), sizes[0]), centers[0]);\n\n const div1_out = tf.div(tf.mul(tf.exp(tf.div(vec[3], tf.scalar(5))), sizes[1]), tf.scalar(2));\n const add1_out = tf.add(tf.mul(tf.div(vec[1], tf.scalar(10)), sizes[1]), centers[1]);\n\n return tf.transpose(\n tf.stack([\n tf.sub(add0_out, div0_out),\n tf.sub(add1_out, div1_out),\n tf.add(add0_out, div0_out),\n tf.add(add1_out, div1_out),\n ]),\n [1, 0],\n );\n}\n\nexport function outputLayer(\n boxPredictions: tf.Tensor4D,\n classPredictions: tf.Tensor4D,\n params: OutputLayerParams,\n) {\n return tf.tidy(() => {\n const batchSize = boxPredictions.shape[0];\n\n let boxes = decodeBoxesLayer(\n tf.reshape(tf.tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]) as tf.Tensor2D,\n tf.reshape(boxPredictions, [-1, 4]) as tf.Tensor2D,\n );\n boxes = tf.reshape(\n boxes,\n [batchSize, (boxes.shape[0] / batchSize), 4],\n );\n\n const scoresAndClasses = tf.sigmoid(tf.slice(classPredictions, [0, 0, 1], [-1, -1, -1]));\n let scores = tf.slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]) as tf.Tensor;\n\n scores = tf.reshape(\n scores,\n [batchSize, scores.shape[1] as number],\n );\n\n const boxesByBatch = tf.unstack(boxes) as tf.Tensor2D[];\n const scoresByBatch = tf.unstack(scores) as tf.Tensor1D[];\n\n return {\n boxes: boxesByBatch,\n scores: scoresByBatch,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { convLayer } from '../common/index';\nimport { BoxPredictionParams } from './types';\n\nexport function boxPredictionLayer(\n x: tf.Tensor4D,\n params: BoxPredictionParams,\n) {\n return tf.tidy(() => {\n const batchSize = x.shape[0];\n\n const boxPredictionEncoding = tf.reshape(\n convLayer(x, params.box_encoding_predictor),\n [batchSize, -1, 1, 4],\n );\n const classPrediction = tf.reshape(\n convLayer(x, params.class_predictor),\n [batchSize, -1, 3],\n );\n\n return {\n boxPredictionEncoding,\n classPrediction,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { boxPredictionLayer } from './boxPredictionLayer';\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { PredictionLayerParams } from './types';\n\nexport function predictionLayer(\n x: tf.Tensor4D,\n conv11: tf.Tensor4D,\n params: PredictionLayerParams,\n) {\n return tf.tidy(() => {\n const conv0 = pointwiseConvLayer(x, params.conv_0, [1, 1]);\n const conv1 = pointwiseConvLayer(conv0, params.conv_1, [2, 2]);\n const conv2 = pointwiseConvLayer(conv1, params.conv_2, [1, 1]);\n const conv3 = pointwiseConvLayer(conv2, params.conv_3, [2, 2]);\n const conv4 = pointwiseConvLayer(conv3, params.conv_4, [1, 1]);\n const conv5 = pointwiseConvLayer(conv4, params.conv_5, [2, 2]);\n const conv6 = pointwiseConvLayer(conv5, params.conv_6, [1, 1]);\n const conv7 = pointwiseConvLayer(conv6, params.conv_7, [2, 2]);\n\n const boxPrediction0 = boxPredictionLayer(conv11, params.box_predictor_0);\n const boxPrediction1 = boxPredictionLayer(x, params.box_predictor_1);\n const boxPrediction2 = boxPredictionLayer(conv1, params.box_predictor_2);\n const boxPrediction3 = boxPredictionLayer(conv3, params.box_predictor_3);\n const boxPrediction4 = boxPredictionLayer(conv5, params.box_predictor_4);\n const boxPrediction5 = boxPredictionLayer(conv7, params.box_predictor_5);\n\n const boxPredictions = tf.concat([\n boxPrediction0.boxPredictionEncoding,\n boxPrediction1.boxPredictionEncoding,\n boxPrediction2.boxPredictionEncoding,\n boxPrediction3.boxPredictionEncoding,\n boxPrediction4.boxPredictionEncoding,\n boxPrediction5.boxPredictionEncoding,\n ], 1) as tf.Tensor4D;\n\n const classPredictions = tf.concat([\n boxPrediction0.classPrediction,\n boxPrediction1.classPrediction,\n boxPrediction2.classPrediction,\n boxPrediction3.classPrediction,\n boxPrediction4.classPrediction,\n boxPrediction5.classPrediction,\n ], 1) as tf.Tensor4D;\n\n return {\n boxPredictions,\n classPredictions,\n };\n });\n}\n", "export interface ISsdMobilenetv1Options {\n minConfidence?: number\n maxResults?: number\n}\n\nexport class SsdMobilenetv1Options {\n protected _name: string = 'SsdMobilenetv1Options'\n\n private _minConfidence: number\n\n private _maxResults: number\n\n constructor({ minConfidence, maxResults }: ISsdMobilenetv1Options = {}) {\n this._minConfidence = minConfidence || 0.5;\n this._maxResults = maxResults || 100;\n\n if (typeof this._minConfidence !== 'number' || this._minConfidence <= 0 || this._minConfidence >= 1) {\n throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);\n }\n\n if (typeof this._maxResults !== 'number') {\n throw new Error(`${this._name} - expected maxResults to be a number`);\n }\n }\n\n get minConfidence(): number { return this._minConfidence; }\n\n get maxResults(): number { return this._maxResults; }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { mobileNetV1 } from './mobileNetV1';\nimport { nonMaxSuppression } from './nonMaxSuppression';\nimport { outputLayer } from './outputLayer';\nimport { predictionLayer } from './predictionLayer';\nimport { ISsdMobilenetv1Options, SsdMobilenetv1Options } from './SsdMobilenetv1Options';\nimport { NetParams } from './types';\n\nexport class SsdMobilenetv1 extends NeuralNetwork {\n constructor() {\n super('SsdMobilenetv1');\n }\n\n public forwardInput(input: NetInput) {\n const { params } = this;\n\n if (!params) {\n throw new Error('SsdMobilenetv1 - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(512, false).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(512, false), 'float32');\n\n const x = tf.sub(tf.mul(batchTensor, tf.scalar(0.007843137718737125)), tf.scalar(1)) as tf.Tensor4D;\n const features = mobileNetV1(x, params.mobilenetv1);\n\n const {\n boxPredictions,\n classPredictions,\n } = predictionLayer(features.out, features.conv11, params.prediction_layer);\n\n return outputLayer(boxPredictions, classPredictions, params.output_layer);\n });\n }\n\n public async forward(input: TNetInput) {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async locateFaces(\n input: TNetInput,\n options: ISsdMobilenetv1Options = {},\n ): Promise {\n const { maxResults, minConfidence } = new SsdMobilenetv1Options(options);\n\n const netInput = await toNetInput(input);\n\n const {\n boxes: _boxes,\n scores: _scores,\n } = this.forwardInput(netInput);\n\n // TODO batches\n const boxes = _boxes[0];\n const scores = _scores[0];\n for (let i = 1; i < _boxes.length; i++) {\n _boxes[i].dispose();\n _scores[i].dispose();\n }\n\n // TODO find a better way to filter by minConfidence\n const scoresData = Array.from(await scores.data());\n\n const iouThreshold = 0.5;\n const indices = nonMaxSuppression(\n boxes,\n scoresData as number[],\n maxResults,\n iouThreshold,\n minConfidence,\n );\n\n const reshapedDims = netInput.getReshapedInputDimensions(0);\n const inputSize = netInput.inputSize as number;\n const padX = inputSize / reshapedDims.width;\n const padY = inputSize / reshapedDims.height;\n\n const boxesData = boxes.arraySync();\n const results = indices\n .map((idx) => {\n const [top, bottom] = [\n Math.max(0, boxesData[idx][0]),\n Math.min(1.0, boxesData[idx][2]),\n ].map((val) => val * padY);\n const [left, right] = [\n Math.max(0, boxesData[idx][1]),\n Math.min(1.0, boxesData[idx][3]),\n ].map((val) => val * padX);\n return new FaceDetection(\n scoresData[idx] as number,\n new Rect(\n left,\n top,\n right - left,\n bottom - top,\n ),\n {\n height: netInput.getInputHeight(0),\n width: netInput.getInputWidth(0),\n },\n );\n });\n\n boxes.dispose();\n scores.dispose();\n\n return results;\n }\n\n protected getDefaultModelName(): string {\n return 'ssd_mobilenetv1_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import { SsdMobilenetv1 } from './SsdMobilenetv1';\n\nexport * from './SsdMobilenetv1';\nexport * from './SsdMobilenetv1Options';\n\nexport function createSsdMobilenetv1(weights: Float32Array) {\n const net = new SsdMobilenetv1();\n net.extractWeights(weights);\n return net;\n}\n\nexport function createFaceDetectionNet(weights: Float32Array) {\n return createSsdMobilenetv1(weights);\n}\n\n// alias for backward compatibily\nexport class FaceDetectionNet extends SsdMobilenetv1 {}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(0.738768, 0.874946),\n new Point(2.42204, 2.65704),\n new Point(4.30971, 7.04493),\n new Point(10.246, 4.59428),\n new Point(12.6868, 11.8741),\n];\n\nexport const BOX_ANCHORS_SEPARABLE = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB_SEPARABLE: [number, number, number] = [117.001, 114.697, 97.404];\n\nexport const DEFAULT_MODEL_NAME = 'tiny_yolov2_model';\nexport const DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model';\n", "import { Point } from '../classes/Point';\n\nexport type TinyYolov2Config = {\n withSeparableConvs: boolean\n iouThreshold: number\n anchors: Point[]\n classes: string[]\n meanRgb?: [number, number, number]\n withClassScores?: boolean,\n filterSizes?: number[]\n isFirstLayerConv2d?: boolean\n}\n\nconst isNumber = (arg: any) => typeof arg === 'number';\n\nexport function validateConfig(config: any) {\n if (!config) {\n throw new Error(`invalid config: ${config}`);\n }\n\n if (typeof config.withSeparableConvs !== 'boolean') {\n throw new Error(`config.withSeparableConvs has to be a boolean, have: ${config.withSeparableConvs}`);\n }\n\n if (!isNumber(config.iouThreshold) || config.iouThreshold < 0 || config.iouThreshold > 1.0) {\n throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${config.iouThreshold}`);\n }\n\n if (\n !Array.isArray(config.classes)\n || !config.classes.length\n || !config.classes.every((c: any) => typeof c === 'string')\n ) {\n throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(config.classes)}`);\n }\n\n if (\n !Array.isArray(config.anchors)\n || !config.anchors.length\n || !config.anchors.map((a: any) => a || {}).every((a: any) => isNumber(a.x) && isNumber(a.y))\n ) {\n throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(config.anchors)}`);\n }\n\n if (config.meanRgb && (\n !Array.isArray(config.meanRgb)\n || config.meanRgb.length !== 3\n || !config.meanRgb.every(isNumber)\n )) {\n throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(config.meanRgb)}`);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nexport function leaky(x: tf.Tensor4D): tf.Tensor4D {\n return tf.tidy(() => {\n const min = tf.mul(x, tf.scalar(0.10000000149011612));\n return tf.add(tf.relu(tf.sub(x, min)), min);\n // return tf.maximum(x, min)\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { leaky } from './leaky';\nimport { ConvWithBatchNorm } from './types';\n\nexport function convWithBatchNorm(x: tf.Tensor4D, params: ConvWithBatchNorm): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.conv2d(out, params.conv.filters, [1, 1], 'valid');\n out = tf.sub(out, params.bn.sub);\n out = tf.mul(out, params.bn.truediv);\n out = tf.add(out, params.conv.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { SeparableConvParams } from '../common/types';\nimport { leaky } from './leaky';\n\nexport function depthwiseSeparableConv(x: tf.Tensor4D, params: SeparableConvParams): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.separableConv2d(out, params.depthwise_filter, params.pointwise_filter, [1, 1], 'valid');\n out = tf.add(out, params.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { extractConvParamsFactory } from '../common/index';\nimport { extractSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightsFactory } from '../common/extractWeightsFactory';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n\n function extractBatchNormParams(size: number, mappedPrefix: string): BatchNorm {\n const sub = tf.tensor1d(extractWeights(size));\n const truediv = tf.tensor1d(extractWeights(size));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/sub` },\n { paramPath: `${mappedPrefix}/truediv` },\n );\n\n return { sub, truediv };\n }\n\n function extractConvWithBatchNormParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv`);\n const bn = extractBatchNormParams(channelsOut, `${mappedPrefix}/bn`);\n\n return { conv, bn };\n }\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParams(\n weights: Float32Array,\n config: TinyYolov2Config,\n boxEncodingSize: number,\n filterSizes: number[],\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n\n const conv0 = config.isFirstLayerConv2d\n ? extractConvParams(s0, s1, 3, 'conv0')\n : extractSeparableConvParams(s0, s1, 'conv0');\n const conv1 = extractSeparableConvParams(s1, s2, 'conv1');\n const conv2 = extractSeparableConvParams(s2, s3, 'conv2');\n const conv3 = extractSeparableConvParams(s3, s4, 'conv3');\n const conv4 = extractSeparableConvParams(s4, s5, 'conv4');\n const conv5 = extractSeparableConvParams(s5, s6, 'conv5');\n const conv6 = s7 ? extractSeparableConvParams(s6, s7, 'conv6') : undefined;\n const conv7 = s8 ? extractSeparableConvParams(s7, s8, 'conv7') : undefined;\n const conv8 = extractConvParams(s8 || s7 || s6, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n } else {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n const conv0 = extractConvWithBatchNormParams(s0, s1, 'conv0');\n const conv1 = extractConvWithBatchNormParams(s1, s2, 'conv1');\n const conv2 = extractConvWithBatchNormParams(s2, s3, 'conv2');\n const conv3 = extractConvWithBatchNormParams(s3, s4, 'conv3');\n const conv4 = extractConvWithBatchNormParams(s4, s5, 'conv4');\n const conv5 = extractConvWithBatchNormParams(s5, s6, 'conv5');\n const conv6 = extractConvWithBatchNormParams(s6, s7, 'conv6');\n const conv7 = extractConvWithBatchNormParams(s7, s8, 'conv7');\n const conv8 = extractConvParams(s8, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n }\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams } from '../common/index';\nimport { disposeUnusedWeightTensors } from '../common/disposeUnusedWeightTensors';\nimport { loadSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightEntryFactory } from '../common/extractWeightEntryFactory';\nimport { ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractBatchNormParams(prefix: string): BatchNorm {\n const sub = extractWeightEntry(`${prefix}/sub`, 1);\n const truediv = extractWeightEntry(`${prefix}/truediv`, 1);\n return { sub, truediv };\n }\n\n function extractConvParams(prefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { filters, bias };\n }\n\n function extractConvWithBatchNormParams(prefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(`${prefix}/conv`);\n const bn = extractBatchNormParams(`${prefix}/bn`);\n return { conv, bn };\n }\n\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n config: TinyYolov2Config,\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n // eslint-disable-next-line no-mixed-operators\n const numFilters = (config.filterSizes && config.filterSizes.length || 9);\n params = {\n conv0: config.isFirstLayerConv2d ? extractConvParams('conv0') : extractSeparableConvParams('conv0'),\n conv1: extractSeparableConvParams('conv1'),\n conv2: extractSeparableConvParams('conv2'),\n conv3: extractSeparableConvParams('conv3'),\n conv4: extractSeparableConvParams('conv4'),\n conv5: extractSeparableConvParams('conv5'),\n conv6: numFilters > 7 ? extractSeparableConvParams('conv6') : undefined,\n conv7: numFilters > 8 ? extractSeparableConvParams('conv7') : undefined,\n conv8: extractConvParams('conv8'),\n };\n } else {\n params = {\n conv0: extractConvWithBatchNormParams('conv0'),\n conv1: extractConvWithBatchNormParams('conv1'),\n conv2: extractConvWithBatchNormParams('conv2'),\n conv3: extractConvWithBatchNormParams('conv3'),\n conv4: extractConvWithBatchNormParams('conv4'),\n conv5: extractConvWithBatchNormParams('conv5'),\n conv6: extractConvWithBatchNormParams('conv6'),\n conv7: extractConvWithBatchNormParams('conv7'),\n conv8: extractConvParams('conv8'),\n };\n }\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "export interface ITinyYolov2Options {\n inputSize?: number\n scoreThreshold?: number\n}\n\nexport class TinyYolov2Options {\n protected _name: string = 'TinyYolov2Options'\n\n private _inputSize: number\n\n private _scoreThreshold: number\n\n constructor({ inputSize, scoreThreshold }: ITinyYolov2Options = {}) {\n this._inputSize = inputSize || 416;\n this._scoreThreshold = scoreThreshold || 0.5;\n\n if (typeof this._inputSize !== 'number' || this._inputSize % 32 !== 0) {\n throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);\n }\n\n if (typeof this._scoreThreshold !== 'number' || this._scoreThreshold <= 0 || this._scoreThreshold >= 1) {\n throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`);\n }\n }\n\n get inputSize(): number { return this._inputSize; }\n\n get scoreThreshold(): number { return this._scoreThreshold; }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { BoundingBox } from '../classes/BoundingBox';\nimport { Dimensions } from '../classes/Dimensions';\nimport { ObjectDetection } from '../classes/ObjectDetection';\nimport { convLayer } from '../common/index';\nimport { ConvParams, SeparableConvParams } from '../common/types';\nimport { toNetInput } from '../dom/index';\nimport { NetInput } from '../dom/NetInput';\nimport { TNetInput } from '../dom/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { sigmoid } from '../ops/index';\nimport { nonMaxSuppression } from '../ops/nonMaxSuppression';\nimport { normalize } from '../ops/normalize';\nimport { TinyYolov2Config, validateConfig } from './config';\nimport { convWithBatchNorm } from './convWithBatchNorm';\nimport { depthwiseSeparableConv } from './depthwiseSeparableConv';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { leaky } from './leaky';\nimport { ITinyYolov2Options, TinyYolov2Options } from './TinyYolov2Options';\nimport { DefaultTinyYolov2NetParams, MobilenetParams, TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2Base extends NeuralNetwork {\n public static DEFAULT_FILTER_SIZES = [\n 3, 16, 32, 64, 128, 256, 512, 1024, 1024,\n ]\n\n private _config: TinyYolov2Config\n\n constructor(config: TinyYolov2Config) {\n super('TinyYolov2');\n validateConfig(config);\n this._config = config;\n }\n\n public get config(): TinyYolov2Config {\n return this._config;\n }\n\n public get withClassScores(): boolean {\n return this.config.withClassScores || this.config.classes.length > 1;\n }\n\n public get boxEncodingSize(): number {\n return 5 + (this.withClassScores ? this.config.classes.length : 0);\n }\n\n public runTinyYolov2(x: tf.Tensor4D, params: DefaultTinyYolov2NetParams): tf.Tensor4D {\n let out = convWithBatchNorm(x, params.conv0);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = convWithBatchNorm(out, params.conv6);\n out = convWithBatchNorm(out, params.conv7);\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public runMobilenet(x: tf.Tensor4D, params: MobilenetParams): tf.Tensor4D {\n let out = this.config.isFirstLayerConv2d\n ? leaky(convLayer(x, params.conv0 as ConvParams, 'valid', false))\n : depthwiseSeparableConv(x, params.conv0 as SeparableConvParams);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = params.conv6 ? depthwiseSeparableConv(out, params.conv6) : out;\n out = params.conv7 ? depthwiseSeparableConv(out, params.conv7) : out;\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public forwardInput(input: NetInput, inputSize: number): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyYolov2 - load model before inference');\n }\n\n return tf.tidy(() => {\n // let batchTensor = input.toBatchTensor(inputSize, false).toFloat()\n let batchTensor = tf.cast(input.toBatchTensor(inputSize, false), 'float32');\n batchTensor = this.config.meanRgb\n ? normalize(batchTensor, this.config.meanRgb)\n : batchTensor;\n batchTensor = batchTensor.div(tf.scalar(256)) as tf.Tensor4D;\n\n return this.config.withSeparableConvs\n ? this.runMobilenet(batchTensor, params as MobilenetParams)\n : this.runTinyYolov2(batchTensor, params as DefaultTinyYolov2NetParams);\n });\n }\n\n public async forward(input: TNetInput, inputSize: number): Promise {\n return this.forwardInput(await toNetInput(input), inputSize);\n }\n\n public async detect(input: TNetInput, forwardParams: ITinyYolov2Options = {}): Promise {\n const { inputSize, scoreThreshold } = new TinyYolov2Options(forwardParams);\n\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput, inputSize);\n const out0 = tf.tidy(() => tf.unstack(out)[0].expandDims()) as tf.Tensor4D;\n\n const inputDimensions = {\n width: netInput.getInputWidth(0),\n height: netInput.getInputHeight(0),\n };\n\n const results = await this.extractBoxes(out0, netInput.getReshapedInputDimensions(0), scoreThreshold);\n out.dispose();\n out0.dispose();\n\n const boxes = results.map((res) => res.box);\n const scores = results.map((res) => res.score);\n const classScores = results.map((res) => res.classScore);\n const classNames = results.map((res) => this.config.classes[res.label]);\n\n const indices = nonMaxSuppression(\n boxes.map((box) => box.rescale(inputSize)),\n scores,\n this.config.iouThreshold,\n true,\n );\n\n const detections = indices.map((idx) => new ObjectDetection(\n scores[idx],\n classScores[idx],\n classNames[idx],\n boxes[idx],\n inputDimensions,\n ));\n\n return detections;\n }\n\n protected getDefaultModelName(): string {\n return '';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this.config);\n }\n\n protected extractParams(weights: Float32Array) {\n const filterSizes = this.config.filterSizes || TinyYolov2Base.DEFAULT_FILTER_SIZES;\n\n const numFilters = filterSizes ? filterSizes.length : undefined;\n if (numFilters !== 7 && numFilters !== 8 && numFilters !== 9) {\n throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${numFilters} filterSizes in config`);\n }\n return extractParams(weights, this.config, this.boxEncodingSize, filterSizes);\n }\n\n protected async extractBoxes(\n outputTensor: tf.Tensor4D,\n inputBlobDimensions: Dimensions,\n scoreThreshold?: number,\n ) {\n const { width, height } = inputBlobDimensions;\n const inputSize = Math.max(width, height);\n const correctionFactorX = inputSize / width;\n const correctionFactorY = inputSize / height;\n\n const numCells = outputTensor.shape[1];\n const numBoxes = this.config.anchors.length;\n\n const [boxesTensor, scoresTensor, classScoresTensor] = tf.tidy(() => {\n const reshaped = outputTensor.reshape([numCells, numCells, numBoxes, this.boxEncodingSize]);\n\n const boxes = reshaped.slice([0, 0, 0, 0], [numCells, numCells, numBoxes, 4]);\n const scores = reshaped.slice([0, 0, 0, 4], [numCells, numCells, numBoxes, 1]);\n const classScores = this.withClassScores\n ? tf.softmax(reshaped.slice([0, 0, 0, 5], [numCells, numCells, numBoxes, this.config.classes.length]), 3)\n : tf.scalar(0);\n return [boxes, scores, classScores];\n });\n\n const results = [] as any;\n\n const scoresData = await scoresTensor.array();\n const boxesData = await boxesTensor.array();\n for (let row = 0; row < numCells; row++) {\n for (let col = 0; col < numCells; col++) {\n for (let anchor = 0; anchor < numBoxes; anchor++) {\n const score = sigmoid(scoresData[row][col][anchor][0]);\n if (!scoreThreshold || score > scoreThreshold) {\n const ctX = ((col + sigmoid(boxesData[row][col][anchor][0])) / numCells) * correctionFactorX;\n const ctY = ((row + sigmoid(boxesData[row][col][anchor][1])) / numCells) * correctionFactorY;\n const widthLocal = ((Math.exp(boxesData[row][col][anchor][2]) * this.config.anchors[anchor].x) / numCells) * correctionFactorX;\n const heightLocal = ((Math.exp(boxesData[row][col][anchor][3]) * this.config.anchors[anchor].y) / numCells) * correctionFactorY;\n\n const x = (ctX - (widthLocal / 2));\n const y = (ctY - (heightLocal / 2));\n\n const pos = { row, col, anchor };\n const { classScore, label } = this.withClassScores\n ? await this.extractPredictedClass(classScoresTensor as tf.Tensor4D, pos)\n : { classScore: 1, label: 0 };\n\n results.push({\n box: new BoundingBox(x, y, x + widthLocal, y + heightLocal),\n score,\n classScore: score * classScore,\n label,\n ...pos,\n });\n }\n }\n }\n }\n\n boxesTensor.dispose();\n scoresTensor.dispose();\n classScoresTensor.dispose();\n\n return results;\n }\n\n private async extractPredictedClass(classesTensor: tf.Tensor4D, pos: { row: number, col: number, anchor: number }) {\n const { row, col, anchor } = pos;\n const classesData = await classesTensor.array();\n return Array(this.config.classes.length).fill(0)\n .map((_, i) => classesData[row][col][anchor][i])\n .map((classScore, label) => ({\n classScore,\n label,\n }))\n .reduce((max, curr) => (max.classScore > curr.classScore ? max : curr));\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/types';\nimport { TNetInput } from '../dom/types';\nimport {\n BOX_ANCHORS,\n BOX_ANCHORS_SEPARABLE,\n DEFAULT_MODEL_NAME,\n DEFAULT_MODEL_NAME_SEPARABLE_CONV,\n IOU_THRESHOLD,\n MEAN_RGB_SEPARABLE,\n} from './const';\nimport { TinyYolov2Base } from './TinyYolov2Base';\nimport { ITinyYolov2Options } from './TinyYolov2Options';\nimport { TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2 extends TinyYolov2Base {\n constructor(withSeparableConvs: boolean = true) {\n const config = {\n withSeparableConvs,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n ...(withSeparableConvs\n ? {\n anchors: BOX_ANCHORS_SEPARABLE,\n meanRgb: MEAN_RGB_SEPARABLE,\n }\n : {\n anchors: BOX_ANCHORS,\n withClassScores: true,\n }),\n };\n\n super(config);\n }\n\n public get withSeparableConvs(): boolean {\n return this.config.withSeparableConvs;\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME;\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { TinyYolov2 } from './TinyYolov2';\n\nexport * from './TinyYolov2Options';\n\nexport * from './config';\nexport * from './types';\n\nexport { TinyYolov2 };\n\nexport function createTinyYolov2(weights: Float32Array, withSeparableConvs: boolean = true) {\n const net = new TinyYolov2(withSeparableConvs);\n net.extractWeights(weights);\n return net;\n}\n", "import { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\n\nexport interface ITinyFaceDetectorOptions extends ITinyYolov2Options {}\n\nexport class TinyFaceDetectorOptions extends TinyYolov2Options {\n protected _name: string = 'TinyFaceDetectorOptions'\n}\n", "export class ComposableTask {\n public async then(\n // eslint-disable-next-line no-unused-vars\n onfulfilled: (value: T) => T | PromiseLike,\n ): Promise {\n return onfulfilled(await this.run());\n }\n\n public async run(): Promise {\n throw new Error('ComposableTask - run is not implemented');\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\n\nexport async function extractAllFacesAndComputeResults, TResult>(\n parentResults: TSource[],\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResults: (faces: Array) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment: (parentResult: WithFaceLandmarks) => FaceDetection = ({ alignedRect }) => alignedRect,\n) {\n const faceBoxes = parentResults.map((parentResult) => (isWithFaceLandmarks(parentResult)\n ? getRectForAlignment(parentResult)\n : parentResult.detection));\n const faces: Array = extractedFaces || (\n input instanceof tf.Tensor\n ? await extractFaceTensors(input, faceBoxes)\n : await extractFaces(input, faceBoxes)\n );\n\n const results = await computeResults(faces);\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return results;\n}\n\nexport async function extractSingleFaceAndComputeResult, TResult>(\n parentResult: TSource,\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResult: (face: HTMLCanvasElement | tf.Tensor3D) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment?: (parentResultLocal: WithFaceLandmarks) => FaceDetection,\n) {\n return extractAllFacesAndComputeResults(\n [parentResult],\n input,\n async (faces) => computeResult(faces[0]),\n extractedFaces,\n getRectForAlignment,\n );\n}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB: [number, number, number] = [117.001, 114.697, 97.404];\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/index';\nimport { TNetInput } from '../dom/index';\nimport { ITinyYolov2Options } from '../tinyYolov2/index';\nimport { TinyYolov2Base } from '../tinyYolov2/TinyYolov2Base';\nimport { TinyYolov2NetParams } from '../tinyYolov2/types';\nimport { BOX_ANCHORS, IOU_THRESHOLD, MEAN_RGB } from './const';\n\nexport class TinyFaceDetector extends TinyYolov2Base {\n constructor() {\n const config = {\n withSeparableConvs: true,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n anchors: BOX_ANCHORS,\n meanRgb: MEAN_RGB,\n isFirstLayerConv2d: true,\n filterSizes: [3, 16, 32, 64, 128, 256, 512],\n };\n\n super(config);\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_face_detector_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { AgeGenderNet } from '../ageGenderNet/AgeGenderNet';\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet';\nimport { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { ITinyYolov2Options, TinyYolov2 } from '../tinyYolov2/index';\n\nexport const nets = {\n ssdMobilenetv1: new SsdMobilenetv1(),\n tinyFaceDetector: new TinyFaceDetector(),\n tinyYolov2: new TinyYolov2(),\n faceLandmark68Net: new FaceLandmark68Net(),\n faceLandmark68TinyNet: new FaceLandmark68TinyNet(),\n faceRecognitionNet: new FaceRecognitionNet(),\n faceExpressionNet: new FaceExpressionNet(),\n ageGenderNet: new AgeGenderNet(),\n};\n\n/**\n * Attempts to detect all faces in an image using SSD Mobilenetv1 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const ssdMobilenetv1 = (input: TNetInput, options: SsdMobilenetv1Options): Promise => nets.ssdMobilenetv1.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Face Detector.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyFaceDetector = (input: TNetInput, options: TinyFaceDetectorOptions): Promise => nets.tinyFaceDetector.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Yolov2 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyYolov2Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyYolov2 = (input: TNetInput, options: ITinyYolov2Options): Promise => nets.tinyYolov2.locateFaces(input, options);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarks = (input: TNetInput): Promise => nets.faceLandmark68Net.detectLandmarks(input);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image\n * using a tinier version of the 68 point face landmark model, which is slightly\n * faster at inference, but also slightly less accurate.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarksTiny = (input: TNetInput): Promise => nets.faceLandmark68TinyNet.detectLandmarks(input);\n\n/**\n * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image,\n * which uniquely represents the features of that persons face. The computed face descriptor can\n * be used to measure the similarity between faces, by computing the euclidean distance of two\n * face descriptors.\n *\n * @param inputs The face image extracted from the aligned bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Face descriptor with 128 entries or array thereof in case of batch input.\n */\nexport const computeFaceDescriptor = (input: TNetInput): Promise => nets.faceRecognitionNet.computeFaceDescriptor(input);\n\n/**\n * Recognizes the facial expressions from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Facial expressions with corresponding probabilities or array thereof in case of batch input.\n */\nexport const recognizeFaceExpressions = (input: TNetInput): Promise => nets.faceExpressionNet.predictExpressions(input);\n\n/**\n * Predicts age and gender from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Predictions with age, gender and gender probability or array thereof in case of batch input.\n */\nexport const predictAgeAndGender = (input: TNetInput): Promise => nets.ageGenderNet.predictAgeAndGender(input);\n\nexport const loadSsdMobilenetv1Model = (url: string) => nets.ssdMobilenetv1.load(url);\nexport const loadTinyFaceDetectorModel = (url: string) => nets.tinyFaceDetector.load(url);\nexport const loadTinyYolov2Model = (url: string) => nets.tinyYolov2.load(url);\nexport const loadFaceLandmarkModel = (url: string) => nets.faceLandmark68Net.load(url);\nexport const loadFaceLandmarkTinyModel = (url: string) => nets.faceLandmark68TinyNet.load(url);\nexport const loadFaceRecognitionModel = (url: string) => nets.faceRecognitionNet.load(url);\nexport const loadFaceExpressionModel = (url: string) => nets.faceExpressionNet.load(url);\nexport const loadAgeGenderModel = (url: string) => nets.ageGenderNet.load(url);\n\n// backward compatibility\nexport const loadFaceDetectionModel = loadSsdMobilenetv1Model;\nexport const locateFaces = ssdMobilenetv1;\nexport const detectLandmarks = detectFaceLandmarks;\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm.js';\n\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderTask,\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\n\nexport class PredictFaceExpressionsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const faceExpressionsByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map(\n (parentResult, i) => extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]),\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const faceExpressions = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithFaceExpressions(parentResult, faceExpressions);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictAllFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm.js';\n\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { TNetInput } from '../dom/index';\nimport { extendWithAge, WithAge } from '../factories/WithAge';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { extendWithGender, WithGender } from '../factories/WithGender';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllFaceExpressionsTask,\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class PredictAgeAndGenderTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase>[], TSource[]> {\n public async run(): Promise>[]> {\n const parentResults = await this.parentTask;\n\n const ageAndGenderByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map((parentResult, i) => {\n const { age, gender, genderProbability } = ageAndGenderByFace[i];\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n });\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase> | undefined, TSource | undefined> {\n public async run(): Promise> | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { age, gender, genderProbability } = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictAllAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDescriptor, WithFaceDescriptor } from '../factories/WithFaceDescriptor';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class ComputeFaceDescriptorsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n ) {\n super();\n }\n}\n\nexport class ComputeAllFaceDescriptorsTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const descriptors = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n (faces) => Promise.all(faces.map((face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise)),\n null,\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return descriptors.map((descriptor, i) => extendWithFaceDescriptor(parentResults[i], descriptor));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n\nexport class ComputeSingleFaceDescriptorTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n const descriptor = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise,\n null,\n // eslint-disable-next-line no-shadow\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return extendWithFaceDescriptor(parentResult, descriptor);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class DetectFaceLandmarksTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected useTinyLandmarkNet: boolean,\n ) {\n super();\n }\n\n protected get landmarkNet(): FaceLandmark68Net | FaceLandmark68TinyNet {\n return this.useTinyLandmarkNet\n ? nets.faceLandmark68TinyNet\n : nets.faceLandmark68Net;\n }\n}\n\nexport class DetectAllFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n const detections = parentResults.map((res) => res.detection);\n\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, detections)\n : await extractFaces(this.input, detections);\n\n const faceLandmarksByFace = await Promise.all(faces.map(\n (face) => this.landmarkNet.detectLandmarks(face),\n )) as FaceLandmarks68[];\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return parentResults.map((parentResult, i) => extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i]));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class DetectSingleFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { detection } = parentResult;\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, [detection])\n : await extractFaces(this.input, [detection]);\n\n const landmarks = await this.landmarkNet.detectLandmarks(faces[0]) as FaceLandmarks68;\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return extendWithFaceLandmarks(parentResult, landmarks);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { TinyYolov2Options } from '../tinyYolov2/index';\nimport { ComposableTask } from './ComposableTask';\nimport { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';\nimport { nets } from './nets';\nimport { PredictAllAgeAndGenderTask, PredictSingleAgeAndGenderTask } from './PredictAgeAndGenderTask';\nimport { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionsTask } from './PredictFaceExpressionsTask';\nimport { FaceDetectionOptions } from './types';\n\nexport class DetectFacesTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n ) {\n super();\n }\n}\n\nexport class DetectAllFacesTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const { input, options } = this;\n\n // eslint-disable-next-line no-nested-ternary\n const faceDetectionFunction = options instanceof TinyFaceDetectorOptions\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyFaceDetector.locateFaces(input, options)\n : (\n // eslint-disable-next-line no-nested-ternary\n options instanceof SsdMobilenetv1Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.ssdMobilenetv1.locateFaces(input, options)\n : (\n options instanceof TinyYolov2Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyYolov2.locateFaces(input, options)\n : null\n )\n );\n\n if (!faceDetectionFunction) {\n throw new Error('detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options');\n }\n\n return faceDetectionFunction(input);\n }\n\n private runAndExtendWithFaceDetections(): Promise[]> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise[]>(async (resolve) => {\n const detections = await this.run();\n resolve(detections.map((detection) => extendWithFaceDetection({}, detection)));\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectAllFaceLandmarksTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n}\n\nexport class DetectSingleFaceTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const faceDetections = await new DetectAllFacesTask(this.input, this.options);\n let faceDetectionWithHighestScore = faceDetections[0];\n faceDetections.forEach((faceDetection) => {\n if (faceDetection.score > faceDetectionWithHighestScore.score) {\n faceDetectionWithHighestScore = faceDetection;\n }\n });\n return faceDetectionWithHighestScore;\n }\n\n private runAndExtendWithFaceDetection(): Promise | undefined> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise | undefined>(async (resolve) => {\n const detection = await this.run();\n resolve(detection ? extendWithFaceDetection<{}>({}, detection) : undefined);\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectSingleFaceLandmarksTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n}\n", "import { TNetInput } from '../dom/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { DetectAllFacesTask, DetectSingleFaceTask } from './DetectFacesTasks';\nimport { FaceDetectionOptions } from './types';\n\nexport function detectSingleFace(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectSingleFaceTask {\n return new DetectSingleFaceTask(input, options);\n}\n\nexport function detectAllFaces(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectAllFacesTask {\n return new DetectAllFacesTask(input, options);\n}\n", "import { TNetInput } from '../dom/index';\nimport { WithFaceDescriptor, WithFaceDetection, WithFaceLandmarks } from '../factories/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/index';\nimport { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\nimport { detectAllFaces } from './detectFaces';\n\n// export allFaces API for backward compatibility\n\nexport async function allFacesSsdMobilenetv1(\n input: TNetInput,\n minConfidence?: number,\n): Promise>>[]> {\n return detectAllFaces(input, new SsdMobilenetv1Options(minConfidence ? { minConfidence } : {}))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport async function allFacesTinyYolov2(\n input: TNetInput,\n forwardParams: ITinyYolov2Options = {},\n): Promise>>[]> {\n return detectAllFaces(input, new TinyYolov2Options(forwardParams))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport const allFaces = allFacesSsdMobilenetv1;\n", "export function euclideanDistance(arr1: number[] | Float32Array, arr2: number[] | Float32Array) {\n if (arr1.length !== arr2.length)\n throw new Error('euclideanDistance: arr1.length !== arr2.length')\n\n const desc1 = Array.from(arr1)\n const desc2 = Array.from(arr2)\n\n return Math.sqrt(\n desc1\n .map((val, i) => val - desc2[i])\n .reduce((res, diff) => res + Math.pow(diff, 2), 0)\n )\n}", "import { FaceMatch } from '../classes/FaceMatch';\nimport { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors';\nimport { euclideanDistance } from '../euclideanDistance';\nimport { WithFaceDescriptor } from '../factories/index';\n\nexport class FaceMatcher {\n private _labeledDescriptors: LabeledFaceDescriptors[]\n\n private _distanceThreshold: number\n\n constructor(\n inputs: LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>,\n distanceThreshold: number = 0.6,\n ) {\n this._distanceThreshold = distanceThreshold;\n\n const inputArray = Array.isArray(inputs) ? inputs : [inputs];\n\n if (!inputArray.length) {\n throw new Error('FaceRecognizer.constructor - expected atleast one input');\n }\n\n let count = 1;\n const createUniqueLabel = () => `person ${count++}`;\n\n this._labeledDescriptors = inputArray.map((desc) => {\n if (desc instanceof LabeledFaceDescriptors) {\n return desc;\n }\n\n if (desc instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc]);\n }\n\n if (desc.descriptor && desc.descriptor instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]);\n }\n\n throw new Error('FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>');\n });\n }\n\n public get labeledDescriptors(): LabeledFaceDescriptors[] { return this._labeledDescriptors; }\n\n public get distanceThreshold(): number { return this._distanceThreshold; }\n\n public computeMeanDistance(queryDescriptor: Float32Array, descriptors: Float32Array[]): number {\n return descriptors\n .map((d) => euclideanDistance(d, queryDescriptor))\n .reduce((d1, d2) => d1 + d2, 0)\n / (descriptors.length || 1);\n }\n\n public matchDescriptor(queryDescriptor: Float32Array): FaceMatch {\n return this.labeledDescriptors\n .map(({ descriptors, label }) => new FaceMatch(\n label,\n this.computeMeanDistance(queryDescriptor, descriptors),\n ))\n .reduce((best, curr) => (best.distance < curr.distance ? best : curr));\n }\n\n public findBestMatch(queryDescriptor: Float32Array): FaceMatch {\n const bestMatch = this.matchDescriptor(queryDescriptor);\n return bestMatch.distance < this.distanceThreshold\n ? bestMatch\n : new FaceMatch('unknown', bestMatch.distance);\n }\n\n public toJSON(): any {\n return {\n distanceThreshold: this.distanceThreshold,\n labeledDescriptors: this.labeledDescriptors.map((ld) => ld.toJSON()),\n };\n }\n\n public static fromJSON(json: any): FaceMatcher {\n const labeledDescriptors = json.labeledDescriptors\n .map((ld: any) => LabeledFaceDescriptors.fromJSON(ld));\n return new FaceMatcher(labeledDescriptors, json.distanceThreshold);\n }\n}\n", "import { TinyFaceDetector } from './TinyFaceDetector';\n\nexport * from './TinyFaceDetector';\nexport * from './TinyFaceDetectorOptions';\n\nexport function createTinyFaceDetector(weights: Float32Array) {\n const net = new TinyFaceDetector();\n net.extractWeights(weights);\n return net;\n}\n", "import { Dimensions, IDimensions } from './classes/index';\nimport { FaceDetection } from './classes/FaceDetection';\nimport { FaceLandmarks } from './classes/FaceLandmarks';\nimport { extendWithFaceDetection, isWithFaceDetection } from './factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, isWithFaceLandmarks } from './factories/WithFaceLandmarks';\n\nexport function resizeResults(results: T, dimensions: IDimensions): T {\n\n const { width, height } = new Dimensions(dimensions.width, dimensions.height)\n\n if (width <= 0 || height <= 0) {\n throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({ width, height })}`)\n }\n\n if (Array.isArray(results)) {\n // return results.map(obj => resizeResults(obj, { width, height })) as any as T\n return (results as Array).map(obj => resizeResults(obj, { width, height } as IDimensions)) as any as T\n }\n\n if (isWithFaceLandmarks(results)) {\n const resizedDetection = results.detection.forSize(width, height)\n const resizedLandmarks = results.unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height)\n return extendWithFaceLandmarks(extendWithFaceDetection(results, resizedDetection), resizedLandmarks)\n }\n\n if (isWithFaceDetection(results)) {\n return extendWithFaceDetection(results, results.detection.forSize(width, height))\n }\n\n if (results instanceof FaceLandmarks || results instanceof FaceDetection) {\n return (results as any).forSize(width, height)\n }\n\n return results\n}", "import * as tf from '../dist/tfjs.esm.js';\nimport * as draw from './draw/index';\nimport * as utils from './utils/index';\nimport * as pkg from '../package.json';\n\nexport { tf, draw, utils };\n\nexport * from './ageGenderNet/index';\nexport * from './classes/index';\nexport * from './dom/index';\nexport * from './env/index';\nexport * from './faceExpressionNet/index';\nexport * from './faceLandmarkNet/index';\nexport * from './faceRecognitionNet/index';\nexport * from './factories/index';\nexport * from './globalApi/index';\nexport * from './ops/index';\nexport * from './ssdMobilenetv1/index';\nexport * from './tinyFaceDetector/index';\nexport * from './tinyYolov2/index';\nexport * from './euclideanDistance';\nexport * from './NeuralNetwork';\nexport * from './resizeResults';\n\nconst node = (typeof process !== 'undefined');\n// eslint-disable-next-line no-undef\nconst browser = (typeof navigator !== 'undefined') && (typeof navigator.userAgent !== 'undefined');\nexport const version = { faceapi: pkg.version as string, node, browser };\n"], + "sourcesContent": ["export function isNodejs(): boolean {\n return typeof global === 'object'\n && typeof require === 'function'\n && typeof module !== 'undefined'\n // issues with gatsby.js: module.exports is undefined\n // && !!module.exports\n && typeof process !== 'undefined' && !!process.version;\n}\n", "", "// A port of an algorithm by Johannes Baag\u00F8e , 2010\n// http://baagoe.com/en/RandomMusings/javascript/\n// https://github.com/nquinlan/better-random-numbers-for-javascript-mirror\n// Original work is under MIT license -\n\n// Copyright (C) 2010 by Johannes Baag\u00F8e \n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// \n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n\n\n(function(global, module, define) {\n\nfunction Alea(seed) {\n var me = this, mash = Mash();\n\n me.next = function() {\n var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32\n me.s0 = me.s1;\n me.s1 = me.s2;\n return me.s2 = t - (me.c = t | 0);\n };\n\n // Apply the seeding algorithm from Baagoe.\n me.c = 1;\n me.s0 = mash(' ');\n me.s1 = mash(' ');\n me.s2 = mash(' ');\n me.s0 -= mash(seed);\n if (me.s0 < 0) { me.s0 += 1; }\n me.s1 -= mash(seed);\n if (me.s1 < 0) { me.s1 += 1; }\n me.s2 -= mash(seed);\n if (me.s2 < 0) { me.s2 += 1; }\n mash = null;\n}\n\nfunction copy(f, t) {\n t.c = f.c;\n t.s0 = f.s0;\n t.s1 = f.s1;\n t.s2 = f.s2;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new Alea(seed),\n state = opts && opts.state,\n prng = xg.next;\n prng.int32 = function() { return (xg.next() * 0x100000000) | 0; }\n prng.double = function() {\n return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53\n };\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nfunction Mash() {\n var n = 0xefc8249d;\n\n var mash = function(data) {\n data = data.toString();\n for (var i = 0; i < data.length; i++) {\n n += data.charCodeAt(i);\n var h = 0.02519603282416938 * n;\n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 0x100000000; // 2^32\n }\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n };\n\n return mash;\n}\n\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.alea = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xor128\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n\n // Set up generator function.\n me.next = function() {\n var t = me.x ^ (me.x << 11);\n me.x = me.y;\n me.y = me.z;\n me.z = me.w;\n return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8);\n };\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor128 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xorwow\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var t = (me.x ^ (me.x >>> 2));\n me.x = me.y; me.y = me.z; me.z = me.w; me.w = me.v;\n return (me.d = (me.d + 362437 | 0)) +\n (me.v = (me.v ^ (me.v << 4)) ^ (t ^ (t << 1))) | 0;\n };\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n me.v = 0;\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n if (k == strseed.length) {\n me.d = me.x << 10 ^ me.x >>> 4;\n }\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n t.v = f.v;\n t.d = f.d;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorwow = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xorshift7\" algorithm by\n// Fran\u00E7ois Panneton and Pierre L'ecuyer:\n// \"On the Xorgshift Random Number Generators\"\n// http://saluc.engr.uconn.edu/refs/crypto/rng/panneton05onthexorshift.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n // Update xor generator.\n var X = me.x, i = me.i, t, v, w;\n t = X[i]; t ^= (t >>> 7); v = t ^ (t << 24);\n t = X[(i + 1) & 7]; v ^= t ^ (t >>> 10);\n t = X[(i + 3) & 7]; v ^= t ^ (t >>> 3);\n t = X[(i + 4) & 7]; v ^= t ^ (t << 7);\n t = X[(i + 7) & 7]; t = t ^ (t << 13); v ^= t ^ (t << 9);\n X[i] = v;\n me.i = (i + 1) & 7;\n return v;\n };\n\n function init(me, seed) {\n var j, w, X = [];\n\n if (seed === (seed | 0)) {\n // Seed state array using a 32-bit integer.\n w = X[0] = seed;\n } else {\n // Seed state using a string.\n seed = '' + seed;\n for (j = 0; j < seed.length; ++j) {\n X[j & 7] = (X[j & 7] << 15) ^\n (seed.charCodeAt(j) + X[(j + 1) & 7] << 13);\n }\n }\n // Enforce an array length of 8, not all zeroes.\n while (X.length < 8) X.push(0);\n for (j = 0; j < 8 && X[j] === 0; ++j);\n if (j == 8) w = X[7] = -1; else w = X[j];\n\n me.x = X;\n me.i = 0;\n\n // Discard an initial 256 values.\n for (j = 256; j > 0; --j) {\n me.next();\n }\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.x = f.x.slice();\n t.i = f.i;\n return t;\n}\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.x) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorshift7 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n", "// A Javascript implementaion of Richard Brent's Xorgens xor4096 algorithm.\n//\n// This fast non-cryptographic random number generator is designed for\n// use in Monte-Carlo algorithms. It combines a long-period xorshift\n// generator with a Weyl generator, and it passes all common batteries\n// of stasticial tests for randomness while consuming only a few nanoseconds\n// for each prng generated. For background on the generator, see Brent's\n// paper: \"Some long-period random number generators using shifts and xors.\"\n// http://arxiv.org/pdf/1004.3115v1.pdf\n//\n// Usage:\n//\n// var xor4096 = require('xor4096');\n// random = xor4096(1); // Seed with int32 or string.\n// assert.equal(random(), 0.1520436450538547); // (0, 1) range, 53 bits.\n// assert.equal(random.int32(), 1806534897); // signed int32, 32 bits.\n//\n// For nonzero numeric keys, this impelementation provides a sequence\n// identical to that by Brent's xorgens 3 implementaion in C. This\n// implementation also provides for initalizing the generator with\n// string seeds, or for saving and restoring the state of the generator.\n//\n// On Chrome, this prng benchmarks about 2.1 times slower than\n// Javascript's built-in Math.random().\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n var w = me.w,\n X = me.X, i = me.i, t, v;\n // Update Weyl generator.\n me.w = w = (w + 0x61c88647) | 0;\n // Update xor generator.\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n // Update Xor generator array state.\n v = X[i] = v ^ t;\n me.i = i;\n // Result is the combination.\n return (v + (w ^ (w >>> 16))) | 0;\n };\n\n function init(me, seed) {\n var t, v, i, j, w, X = [], limit = 128;\n if (seed === (seed | 0)) {\n // Numeric seeds initialize v, which is used to generates X.\n v = seed;\n seed = null;\n } else {\n // String seeds are mixed into v and X one character at a time.\n seed = seed + '\\0';\n v = 0;\n limit = Math.max(limit, seed.length);\n }\n // Initialize circular array and weyl value.\n for (i = 0, j = -32; j < limit; ++j) {\n // Put the unicode characters into the array, and shuffle them.\n if (seed) v ^= seed.charCodeAt((j + 32) % seed.length);\n // After 32 shuffles, take v as the starting w value.\n if (j === 0) w = v;\n v ^= v << 10;\n v ^= v >>> 15;\n v ^= v << 4;\n v ^= v >>> 13;\n if (j >= 0) {\n w = (w + 0x61c88647) | 0; // Weyl.\n t = (X[j & 127] ^= (v + w)); // Combine xor and weyl to init array.\n i = (0 == t) ? i + 1 : 0; // Count zeroes.\n }\n }\n // We have detected all zeroes; make the key nonzero.\n if (i >= 128) {\n X[(seed && seed.length || 0) & 127] = -1;\n }\n // Run the generator 512 times to further mix the state before using it.\n // Factoring this as a function slows the main generator, so it is just\n // unrolled here. The weyl generator is not advanced while warming up.\n i = 127;\n for (j = 4 * 128; j > 0; --j) {\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n X[i] = v ^ t;\n }\n // Storing state as object members is faster than using closure variables.\n me.w = w;\n me.X = X;\n me.i = i;\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.i = f.i;\n t.w = f.w;\n t.X = f.X.slice();\n return t;\n};\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.X) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor4096 = impl;\n}\n\n})(\n this, // window object or global\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n", "// A Javascript implementaion of the \"Tyche-i\" prng algorithm by\n// Samuel Neves and Filipe Araujo.\n// See https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var b = me.b, c = me.c, d = me.d, a = me.a;\n b = (b << 25) ^ (b >>> 7) ^ c;\n c = (c - d) | 0;\n d = (d << 24) ^ (d >>> 8) ^ a;\n a = (a - b) | 0;\n me.b = b = (b << 20) ^ (b >>> 12) ^ c;\n me.c = c = (c - d) | 0;\n me.d = (d << 16) ^ (c >>> 16) ^ a;\n return me.a = (a - b) | 0;\n };\n\n /* The following is non-inverted tyche, which has better internal\n * bit diffusion, but which is about 25% slower than tyche-i in JS.\n me.next = function() {\n var a = me.a, b = me.b, c = me.c, d = me.d;\n a = (me.a + me.b | 0) >>> 0;\n d = me.d ^ a; d = d << 16 ^ d >>> 16;\n c = me.c + d | 0;\n b = me.b ^ c; b = b << 12 ^ d >>> 20;\n me.a = a = a + b | 0;\n d = d ^ a; me.d = d = d << 8 ^ d >>> 24;\n me.c = c = c + d | 0;\n b = b ^ c;\n return me.b = (b << 7 ^ b >>> 25);\n }\n */\n\n me.a = 0;\n me.b = 0;\n me.c = 2654435769 | 0;\n me.d = 1367130551;\n\n if (seed === Math.floor(seed)) {\n // Integer seed.\n me.a = (seed / 0x100000000) | 0;\n me.b = seed | 0;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 20; k++) {\n me.b ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.a = f.a;\n t.b = f.b;\n t.c = f.c;\n t.d = f.d;\n return t;\n};\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.tychei = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "", "/*\nCopyright 2014 David Bau.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\n(function (pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\nvar global = this,\n width = 256, // each RC4 output is 0 <= x < 256\n chunks = 6, // at least six RC4 outputs for each double\n digits = 52, // there are 52 significant digits in a double\n rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\nfunction seedrandom(seed, options, callback) {\n var key = [];\n options = (options == true) ? { entropy: true } : (options || {});\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(\n options.entropy ? [seed, tostring(pool)] :\n (seed == null) ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n var prng = function() {\n var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\n d = startdenom, // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n while (n < significance) { // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\n x = arc4.g(1); // new least-significant-byte.\n }\n while (n >= overflow) { // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n d /= 2; // right using integer math until\n x >>>= 1; // we have exactly the desired bits.\n }\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function() { return arc4.g(4) | 0; }\n prng.quick = function() { return arc4.g(4) / 0x100000000; }\n prng.double = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\n return (options.pass || callback ||\n function(prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) { copy(state, arc4); }\n // Only provide the .state method if requested via options.state.\n prng.state = function() { return copy(arc4, {}); }\n }\n\n // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n if (is_math_call) { math[rngname] = prng; return seed; }\n\n // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(\n prng,\n shortseed,\n 'global' in options ? options.global : (this == math),\n options.state);\n}\nmath['seed' + rngname] = seedrandom;\n\n//\n// ARC4\n//\n// An ARC4 implementation. The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4. Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\nfunction ARC4(key) {\n var t, keylen = key.length,\n me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) { key = [keylen++]; }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\n }\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n s[j] = t;\n }\n\n // The \"g\" method returns the next (count) outputs as one number.\n (me.g = function(count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t, r = 0,\n i = me.i, j = me.j, s = me.S;\n while (count--) {\n t = s[i = mask & (i + 1)];\n r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n }\n me.i = i; me.j = j;\n return r;\n // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n })(width);\n}\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\nfunction copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n};\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\nfunction flatten(obj, depth) {\n var result = [], typ = (typeof obj), prop;\n if (depth && typ == 'object') {\n for (prop in obj) {\n try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n }\n }\n return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n}\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\nfunction mixkey(seed, key) {\n var stringseed = seed + '', smear, j = 0;\n while (j < stringseed.length) {\n key[mask & j] =\n mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n }\n return tostring(key);\n}\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\nfunction autoseed() {\n try {\n var out;\n if (nodecrypto && (out = nodecrypto.randomBytes)) {\n // The use of 'out' to remember randomBytes makes tight minified code.\n out = out(width);\n } else {\n out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n }\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date, global, plugins, global.screen, tostring(pool)];\n }\n}\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\nfunction tostring(a) {\n return String.fromCharCode.apply(0, a);\n}\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool. Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\nmixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\nif ((typeof module) == 'object' && module.exports) {\n module.exports = seedrandom;\n // When in node.js, try using crypto package for autoseeding.\n try {\n nodecrypto = require('crypto');\n } catch (ex) {}\n} else if ((typeof define) == 'function' && define.amd) {\n define(function() { return seedrandom; });\n}\n\n// End anonymous scope, and pass initial values.\n})(\n [], // pool: entropy pool starts empty\n Math // math: package containing random, pow, and seedrandom\n);\n", "// A library of seedable RNGs implemented in Javascript.\n//\n// Usage:\n//\n// var seedrandom = require('seedrandom');\n// var random = seedrandom(1); // or any seed.\n// var x = random(); // 0 <= x < 1. Every bit is random.\n// var x = random.quick(); // 0 <= x < 1. 32 bits of randomness.\n\n// alea, a 53-bit multiply-with-carry generator by Johannes Baag\u00F8e.\n// Period: ~2^116\n// Reported to pass all BigCrush tests.\nvar alea = require('./lib/alea');\n\n// xor128, a pure xor-shift generator by George Marsaglia.\n// Period: 2^128-1.\n// Reported to fail: MatrixRank and LinearComp.\nvar xor128 = require('./lib/xor128');\n\n// xorwow, George Marsaglia's 160-bit xor-shift combined plus weyl.\n// Period: 2^192-2^32\n// Reported to fail: CollisionOver, SimpPoker, and LinearComp.\nvar xorwow = require('./lib/xorwow');\n\n// xorshift7, by Fran\u00E7ois Panneton and Pierre L'ecuyer, takes\n// a different approach: it adds robustness by allowing more shifts\n// than Marsaglia's original three. It is a 7-shift generator\n// with 256 bits, that passes BigCrush with no systmatic failures.\n// Period 2^256-1.\n// No systematic BigCrush failures reported.\nvar xorshift7 = require('./lib/xorshift7');\n\n// xor4096, by Richard Brent, is a 4096-bit xor-shift with a\n// very long period that also adds a Weyl generator. It also passes\n// BigCrush with no systematic failures. Its long period may\n// be useful if you have many generators and need to avoid\n// collisions.\n// Period: 2^4128-2^32.\n// No systematic BigCrush failures reported.\nvar xor4096 = require('./lib/xor4096');\n\n// Tyche-i, by Samuel Neves and Filipe Araujo, is a bit-shifting random\n// number generator derived from ChaCha, a modern stream cipher.\n// https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n// Period: ~2^127\n// No systematic BigCrush failures reported.\nvar tychei = require('./lib/tychei');\n\n// The original ARC4-based prng included in this library.\n// Period: ~2^1600\nvar sr = require('./seedrandom');\n\nsr.alea = alea;\nsr.xor128 = xor128;\nsr.xorwow = xorwow;\nsr.xorshift7 = xorshift7;\nsr.xor4096 = xor4096;\nsr.tychei = tychei;\n\nmodule.exports = sr;\n", "", "", "", "", "\nvar WasmBackendModuleThreadedSimd = (function() {\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n return (\nfunction(WasmBackendModuleThreadedSimd) {\n WasmBackendModuleThreadedSimd = WasmBackendModuleThreadedSimd || {};\n\nfunction GROWABLE_HEAP_I8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP8}function GROWABLE_HEAP_U8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU8}function GROWABLE_HEAP_I32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP32}function GROWABLE_HEAP_U32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU32}function GROWABLE_HEAP_F64(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPF64}var Module=typeof WasmBackendModuleThreadedSimd!==\"undefined\"?WasmBackendModuleThreadedSimd:{};var _scriptDir=undefined;var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram=\"./this.program\";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_PTHREAD=Module[\"ENVIRONMENT_IS_PTHREAD\"]||false;if(ENVIRONMENT_IS_PTHREAD){buffer=Module[\"buffer\"];DYNAMIC_BASE=Module[\"DYNAMIC_BASE\"];DYNAMICTOP_PTR=Module[\"DYNAMICTOP_PTR\"]}var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require(\"path\").dirname(scriptDirectory)+\"/\"}else{scriptDirectory=__dirname+\"/\"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);return nodeFS[\"readFileSync\"](filename,binary?null:\"utf8\")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process[\"argv\"].length>1){thisProgram=process[\"argv\"][1].replace(/\\\\/g,\"/\")}arguments_=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process[\"on\"](\"unhandledRejection\",abort);quit_=function(status){process[\"exit\"](status)};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\"};var nodeWorkerThreads;try{nodeWorkerThreads=require(\"worker_threads\")}catch(e){console.error('The \"worker_threads\" module is not supported in this node.js build - perhaps a newer version is needed?');throw e}Worker=nodeWorkerThreads.Worker}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){arguments_=scriptArgs}else if(typeof arguments!=\"undefined\"){arguments_=arguments}if(typeof quit===\"function\"){quit_=function(status){quit(status)}}if(typeof print!==\"undefined\"){if(typeof console===\"undefined\")console={};console.log=print;console.warn=console.error=typeof printErr!==\"undefined\"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}if(ENVIRONMENT_IS_NODE){read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);return nodeFS[\"readFileSync\"](filename,binary?null:\"utf8\")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret}}else{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}if(ENVIRONMENT_IS_NODE){if(typeof performance===\"undefined\"){performance=require(\"perf_hooks\").performance}}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var Atomics_load=Atomics.load;var Atomics_store=Atomics.store;var Atomics_compareExchange=Atomics.compareExchange;var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];var noExitRuntime;if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(typeof WebAssembly!==\"object\"){err(\"no native wasm support detected\")}var wasmMemory;var wasmTable=new WebAssembly.Table({\"initial\":167,\"maximum\":167+0,\"element\":\"anyfunc\"});var wasmModule;var threadInfoStruct=0;var selfThreadId=0;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={\"string\":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},\"array\":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\")return UTF8ToString(ret);if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx)){var u0=heap[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(GROWABLE_HEAP_U8(),ptr,maxBytesToRead):\"\"}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,GROWABLE_HEAP_U8(),outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function writeArrayToMemory(array,buffer){GROWABLE_HEAP_I8().set(array,buffer)}var WASM_PAGE_SIZE=65536;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var STACK_BASE=5256464,STACKTOP=STACK_BASE,STACK_MAX=13584,DYNAMIC_BASE=5256464,DYNAMICTOP_PTR=12656;if(ENVIRONMENT_IS_PTHREAD){}var INITIAL_INITIAL_MEMORY=Module[\"INITIAL_MEMORY\"]||16777216;if(ENVIRONMENT_IS_PTHREAD){wasmMemory=Module[\"wasmMemory\"];buffer=Module[\"buffer\"]}else{if(Module[\"wasmMemory\"]){wasmMemory=Module[\"wasmMemory\"]}else{wasmMemory=new WebAssembly.Memory({\"initial\":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,\"maximum\":2147483648/WASM_PAGE_SIZE,\"shared\":true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err(\"requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag\");if(ENVIRONMENT_IS_NODE){console.log(\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)\")}throw Error(\"bad memory\")}}}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);if(!ENVIRONMENT_IS_PTHREAD){GROWABLE_HEAP_I32()[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback(Module);continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func)}else{Module[\"dynCall_vi\"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;if(ENVIRONMENT_IS_PTHREAD)runtimeInitialized=true;function preRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){if(ENVIRONMENT_IS_PTHREAD)return;callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_ceil=Math.ceil;var Math_floor=Math.floor;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){assert(!ENVIRONMENT_IS_PTHREAD,\"addRunDependency cannot be used in a pthread worker\");runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}if(ENVIRONMENT_IS_PTHREAD)console.error(\"Pthread aborting at \"+(new Error).stack);what+=\"\";out(what);err(what);ABORT=true;EXITSTATUS=1;what=\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix=\"file://\";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile=\"tfjs-backend-wasm-threaded-simd.wasm\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw\"both async and sync fetching of the wasm failed\"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch===\"function\"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\"}return response[\"arrayBuffer\"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={\"a\":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module[\"asm\"]=exports;wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD){var numWorkersToLoad=PThread.unusedWorkers.length;PThread.unusedWorkers.forEach(function(w){PThread.loadWasmModuleToWorker(w,function(){if(!--numWorkersToLoad)removeRunDependency(\"wasm-instantiate\")})})}}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency(\"wasm-instantiate\")}function receiveInstantiatedSource(output){receiveInstance(output[\"instance\"],output[\"module\"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming===\"function\"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch===\"function\"){fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module[\"instantiateWasm\"]){try{var exports=Module[\"instantiateWasm\"](info,receiveInstance);return exports}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);return false}}instantiateAsync();return{}}var ASM_CONSTS={};function initPthreadsJS(){PThread.initRuntime()}if(!ENVIRONMENT_IS_PTHREAD)__ATINIT__.push({func:function(){___wasm_call_ctors()}});var __pthread_ptr=0;var __pthread_is_main_runtime_thread=0;var __pthread_is_main_browser_thread=0;function __register_pthread_ptr(pthreadPtr,isMainBrowserThread,isMainRuntimeThread){pthreadPtr=pthreadPtr|0;isMainBrowserThread=isMainBrowserThread|0;isMainRuntimeThread=isMainRuntimeThread|0;__pthread_ptr=pthreadPtr;__pthread_is_main_browser_thread=isMainBrowserThread;__pthread_is_main_runtime_thread=isMainRuntimeThread}Module[\"__register_pthread_ptr\"]=__register_pthread_ptr;var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var __main_thread_futex_wait_address=13568;function _emscripten_futex_wake(addr,count){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0||count<0)return-28;if(count==0)return 0;if(count>=2147483647)count=Infinity;var mainThreadWaitAddress=Atomics.load(GROWABLE_HEAP_I32(),__main_thread_futex_wait_address>>2);var mainThreadWoken=0;if(mainThreadWaitAddress==addr){var loadedAddr=Atomics.compareExchange(GROWABLE_HEAP_I32(),__main_thread_futex_wait_address>>2,mainThreadWaitAddress,0);if(loadedAddr==mainThreadWaitAddress){--count;mainThreadWoken=1;if(count<=0)return 1}}var ret=Atomics.notify(GROWABLE_HEAP_I32(),addr>>2,count);if(ret>=0)return ret+mainThreadWoken;throw\"Atomics.notify returned an unexpected value \"+ret}Module[\"_emscripten_futex_wake\"]=_emscripten_futex_wake;function __kill_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw\"Internal Error! _kill_thread() can only ever be called from main application thread!\";if(!pthread_ptr)throw\"Internal Error! Null pthread_ptr in _kill_thread!\";GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];pthread.worker.terminate();PThread.freeThreadData(pthread);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(pthread.worker),1);pthread.worker.pthread=undefined}function __cancel_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw\"Internal Error! _cancel_thread() can only ever be called from main application thread!\";if(!pthread_ptr)throw\"Internal Error! Null pthread_ptr in _cancel_thread!\";var pthread=PThread.pthreads[pthread_ptr];pthread.worker.postMessage({\"cmd\":\"cancel\"})}function __cleanup_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw\"Internal Error! _cleanup_thread() can only ever be called from main application thread!\";if(!pthread_ptr)throw\"Internal Error! Null pthread_ptr in _cleanup_thread!\";GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];if(pthread){var worker=pthread.worker;PThread.returnWorkerToPool(worker)}}var PThread={MAIN_THREAD_ID:1,mainThreadInfo:{schedPolicy:0,schedPrio:0},unusedWorkers:[],runningWorkers:[],initRuntime:function(){__register_pthread_ptr(PThread.mainThreadBlock,!ENVIRONMENT_IS_WORKER,1);_emscripten_register_main_browser_thread_id(PThread.mainThreadBlock)},initMainThreadBlock:function(){var pthreadPoolSize=8;for(var i=0;i>2]=PThread.mainThreadBlock;var headPtr=PThread.mainThreadBlock+156;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var tlsMemory=13056;for(var i=0;i<128;++i)GROWABLE_HEAP_U32()[tlsMemory/4+i]=0;Atomics.store(GROWABLE_HEAP_U32(),PThread.mainThreadBlock+104>>2,tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),PThread.mainThreadBlock+40>>2,PThread.mainThreadBlock);Atomics.store(GROWABLE_HEAP_U32(),PThread.mainThreadBlock+44>>2,42)},initWorker:function(){},pthreads:{},exitHandlers:null,setThreadStatus:function(){},runExitHandlers:function(){if(PThread.exitHandlers!==null){while(PThread.exitHandlers.length>0){PThread.exitHandlers.pop()()}PThread.exitHandlers=null}if(ENVIRONMENT_IS_PTHREAD&&threadInfoStruct)___pthread_tsd_run_dtors()},threadExit:function(exitCode){var tb=_pthread_self();if(tb){Atomics.store(GROWABLE_HEAP_U32(),tb+4>>2,exitCode);Atomics.store(GROWABLE_HEAP_U32(),tb+0>>2,1);Atomics.store(GROWABLE_HEAP_U32(),tb+60>>2,1);Atomics.store(GROWABLE_HEAP_U32(),tb+64>>2,0);PThread.runExitHandlers();_emscripten_futex_wake(tb+0,2147483647);__register_pthread_ptr(0,0,0);threadInfoStruct=0;if(ENVIRONMENT_IS_PTHREAD){postMessage({\"cmd\":\"exit\"})}}},threadCancel:function(){PThread.runExitHandlers();Atomics.store(GROWABLE_HEAP_U32(),threadInfoStruct+4>>2,-1);Atomics.store(GROWABLE_HEAP_U32(),threadInfoStruct+0>>2,1);_emscripten_futex_wake(threadInfoStruct+0,2147483647);threadInfoStruct=selfThreadId=0;__register_pthread_ptr(0,0,0);postMessage({\"cmd\":\"cancelDone\"})},terminateAllThreads:function(){for(var t in PThread.pthreads){var pthread=PThread.pthreads[t];if(pthread&&pthread.worker){PThread.returnWorkerToPool(pthread.worker)}}PThread.pthreads={};for(var i=0;i>2];GROWABLE_HEAP_I32()[pthread.threadInfoStruct+104>>2]=0;_free(tlsMemory);_free(pthread.threadInfoStruct)}pthread.threadInfoStruct=0;if(pthread.allocatedOwnStack&&pthread.stackBase)_free(pthread.stackBase);pthread.stackBase=0;if(pthread.worker)pthread.worker.pthread=null},returnWorkerToPool:function(worker){delete PThread.pthreads[worker.pthread.thread];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);PThread.freeThreadData(worker.pthread);worker.pthread=undefined},receiveObjectTransfer:function(data){},loadWasmModuleToWorker:function(worker,onFinishedLoading){worker.onmessage=function(e){var d=e[\"data\"];var cmd=d[\"cmd\"];if(worker.pthread)PThread.currentProxiedOperationCallerThread=worker.pthread.threadInfoStruct;if(d[\"targetThread\"]&&d[\"targetThread\"]!=_pthread_self()){var thread=PThread.pthreads[d.targetThread];if(thread){thread.worker.postMessage(e.data,d[\"transferList\"])}else{console.error('Internal error! Worker sent a message \"'+cmd+'\" to target pthread '+d[\"targetThread\"]+\", but that thread no longer exists!\")}PThread.currentProxiedOperationCallerThread=undefined;return}if(cmd===\"processQueuedMainThreadWork\"){_emscripten_main_thread_process_queued_calls()}else if(cmd===\"spawnThread\"){__spawn_thread(e.data)}else if(cmd===\"cleanupThread\"){__cleanup_thread(d[\"thread\"])}else if(cmd===\"killThread\"){__kill_thread(d[\"thread\"])}else if(cmd===\"cancelThread\"){__cancel_thread(d[\"thread\"])}else if(cmd===\"loaded\"){worker.loaded=true;if(onFinishedLoading)onFinishedLoading(worker);if(worker.runPthread){worker.runPthread();delete worker.runPthread}}else if(cmd===\"print\"){out(\"Thread \"+d[\"threadId\"]+\": \"+d[\"text\"])}else if(cmd===\"printErr\"){err(\"Thread \"+d[\"threadId\"]+\": \"+d[\"text\"])}else if(cmd===\"alert\"){alert(\"Thread \"+d[\"threadId\"]+\": \"+d[\"text\"])}else if(cmd===\"exit\"){var detached=worker.pthread&&Atomics.load(GROWABLE_HEAP_U32(),worker.pthread.thread+68>>2);if(detached){PThread.returnWorkerToPool(worker)}}else if(cmd===\"cancelDone\"){PThread.returnWorkerToPool(worker)}else if(cmd===\"objectTransfer\"){PThread.receiveObjectTransfer(e.data)}else if(e.data.target===\"setimmediate\"){worker.postMessage(e.data)}else{err(\"worker sent an unknown command \"+cmd)}PThread.currentProxiedOperationCallerThread=undefined};worker.onerror=function(e){err(\"pthread sent an error! \"+e.filename+\":\"+e.lineno+\": \"+e.message)};if(ENVIRONMENT_IS_NODE){worker.on(\"message\",function(data){worker.onmessage({data:data})});worker.on(\"error\",function(data){worker.onerror(data)});worker.on(\"exit\",function(data){console.log(\"worker exited - TODO: update the worker queue?\")})}worker.postMessage({\"cmd\":\"load\",\"urlOrBlob\":Module[\"mainScriptUrlOrBlob\"]||_scriptDir,\"wasmMemory\":wasmMemory,\"wasmModule\":wasmModule,\"DYNAMIC_BASE\":DYNAMIC_BASE,\"DYNAMICTOP_PTR\":DYNAMICTOP_PTR})},allocateUnusedWorker:function(){var pthreadMainJs=locateFile(\"tfjs-backend-wasm-threaded-simd.worker.js\");PThread.unusedWorkers.push(new Worker(pthreadMainJs))},getNewWorker:function(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}if(PThread.unusedWorkers.length>0)return PThread.unusedWorkers.pop();else return null},busySpinWait:function(msecs){var t=performance.now()+msecs;while(performance.now()>2]=value;return value}function _atexit(func,arg){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,func,arg);__ATEXIT__.unshift({func:func,arg:arg})}function __emscripten_notify_thread_queue(targetThreadId,mainThreadId){if(targetThreadId==mainThreadId){postMessage({\"cmd\":\"processQueuedMainThreadWork\"})}else if(ENVIRONMENT_IS_PTHREAD){postMessage({\"targetThread\":targetThreadId,\"cmd\":\"processThreadQueue\"})}else{var pthread=PThread.pthreads[targetThreadId];var worker=pthread&&pthread.worker;if(!worker){return}worker.postMessage({\"cmd\":\"processThreadQueue\"})}return 1}function _abort(){abort()}function _emscripten_conditional_set_current_thread_status(expectedStatus,newStatus){expectedStatus=expectedStatus|0;newStatus=newStatus|0}function _emscripten_futex_wait(addr,val,timeout){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0)return-28;if(ENVIRONMENT_IS_WORKER){var ret=Atomics.wait(GROWABLE_HEAP_I32(),addr>>2,val,timeout);if(ret===\"timed-out\")return-73;if(ret===\"not-equal\")return-6;if(ret===\"ok\")return 0;throw\"Atomics.wait returned an unexpected value \"+ret}else{var loadedVal=Atomics.load(GROWABLE_HEAP_I32(),addr>>2);if(val!=loadedVal)return-6;var tNow=performance.now();var tEnd=tNow+timeout;Atomics.store(GROWABLE_HEAP_I32(),__main_thread_futex_wait_address>>2,addr);var ourWaitAddress=addr;while(addr==ourWaitAddress){tNow=performance.now();if(tNow>tEnd){return-73}_emscripten_main_thread_process_queued_calls();addr=Atomics.load(GROWABLE_HEAP_I32(),__main_thread_futex_wait_address>>2)}return 0}}function _emscripten_is_main_browser_thread(){return __pthread_is_main_browser_thread|0}function _emscripten_is_main_runtime_thread(){return __pthread_is_main_runtime_thread|0}function _emscripten_memcpy_big(dest,src,num){GROWABLE_HEAP_U8().copyWithin(dest,src,src+num)}function _emscripten_num_logical_cores(){return navigator[\"hardwareConcurrency\"]}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var stack=stackSave();var args=stackAlloc(numCallArgs*8);var b=args>>3;for(var i=0;i>3]);buf+=8}else{buf=buf+3&~3;args.push(GROWABLE_HEAP_I32()[buf>>2]);buf+=4}}return args}function _emscripten_receive_on_main_thread_js(index,numCallArgs,args){_emscripten_receive_on_main_thread_js_callArgs.length=numCallArgs;var b=args>>3;for(var i=0;i>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();if(requestedSize<=oldSize){return false}var PAGE_MULTIPLE=65536;var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),PAGE_MULTIPLE));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence>2]=eventTypeId;GROWABLE_HEAP_I32()[varargs+4>>2]=eventData;GROWABLE_HEAP_I32()[varargs+8>>2]=userData;_emscripten_async_queue_on_thread_(targetThread,637534208,eventHandlerFunc,eventData,varargs);stackRestore(stackTop)},getTargetThreadForEventCallback:function(targetThread){switch(targetThread){case 1:return 0;case 2:return PThread.currentProxiedOperationCallerThread;default:return targetThread}},getNodeNameForTarget:function(target){if(!target)return\"\";if(target==window)return\"#window\";if(target==screen)return\"#screen\";return target&&target.nodeName?target.nodeName:\"\"},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height){var stackTop=stackSave();var varargs=stackAlloc(12);var targetCanvasPtr=0;if(targetCanvas){targetCanvasPtr=stringToNewUTF8(targetCanvas)}GROWABLE_HEAP_I32()[varargs>>2]=targetCanvasPtr;GROWABLE_HEAP_I32()[varargs+4>>2]=width;GROWABLE_HEAP_I32()[varargs+8>>2]=height;_emscripten_async_queue_on_thread_(targetThread,657457152,0,targetCanvasPtr,varargs);stackRestore(stackTop)}function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread,targetCanvas,width,height){targetCanvas=targetCanvas?UTF8ToString(targetCanvas):\"\";_emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height)}function __maybeCStringToJsString(cString){return cString>2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!==\"undefined\"?document:0,typeof window!==\"undefined\"?window:0];function __findEventTarget(target){target=__maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!==\"undefined\"?document.querySelector(target):undefined);return domElement}function __findCanvasEventTarget(target){return __findEventTarget(target)}function _emscripten_set_canvas_element_size_calling_thread(target,width,height){var canvas=__findCanvasEventTarget(target);if(!canvas)return-4;if(canvas.canvasSharedPtr){GROWABLE_HEAP_I32()[canvas.canvasSharedPtr>>2]=width;GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+4>>2]=height}if(canvas.offscreenCanvas||!canvas.controlTransferredOffscreen){if(canvas.offscreenCanvas)canvas=canvas.offscreenCanvas;var autoResizeViewport=false;if(canvas.GLctxObject&&canvas.GLctxObject.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(2978);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else if(canvas.canvasSharedPtr){var targetThread=GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+8>>2];_emscripten_set_offscreencanvas_size_on_target_thread(targetThread,target,width,height);return 1}else{return-4}return 0}function _emscripten_set_canvas_element_size_main_thread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(2,1,target,width,height);return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=__findCanvasEventTarget(target);if(canvas){return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}else{return _emscripten_set_canvas_element_size_main_thread(target,width,height)}}function _emscripten_set_current_thread_status(newStatus){newStatus=newStatus|0}function _emscripten_set_thread_name(threadId,name){threadId=threadId|0;name=name|0}function __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension(\"ANGLE_instanced_arrays\");if(ext){ctx[\"vertexAttribDivisor\"]=function(index,divisor){ext[\"vertexAttribDivisorANGLE\"](index,divisor)};ctx[\"drawArraysInstanced\"]=function(mode,first,count,primcount){ext[\"drawArraysInstancedANGLE\"](mode,first,count,primcount)};ctx[\"drawElementsInstanced\"]=function(mode,count,type,indices,primcount){ext[\"drawElementsInstancedANGLE\"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension(\"OES_vertex_array_object\");if(ext){ctx[\"createVertexArray\"]=function(){return ext[\"createVertexArrayOES\"]()};ctx[\"deleteVertexArray\"]=function(vao){ext[\"deleteVertexArrayOES\"](vao)};ctx[\"bindVertexArray\"]=function(vao){ext[\"bindVertexArrayOES\"](vao)};ctx[\"isVertexArray\"]=function(vao){return ext[\"isVertexArrayOES\"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension(\"WEBGL_draw_buffers\");if(ext){ctx[\"drawBuffers\"]=function(n,bufs){ext[\"drawBuffersWEBGL\"](n,bufs)};return 1}}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){var miniTempFloatBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(GROWABLE_HEAP_I32()[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext(\"webgl\",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);GROWABLE_HEAP_I32()[handle+4>>2]=_pthread_self();var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault===\"undefined\"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents===\"object\")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle].handle);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;__webgl_enable_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension(\"EXT_disjoint_timer_query\");var automaticallyEnabledExtensions=[\"OES_texture_float\",\"OES_texture_half_float\",\"OES_standard_derivatives\",\"OES_vertex_array_object\",\"WEBGL_compressed_texture_s3tc\",\"WEBGL_depth_texture\",\"OES_element_index_uint\",\"EXT_texture_filter_anisotropic\",\"EXT_frag_depth\",\"WEBGL_draw_buffers\",\"ANGLE_instanced_arrays\",\"OES_texture_float_linear\",\"OES_texture_half_float_linear\",\"EXT_blend_minmax\",\"EXT_shader_texture_lod\",\"EXT_texture_norm16\",\"WEBGL_compressed_texture_pvrtc\",\"EXT_color_buffer_half_float\",\"WEBGL_color_buffer_float\",\"EXT_sRGB\",\"WEBGL_compressed_texture_etc1\",\"EXT_disjoint_timer_query\",\"WEBGL_compressed_texture_etc\",\"WEBGL_compressed_texture_astc\",\"EXT_color_buffer_float\",\"WEBGL_compressed_texture_s3tc_srgb\",\"EXT_disjoint_timer_query_webgl2\",\"WEBKIT_WEBGL_compressed_texture_pvrtc\"];var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2;contextAttributes[\"alpha\"]=!!GROWABLE_HEAP_I32()[a+(0>>2)];contextAttributes[\"depth\"]=!!GROWABLE_HEAP_I32()[a+(4>>2)];contextAttributes[\"stencil\"]=!!GROWABLE_HEAP_I32()[a+(8>>2)];contextAttributes[\"antialias\"]=!!GROWABLE_HEAP_I32()[a+(12>>2)];contextAttributes[\"premultipliedAlpha\"]=!!GROWABLE_HEAP_I32()[a+(16>>2)];contextAttributes[\"preserveDrawingBuffer\"]=!!GROWABLE_HEAP_I32()[a+(20>>2)];var powerPreference=GROWABLE_HEAP_I32()[a+(24>>2)];contextAttributes[\"powerPreference\"]=__emscripten_webgl_power_preferences[powerPreference];contextAttributes[\"failIfMajorPerformanceCaveat\"]=!!GROWABLE_HEAP_I32()[a+(28>>2)];contextAttributes.majorVersion=GROWABLE_HEAP_I32()[a+(32>>2)];contextAttributes.minorVersion=GROWABLE_HEAP_I32()[a+(36>>2)];contextAttributes.enableExtensionsByDefault=GROWABLE_HEAP_I32()[a+(40>>2)];contextAttributes.explicitSwapControl=GROWABLE_HEAP_I32()[a+(44>>2)];contextAttributes.proxyContextToMainThread=GROWABLE_HEAP_I32()[a+(48>>2)];contextAttributes.renderViaOffscreenBackBuffer=GROWABLE_HEAP_I32()[a+(52>>2)];var canvas=__findCanvasEventTarget(target);if(!canvas){return-4}if(contextAttributes.explicitSwapControl){return-1}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _emscripten_webgl_create_context(a0,a1){return _emscripten_webgl_do_create_context(a0,a1)}var PATH={splitPath:function(filename){var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1)}else if(last===\"..\"){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)===\"/\",trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p}),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\"}if(path&&trailingSlash){path+=\"/\"}return(isAbsolute?\"/\":\"\")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\"}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path===\"/\")return\"/\";var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join(\"/\"))},join2:function(l,r){return PATH.normalize(l+\"/\"+r)}};var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=GROWABLE_HEAP_I32()[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(3,1,fd);return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(4,1,fd,offset_low,offset_high,whence,newOffset)}function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(5,1,fd,iov,iovcnt,pnum);var num=0;for(var i=0;i>2];var len=GROWABLE_HEAP_I32()[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _pthread_cleanup_pop(execute){var routine=PThread.exitHandlers.pop();if(execute)routine()}function _pthread_cleanup_push(routine,arg){if(PThread.exitHandlers===null){PThread.exitHandlers=[]}PThread.exitHandlers.push(function(){dynCall_vi(routine,arg)})}function __spawn_thread(threadParams){if(ENVIRONMENT_IS_PTHREAD)throw\"Internal Error! _spawn_thread() can only ever be called from main application thread!\";var worker=PThread.getNewWorker();if(worker.pthread!==undefined)throw\"Internal error!\";if(!threadParams.pthread_ptr)throw\"Internal error, no pthread ptr!\";PThread.runningWorkers.push(worker);var tlsMemory=_malloc(128*4);for(var i=0;i<128;++i){GROWABLE_HEAP_I32()[tlsMemory+i*4>>2]=0}var stackHigh=threadParams.stackBase+threadParams.stackSize;var pthread=PThread.pthreads[threadParams.pthread_ptr]={worker:worker,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize,allocatedOwnStack:threadParams.allocatedOwnStack,thread:threadParams.pthread_ptr,threadInfoStruct:threadParams.pthread_ptr};var tis=pthread.threadInfoStruct>>2;Atomics.store(GROWABLE_HEAP_U32(),tis+(0>>2),0);Atomics.store(GROWABLE_HEAP_U32(),tis+(4>>2),0);Atomics.store(GROWABLE_HEAP_U32(),tis+(8>>2),0);Atomics.store(GROWABLE_HEAP_U32(),tis+(68>>2),threadParams.detached);Atomics.store(GROWABLE_HEAP_U32(),tis+(104>>2),tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),tis+(48>>2),0);Atomics.store(GROWABLE_HEAP_U32(),tis+(40>>2),pthread.threadInfoStruct);Atomics.store(GROWABLE_HEAP_U32(),tis+(44>>2),42);Atomics.store(GROWABLE_HEAP_U32(),tis+(108>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(84>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(80>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(108+8>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(108+12>>2),threadParams.detached);Atomics.store(GROWABLE_HEAP_U32(),tis+(108+20>>2),threadParams.schedPolicy);Atomics.store(GROWABLE_HEAP_U32(),tis+(108+24>>2),threadParams.schedPrio);var global_libc=_emscripten_get_global_libc();var global_locale=global_libc+40;Atomics.store(GROWABLE_HEAP_U32(),tis+(176>>2),global_locale);worker.pthread=pthread;var msg={\"cmd\":\"run\",\"start_routine\":threadParams.startRoutine,\"arg\":threadParams.arg,\"threadInfoStruct\":threadParams.pthread_ptr,\"selfThreadId\":threadParams.pthread_ptr,\"parentThreadId\":threadParams.parent_pthread_ptr,\"stackBase\":threadParams.stackBase,\"stackSize\":threadParams.stackSize};worker.runPthread=function(){msg.time=performance.now();worker.postMessage(msg,threadParams.transferList)};if(worker.loaded){worker.runPthread();delete worker.runPthread}}function _pthread_getschedparam(thread,policy,schedparam){if(!policy&&!schedparam)return ERRNO_CODES.EINVAL;if(!thread){err(\"pthread_getschedparam called with a null thread pointer!\");return ERRNO_CODES.ESRCH}var self=GROWABLE_HEAP_I32()[thread+12>>2];if(self!==thread){err(\"pthread_getschedparam attempted on thread \"+thread+\", which does not point to a valid thread, or does not exist anymore!\");return ERRNO_CODES.ESRCH}var schedPolicy=Atomics.load(GROWABLE_HEAP_U32(),thread+108+20>>2);var schedPrio=Atomics.load(GROWABLE_HEAP_U32(),thread+108+24>>2);if(policy)GROWABLE_HEAP_I32()[policy>>2]=schedPolicy;if(schedparam)GROWABLE_HEAP_I32()[schedparam>>2]=schedPrio;return 0}function _pthread_self(){return __pthread_ptr|0}Module[\"_pthread_self\"]=_pthread_self;function _pthread_create(pthread_ptr,attr,start_routine,arg){if(typeof SharedArrayBuffer===\"undefined\"){err(\"Current environment does not support SharedArrayBuffer, pthreads are not available!\");return 6}if(!pthread_ptr){err(\"pthread_create called with a null thread pointer!\");return 28}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return _emscripten_sync_run_in_main_thread_4(687865856,pthread_ptr,attr,start_routine,arg)}if(error)return error;var stackSize=0;var stackBase=0;var detached=0;var schedPolicy=0;var schedPrio=0;if(attr){stackSize=GROWABLE_HEAP_I32()[attr>>2];stackSize+=81920;stackBase=GROWABLE_HEAP_I32()[attr+8>>2];detached=GROWABLE_HEAP_I32()[attr+12>>2]!==0;var inheritSched=GROWABLE_HEAP_I32()[attr+16>>2]===0;if(inheritSched){var prevSchedPolicy=GROWABLE_HEAP_I32()[attr+20>>2];var prevSchedPrio=GROWABLE_HEAP_I32()[attr+24>>2];var parentThreadPtr=PThread.currentProxiedOperationCallerThread?PThread.currentProxiedOperationCallerThread:_pthread_self();_pthread_getschedparam(parentThreadPtr,attr+20,attr+24);schedPolicy=GROWABLE_HEAP_I32()[attr+20>>2];schedPrio=GROWABLE_HEAP_I32()[attr+24>>2];GROWABLE_HEAP_I32()[attr+20>>2]=prevSchedPolicy;GROWABLE_HEAP_I32()[attr+24>>2]=prevSchedPrio}else{schedPolicy=GROWABLE_HEAP_I32()[attr+20>>2];schedPrio=GROWABLE_HEAP_I32()[attr+24>>2]}}else{stackSize=2097152}var allocatedOwnStack=stackBase==0;if(allocatedOwnStack){stackBase=_memalign(16,stackSize)}else{stackBase-=stackSize;assert(stackBase>0)}var threadInfoStruct=_malloc(232);for(var i=0;i<232>>2;++i)GROWABLE_HEAP_U32()[(threadInfoStruct>>2)+i]=0;GROWABLE_HEAP_I32()[pthread_ptr>>2]=threadInfoStruct;GROWABLE_HEAP_I32()[threadInfoStruct+12>>2]=threadInfoStruct;var headPtr=threadInfoStruct+156;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var threadParams={stackBase:stackBase,stackSize:stackSize,allocatedOwnStack:allocatedOwnStack,schedPolicy:schedPolicy,schedPrio:schedPrio,detached:detached,startRoutine:start_routine,pthread_ptr:threadInfoStruct,parent_pthread_ptr:_pthread_self(),arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd=\"spawnThread\";postMessage(threadParams,transferList)}else{__spawn_thread(threadParams)}return 0}function _roundf(d){d=+d;return d>=+0?+Math_floor(d+ +.5):+Math_ceil(d-+.5)}function _sysconf(name){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(6,1,name);switch(name){case 30:return 16384;case 85:var maxHeapSize=2147483648;return maxHeapSize/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:case 79:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator===\"object\")return navigator[\"hardwareConcurrency\"]||1;return 1}}setErrNo(28);return-1}if(!ENVIRONMENT_IS_PTHREAD)PThread.initMainThreadBlock();else PThread.initWorker();var GLctx;GL.init();var proxiedFunctionTable=[null,_atexit,_emscripten_set_canvas_element_size_main_thread,_fd_close,_fd_seek,_fd_write,_sysconf];var asmLibraryArg={\"e\":___assert_fail,\"r\":___call_main,\"w\":__emscripten_notify_thread_queue,\"a\":_abort,\"l\":_emscripten_conditional_set_current_thread_status,\"d\":_emscripten_futex_wait,\"c\":_emscripten_futex_wake,\"h\":_emscripten_get_now,\"g\":_emscripten_is_main_browser_thread,\"x\":_emscripten_is_main_runtime_thread,\"q\":_emscripten_memcpy_big,\"B\":_emscripten_num_logical_cores,\"t\":_emscripten_receive_on_main_thread_js,\"A\":_emscripten_resize_heap,\"u\":_emscripten_set_canvas_element_size,\"k\":_emscripten_set_current_thread_status,\"s\":_emscripten_set_thread_name,\"v\":_emscripten_webgl_create_context,\"m\":_fd_close,\"o\":_fd_seek,\"i\":_fd_write,\"p\":initPthreadsJS,\"memory\":wasmMemory||Module[\"wasmMemory\"],\"y\":_pthread_cleanup_pop,\"z\":_pthread_cleanup_push,\"j\":_pthread_create,\"b\":_pthread_self,\"f\":_roundf,\"n\":_sysconf,\"table\":wasmTable};var asm=createWasm();Module[\"asm\"]=asm;var ___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=function(){return(___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=Module[\"asm\"][\"C\"]).apply(null,arguments)};var _init=Module[\"_init\"]=function(){return(_init=Module[\"_init\"]=Module[\"asm\"][\"D\"]).apply(null,arguments)};var _register_tensor=Module[\"_register_tensor\"]=function(){return(_register_tensor=Module[\"_register_tensor\"]=Module[\"asm\"][\"E\"]).apply(null,arguments)};var _dispose_data=Module[\"_dispose_data\"]=function(){return(_dispose_data=Module[\"_dispose_data\"]=Module[\"asm\"][\"F\"]).apply(null,arguments)};var _dispose=Module[\"_dispose\"]=function(){return(_dispose=Module[\"_dispose\"]=Module[\"asm\"][\"G\"]).apply(null,arguments)};var _Abs=Module[\"_Abs\"]=function(){return(_Abs=Module[\"_Abs\"]=Module[\"asm\"][\"H\"]).apply(null,arguments)};var _Add=Module[\"_Add\"]=function(){return(_Add=Module[\"_Add\"]=Module[\"asm\"][\"I\"]).apply(null,arguments)};var _AddN=Module[\"_AddN\"]=function(){return(_AddN=Module[\"_AddN\"]=Module[\"asm\"][\"J\"]).apply(null,arguments)};var _ArgMax=Module[\"_ArgMax\"]=function(){return(_ArgMax=Module[\"_ArgMax\"]=Module[\"asm\"][\"K\"]).apply(null,arguments)};var _AvgPool=Module[\"_AvgPool\"]=function(){return(_AvgPool=Module[\"_AvgPool\"]=Module[\"asm\"][\"L\"]).apply(null,arguments)};var _BatchMatMul=Module[\"_BatchMatMul\"]=function(){return(_BatchMatMul=Module[\"_BatchMatMul\"]=Module[\"asm\"][\"M\"]).apply(null,arguments)};var _ClipByValue=Module[\"_ClipByValue\"]=function(){return(_ClipByValue=Module[\"_ClipByValue\"]=Module[\"asm\"][\"N\"]).apply(null,arguments)};var _Conv2D=Module[\"_Conv2D\"]=function(){return(_Conv2D=Module[\"_Conv2D\"]=Module[\"asm\"][\"O\"]).apply(null,arguments)};var _Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=function(){return(_Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=Module[\"asm\"][\"P\"]).apply(null,arguments)};var _Cos=Module[\"_Cos\"]=function(){return(_Cos=Module[\"_Cos\"]=Module[\"asm\"][\"Q\"]).apply(null,arguments)};var _CropAndResize=Module[\"_CropAndResize\"]=function(){return(_CropAndResize=Module[\"_CropAndResize\"]=Module[\"asm\"][\"R\"]).apply(null,arguments)};var _Cumsum=Module[\"_Cumsum\"]=function(){return(_Cumsum=Module[\"_Cumsum\"]=Module[\"asm\"][\"S\"]).apply(null,arguments)};var _DepthToSpace=Module[\"_DepthToSpace\"]=function(){return(_DepthToSpace=Module[\"_DepthToSpace\"]=Module[\"asm\"][\"T\"]).apply(null,arguments)};var _DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=function(){return(_DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=Module[\"asm\"][\"U\"]).apply(null,arguments)};var _Equal=Module[\"_Equal\"]=function(){return(_Equal=Module[\"_Equal\"]=Module[\"asm\"][\"V\"]).apply(null,arguments)};var _Exp=Module[\"_Exp\"]=function(){return(_Exp=Module[\"_Exp\"]=Module[\"asm\"][\"W\"]).apply(null,arguments)};var _FlipLeftRight=Module[\"_FlipLeftRight\"]=function(){return(_FlipLeftRight=Module[\"_FlipLeftRight\"]=Module[\"asm\"][\"X\"]).apply(null,arguments)};var _Floor=Module[\"_Floor\"]=function(){return(_Floor=Module[\"_Floor\"]=Module[\"asm\"][\"Y\"]).apply(null,arguments)};var _FloorDiv=Module[\"_FloorDiv\"]=function(){return(_FloorDiv=Module[\"_FloorDiv\"]=Module[\"asm\"][\"Z\"]).apply(null,arguments)};var _FusedBatchNorm=Module[\"_FusedBatchNorm\"]=function(){return(_FusedBatchNorm=Module[\"_FusedBatchNorm\"]=Module[\"asm\"][\"_\"]).apply(null,arguments)};var _FusedConv2D=Module[\"_FusedConv2D\"]=function(){return(_FusedConv2D=Module[\"_FusedConv2D\"]=Module[\"asm\"][\"$\"]).apply(null,arguments)};var _FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=function(){return(_FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=Module[\"asm\"][\"aa\"]).apply(null,arguments)};var _Gather=Module[\"_Gather\"]=function(){return(_Gather=Module[\"_Gather\"]=Module[\"asm\"][\"ba\"]).apply(null,arguments)};var _GatherNd=Module[\"_GatherNd\"]=function(){return(_GatherNd=Module[\"_GatherNd\"]=Module[\"asm\"][\"ca\"]).apply(null,arguments)};var _Greater=Module[\"_Greater\"]=function(){return(_Greater=Module[\"_Greater\"]=Module[\"asm\"][\"da\"]).apply(null,arguments)};var _GreaterEqual=Module[\"_GreaterEqual\"]=function(){return(_GreaterEqual=Module[\"_GreaterEqual\"]=Module[\"asm\"][\"ea\"]).apply(null,arguments)};var _LeakyRelu=Module[\"_LeakyRelu\"]=function(){return(_LeakyRelu=Module[\"_LeakyRelu\"]=Module[\"asm\"][\"fa\"]).apply(null,arguments)};var _Less=Module[\"_Less\"]=function(){return(_Less=Module[\"_Less\"]=Module[\"asm\"][\"ga\"]).apply(null,arguments)};var _LessEqual=Module[\"_LessEqual\"]=function(){return(_LessEqual=Module[\"_LessEqual\"]=Module[\"asm\"][\"ha\"]).apply(null,arguments)};var _Log=Module[\"_Log\"]=function(){return(_Log=Module[\"_Log\"]=Module[\"asm\"][\"ia\"]).apply(null,arguments)};var _LogicalAnd=Module[\"_LogicalAnd\"]=function(){return(_LogicalAnd=Module[\"_LogicalAnd\"]=Module[\"asm\"][\"ja\"]).apply(null,arguments)};var _Max=Module[\"_Max\"]=function(){return(_Max=Module[\"_Max\"]=Module[\"asm\"][\"ka\"]).apply(null,arguments)};var _MaxPool=Module[\"_MaxPool\"]=function(){return(_MaxPool=Module[\"_MaxPool\"]=Module[\"asm\"][\"la\"]).apply(null,arguments)};var _Maximum=Module[\"_Maximum\"]=function(){return(_Maximum=Module[\"_Maximum\"]=Module[\"asm\"][\"ma\"]).apply(null,arguments)};var _Mean=Module[\"_Mean\"]=function(){return(_Mean=Module[\"_Mean\"]=Module[\"asm\"][\"na\"]).apply(null,arguments)};var _Min=Module[\"_Min\"]=function(){return(_Min=Module[\"_Min\"]=Module[\"asm\"][\"oa\"]).apply(null,arguments)};var _Minimum=Module[\"_Minimum\"]=function(){return(_Minimum=Module[\"_Minimum\"]=Module[\"asm\"][\"pa\"]).apply(null,arguments)};var _Multiply=Module[\"_Multiply\"]=function(){return(_Multiply=Module[\"_Multiply\"]=Module[\"asm\"][\"qa\"]).apply(null,arguments)};var _Neg=Module[\"_Neg\"]=function(){return(_Neg=Module[\"_Neg\"]=Module[\"asm\"][\"ra\"]).apply(null,arguments)};var _NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=function(){return(_NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=Module[\"asm\"][\"sa\"]).apply(null,arguments)};var _NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=function(){return(_NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=Module[\"asm\"][\"ta\"]).apply(null,arguments)};var _NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=function(){return(_NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=Module[\"asm\"][\"ua\"]).apply(null,arguments)};var _NotEqual=Module[\"_NotEqual\"]=function(){return(_NotEqual=Module[\"_NotEqual\"]=Module[\"asm\"][\"va\"]).apply(null,arguments)};var _OneHot=Module[\"_OneHot\"]=function(){return(_OneHot=Module[\"_OneHot\"]=Module[\"asm\"][\"wa\"]).apply(null,arguments)};var _PadV2=Module[\"_PadV2\"]=function(){return(_PadV2=Module[\"_PadV2\"]=Module[\"asm\"][\"xa\"]).apply(null,arguments)};var _Pow=Module[\"_Pow\"]=function(){return(_Pow=Module[\"_Pow\"]=Module[\"asm\"][\"ya\"]).apply(null,arguments)};var _Prelu=Module[\"_Prelu\"]=function(){return(_Prelu=Module[\"_Prelu\"]=Module[\"asm\"][\"za\"]).apply(null,arguments)};var _Prod=Module[\"_Prod\"]=function(){return(_Prod=Module[\"_Prod\"]=Module[\"asm\"][\"Aa\"]).apply(null,arguments)};var _RealDiv=Module[\"_RealDiv\"]=function(){return(_RealDiv=Module[\"_RealDiv\"]=Module[\"asm\"][\"Ba\"]).apply(null,arguments)};var _Relu=Module[\"_Relu\"]=function(){return(_Relu=Module[\"_Relu\"]=Module[\"asm\"][\"Ca\"]).apply(null,arguments)};var _Relu6=Module[\"_Relu6\"]=function(){return(_Relu6=Module[\"_Relu6\"]=Module[\"asm\"][\"Da\"]).apply(null,arguments)};var _ResizeBilinear=Module[\"_ResizeBilinear\"]=function(){return(_ResizeBilinear=Module[\"_ResizeBilinear\"]=Module[\"asm\"][\"Ea\"]).apply(null,arguments)};var _Reverse=Module[\"_Reverse\"]=function(){return(_Reverse=Module[\"_Reverse\"]=Module[\"asm\"][\"Fa\"]).apply(null,arguments)};var _RotateWithOffset=Module[\"_RotateWithOffset\"]=function(){return(_RotateWithOffset=Module[\"_RotateWithOffset\"]=Module[\"asm\"][\"Ga\"]).apply(null,arguments)};var _Rsqrt=Module[\"_Rsqrt\"]=function(){return(_Rsqrt=Module[\"_Rsqrt\"]=Module[\"asm\"][\"Ha\"]).apply(null,arguments)};var _ScatterNd=Module[\"_ScatterNd\"]=function(){return(_ScatterNd=Module[\"_ScatterNd\"]=Module[\"asm\"][\"Ia\"]).apply(null,arguments)};var _SelectV2=Module[\"_SelectV2\"]=function(){return(_SelectV2=Module[\"_SelectV2\"]=Module[\"asm\"][\"Ja\"]).apply(null,arguments)};var _Sigmoid=Module[\"_Sigmoid\"]=function(){return(_Sigmoid=Module[\"_Sigmoid\"]=Module[\"asm\"][\"Ka\"]).apply(null,arguments)};var _Sin=Module[\"_Sin\"]=function(){return(_Sin=Module[\"_Sin\"]=Module[\"asm\"][\"La\"]).apply(null,arguments)};var _Softmax=Module[\"_Softmax\"]=function(){return(_Softmax=Module[\"_Softmax\"]=Module[\"asm\"][\"Ma\"]).apply(null,arguments)};var _Sqrt=Module[\"_Sqrt\"]=function(){return(_Sqrt=Module[\"_Sqrt\"]=Module[\"asm\"][\"Na\"]).apply(null,arguments)};var _Square=Module[\"_Square\"]=function(){return(_Square=Module[\"_Square\"]=Module[\"asm\"][\"Oa\"]).apply(null,arguments)};var _SquaredDifference=Module[\"_SquaredDifference\"]=function(){return(_SquaredDifference=Module[\"_SquaredDifference\"]=Module[\"asm\"][\"Pa\"]).apply(null,arguments)};var _StridedSlice=Module[\"_StridedSlice\"]=function(){return(_StridedSlice=Module[\"_StridedSlice\"]=Module[\"asm\"][\"Qa\"]).apply(null,arguments)};var _Sub=Module[\"_Sub\"]=function(){return(_Sub=Module[\"_Sub\"]=Module[\"asm\"][\"Ra\"]).apply(null,arguments)};var _Sum=Module[\"_Sum\"]=function(){return(_Sum=Module[\"_Sum\"]=Module[\"asm\"][\"Sa\"]).apply(null,arguments)};var _Tanh=Module[\"_Tanh\"]=function(){return(_Tanh=Module[\"_Tanh\"]=Module[\"asm\"][\"Ta\"]).apply(null,arguments)};var _Tile=Module[\"_Tile\"]=function(){return(_Tile=Module[\"_Tile\"]=Module[\"asm\"][\"Ua\"]).apply(null,arguments)};var _TopK=Module[\"_TopK\"]=function(){return(_TopK=Module[\"_TopK\"]=Module[\"asm\"][\"Va\"]).apply(null,arguments)};var _Transpose=Module[\"_Transpose\"]=function(){return(_Transpose=Module[\"_Transpose\"]=Module[\"asm\"][\"Wa\"]).apply(null,arguments)};var __FusedMatMul=Module[\"__FusedMatMul\"]=function(){return(__FusedMatMul=Module[\"__FusedMatMul\"]=Module[\"asm\"][\"Xa\"]).apply(null,arguments)};var _malloc=Module[\"_malloc\"]=function(){return(_malloc=Module[\"_malloc\"]=Module[\"asm\"][\"Ya\"]).apply(null,arguments)};var _free=Module[\"_free\"]=function(){return(_free=Module[\"_free\"]=Module[\"asm\"][\"Za\"]).apply(null,arguments)};var ___errno_location=Module[\"___errno_location\"]=function(){return(___errno_location=Module[\"___errno_location\"]=Module[\"asm\"][\"_a\"]).apply(null,arguments)};var _emscripten_get_global_libc=Module[\"_emscripten_get_global_libc\"]=function(){return(_emscripten_get_global_libc=Module[\"_emscripten_get_global_libc\"]=Module[\"asm\"][\"$a\"]).apply(null,arguments)};var ___em_js__initPthreadsJS=Module[\"___em_js__initPthreadsJS\"]=function(){return(___em_js__initPthreadsJS=Module[\"___em_js__initPthreadsJS\"]=Module[\"asm\"][\"ab\"]).apply(null,arguments)};var _memalign=Module[\"_memalign\"]=function(){return(_memalign=Module[\"_memalign\"]=Module[\"asm\"][\"bb\"]).apply(null,arguments)};var ___pthread_tsd_run_dtors=Module[\"___pthread_tsd_run_dtors\"]=function(){return(___pthread_tsd_run_dtors=Module[\"___pthread_tsd_run_dtors\"]=Module[\"asm\"][\"cb\"]).apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module[\"_emscripten_main_thread_process_queued_calls\"]=function(){return(_emscripten_main_thread_process_queued_calls=Module[\"_emscripten_main_thread_process_queued_calls\"]=Module[\"asm\"][\"db\"]).apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module[\"_emscripten_current_thread_process_queued_calls\"]=function(){return(_emscripten_current_thread_process_queued_calls=Module[\"_emscripten_current_thread_process_queued_calls\"]=Module[\"asm\"][\"eb\"]).apply(null,arguments)};var _emscripten_register_main_browser_thread_id=Module[\"_emscripten_register_main_browser_thread_id\"]=function(){return(_emscripten_register_main_browser_thread_id=Module[\"_emscripten_register_main_browser_thread_id\"]=Module[\"asm\"][\"fb\"]).apply(null,arguments)};var _emscripten_main_browser_thread_id=Module[\"_emscripten_main_browser_thread_id\"]=function(){return(_emscripten_main_browser_thread_id=Module[\"_emscripten_main_browser_thread_id\"]=Module[\"asm\"][\"gb\"]).apply(null,arguments)};var _emscripten_async_run_in_main_thread=Module[\"_emscripten_async_run_in_main_thread\"]=function(){return(_emscripten_async_run_in_main_thread=Module[\"_emscripten_async_run_in_main_thread\"]=Module[\"asm\"][\"hb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread=Module[\"_emscripten_sync_run_in_main_thread\"]=function(){return(_emscripten_sync_run_in_main_thread=Module[\"_emscripten_sync_run_in_main_thread\"]=Module[\"asm\"][\"ib\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_0=Module[\"_emscripten_sync_run_in_main_thread_0\"]=function(){return(_emscripten_sync_run_in_main_thread_0=Module[\"_emscripten_sync_run_in_main_thread_0\"]=Module[\"asm\"][\"jb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_1=Module[\"_emscripten_sync_run_in_main_thread_1\"]=function(){return(_emscripten_sync_run_in_main_thread_1=Module[\"_emscripten_sync_run_in_main_thread_1\"]=Module[\"asm\"][\"kb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_2=Module[\"_emscripten_sync_run_in_main_thread_2\"]=function(){return(_emscripten_sync_run_in_main_thread_2=Module[\"_emscripten_sync_run_in_main_thread_2\"]=Module[\"asm\"][\"lb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_xprintf_varargs=Module[\"_emscripten_sync_run_in_main_thread_xprintf_varargs\"]=function(){return(_emscripten_sync_run_in_main_thread_xprintf_varargs=Module[\"_emscripten_sync_run_in_main_thread_xprintf_varargs\"]=Module[\"asm\"][\"mb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_3=Module[\"_emscripten_sync_run_in_main_thread_3\"]=function(){return(_emscripten_sync_run_in_main_thread_3=Module[\"_emscripten_sync_run_in_main_thread_3\"]=Module[\"asm\"][\"nb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_4=Module[\"_emscripten_sync_run_in_main_thread_4\"]=function(){return(_emscripten_sync_run_in_main_thread_4=Module[\"_emscripten_sync_run_in_main_thread_4\"]=Module[\"asm\"][\"ob\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_5=Module[\"_emscripten_sync_run_in_main_thread_5\"]=function(){return(_emscripten_sync_run_in_main_thread_5=Module[\"_emscripten_sync_run_in_main_thread_5\"]=Module[\"asm\"][\"pb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_6=Module[\"_emscripten_sync_run_in_main_thread_6\"]=function(){return(_emscripten_sync_run_in_main_thread_6=Module[\"_emscripten_sync_run_in_main_thread_6\"]=Module[\"asm\"][\"qb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_7=Module[\"_emscripten_sync_run_in_main_thread_7\"]=function(){return(_emscripten_sync_run_in_main_thread_7=Module[\"_emscripten_sync_run_in_main_thread_7\"]=Module[\"asm\"][\"rb\"]).apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module[\"_emscripten_run_in_main_runtime_thread_js\"]=function(){return(_emscripten_run_in_main_runtime_thread_js=Module[\"_emscripten_run_in_main_runtime_thread_js\"]=Module[\"asm\"][\"sb\"]).apply(null,arguments)};var _emscripten_async_queue_on_thread_=Module[\"_emscripten_async_queue_on_thread_\"]=function(){return(_emscripten_async_queue_on_thread_=Module[\"_emscripten_async_queue_on_thread_\"]=Module[\"asm\"][\"tb\"]).apply(null,arguments)};var _emscripten_tls_init=Module[\"_emscripten_tls_init\"]=function(){return(_emscripten_tls_init=Module[\"_emscripten_tls_init\"]=Module[\"asm\"][\"ub\"]).apply(null,arguments)};var stackSave=Module[\"stackSave\"]=function(){return(stackSave=Module[\"stackSave\"]=Module[\"asm\"][\"vb\"]).apply(null,arguments)};var stackAlloc=Module[\"stackAlloc\"]=function(){return(stackAlloc=Module[\"stackAlloc\"]=Module[\"asm\"][\"wb\"]).apply(null,arguments)};var stackRestore=Module[\"stackRestore\"]=function(){return(stackRestore=Module[\"stackRestore\"]=Module[\"asm\"][\"xb\"]).apply(null,arguments)};var dynCall_vi=Module[\"dynCall_vi\"]=function(){return(dynCall_vi=Module[\"dynCall_vi\"]=Module[\"asm\"][\"yb\"]).apply(null,arguments)};var dynCall_v=Module[\"dynCall_v\"]=function(){return(dynCall_v=Module[\"dynCall_v\"]=Module[\"asm\"][\"zb\"]).apply(null,arguments)};var dynCall_ii=Module[\"dynCall_ii\"]=function(){return(dynCall_ii=Module[\"dynCall_ii\"]=Module[\"asm\"][\"Ab\"]).apply(null,arguments)};Module[\"asm\"]=asm;Module[\"cwrap\"]=cwrap;Module[\"PThread\"]=PThread;Module[\"PThread\"]=PThread;Module[\"_pthread_self\"]=_pthread_self;Module[\"wasmMemory\"]=wasmMemory;Module[\"ExitStatus\"]=ExitStatus;var calledRun;Module[\"then\"]=function(func){if(calledRun){func(Module)}else{var old=Module[\"onRuntimeInitialized\"];Module[\"onRuntimeInitialized\"]=function(){if(old)old();func(Module)}}return Module};function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}Module[\"run\"]=run;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}if(!ENVIRONMENT_IS_PTHREAD)noExitRuntime=true;if(!ENVIRONMENT_IS_PTHREAD)run();\n\n\n return WasmBackendModuleThreadedSimd\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n module.exports = WasmBackendModuleThreadedSimd;\n else if (typeof define === 'function' && define['amd'])\n define([], function() { return WasmBackendModuleThreadedSimd; });\n else if (typeof exports === 'object')\n exports[\"WasmBackendModuleThreadedSimd\"] = WasmBackendModuleThreadedSimd;\n ", "\nvar WasmBackendModule = (function() {\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n return (\nfunction(WasmBackendModule) {\n WasmBackendModule = WasmBackendModule || {};\n\nvar Module=typeof WasmBackendModule!==\"undefined\"?WasmBackendModule:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram=\"./this.program\";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require(\"path\").dirname(scriptDirectory)+\"/\"}else{scriptDirectory=__dirname+\"/\"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);return nodeFS[\"readFileSync\"](filename,binary?null:\"utf8\")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process[\"argv\"].length>1){thisProgram=process[\"argv\"][1].replace(/\\\\/g,\"/\")}arguments_=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process[\"on\"](\"unhandledRejection\",abort);quit_=function(status){process[\"exit\"](status)};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){arguments_=scriptArgs}else if(typeof arguments!=\"undefined\"){arguments_=arguments}if(typeof quit===\"function\"){quit_=function(status){quit(status)}}if(typeof print!==\"undefined\"){if(typeof console===\"undefined\")console={};console.log=print;console.warn=console.error=typeof printErr!==\"undefined\"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];var noExitRuntime;if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(typeof WebAssembly!==\"object\"){err(\"no native wasm support detected\")}var wasmMemory;var wasmTable=new WebAssembly.Table({\"initial\":149,\"maximum\":149+0,\"element\":\"anyfunc\"});var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={\"string\":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},\"array\":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\")return UTF8ToString(ret);if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str=\"\";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\"}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var INITIAL_INITIAL_MEMORY=Module[\"INITIAL_MEMORY\"]||16777216;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback(Module);continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func)}else{Module[\"dynCall_vi\"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_ceil=Math.ceil;var Math_floor=Math.floor;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}what+=\"\";out(what);err(what);ABORT=true;EXITSTATUS=1;what=\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix=\"file://\";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile=\"tfjs-backend-wasm.wasm\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw\"both async and sync fetching of the wasm failed\"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch===\"function\"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\"}return response[\"arrayBuffer\"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={\"env\":asmLibraryArg,\"wasi_snapshot_preview1\":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module[\"asm\"]=exports;wasmMemory=exports[\"memory\"];updateGlobalBufferAndViews(wasmMemory.buffer);removeRunDependency(\"wasm-instantiate\")}addRunDependency(\"wasm-instantiate\");function receiveInstantiatedSource(output){receiveInstance(output[\"instance\"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming===\"function\"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch===\"function\"){fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module[\"instantiateWasm\"]){try{var exports=Module[\"instantiateWasm\"](info,receiveInstance);return exports}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);return false}}instantiateAsync();return{}}__ATINIT__.push();function _emscripten_notify_memory_growth(memoryIndex){updateGlobalBufferAndViews(wasmMemory.buffer)}var PATH={splitPath:function(filename){var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1)}else if(last===\"..\"){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)===\"/\",trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p}),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\"}if(path&&trailingSlash){path+=\"/\"}return(isAbsolute?\"/\":\"\")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\"}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path===\"/\")return\"/\";var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join(\"/\"))},join2:function(l,r){return PATH.normalize(l+\"/\"+r)}};var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _exit(status){exit(status)}function _proc_exit(code){_exit(code)}function _roundf(d){d=+d;return d>=+0?+Math_floor(d+ +.5):+Math_ceil(d-+.5)}var asmLibraryArg={\"emscripten_notify_memory_growth\":_emscripten_notify_memory_growth,\"fd_close\":_fd_close,\"fd_seek\":_fd_seek,\"fd_write\":_fd_write,\"proc_exit\":_proc_exit,\"roundf\":_roundf};var asm=createWasm();Module[\"asm\"]=asm;var _init=Module[\"_init\"]=function(){return(_init=Module[\"_init\"]=Module[\"asm\"][\"init\"]).apply(null,arguments)};var _register_tensor=Module[\"_register_tensor\"]=function(){return(_register_tensor=Module[\"_register_tensor\"]=Module[\"asm\"][\"register_tensor\"]).apply(null,arguments)};var _dispose_data=Module[\"_dispose_data\"]=function(){return(_dispose_data=Module[\"_dispose_data\"]=Module[\"asm\"][\"dispose_data\"]).apply(null,arguments)};var _dispose=Module[\"_dispose\"]=function(){return(_dispose=Module[\"_dispose\"]=Module[\"asm\"][\"dispose\"]).apply(null,arguments)};var _Abs=Module[\"_Abs\"]=function(){return(_Abs=Module[\"_Abs\"]=Module[\"asm\"][\"Abs\"]).apply(null,arguments)};var _Add=Module[\"_Add\"]=function(){return(_Add=Module[\"_Add\"]=Module[\"asm\"][\"Add\"]).apply(null,arguments)};var _AddN=Module[\"_AddN\"]=function(){return(_AddN=Module[\"_AddN\"]=Module[\"asm\"][\"AddN\"]).apply(null,arguments)};var _ArgMax=Module[\"_ArgMax\"]=function(){return(_ArgMax=Module[\"_ArgMax\"]=Module[\"asm\"][\"ArgMax\"]).apply(null,arguments)};var _AvgPool=Module[\"_AvgPool\"]=function(){return(_AvgPool=Module[\"_AvgPool\"]=Module[\"asm\"][\"AvgPool\"]).apply(null,arguments)};var _BatchMatMul=Module[\"_BatchMatMul\"]=function(){return(_BatchMatMul=Module[\"_BatchMatMul\"]=Module[\"asm\"][\"BatchMatMul\"]).apply(null,arguments)};var _ClipByValue=Module[\"_ClipByValue\"]=function(){return(_ClipByValue=Module[\"_ClipByValue\"]=Module[\"asm\"][\"ClipByValue\"]).apply(null,arguments)};var _Conv2D=Module[\"_Conv2D\"]=function(){return(_Conv2D=Module[\"_Conv2D\"]=Module[\"asm\"][\"Conv2D\"]).apply(null,arguments)};var _Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=function(){return(_Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=Module[\"asm\"][\"Conv2DBackpropInput\"]).apply(null,arguments)};var _Cos=Module[\"_Cos\"]=function(){return(_Cos=Module[\"_Cos\"]=Module[\"asm\"][\"Cos\"]).apply(null,arguments)};var _CropAndResize=Module[\"_CropAndResize\"]=function(){return(_CropAndResize=Module[\"_CropAndResize\"]=Module[\"asm\"][\"CropAndResize\"]).apply(null,arguments)};var _Cumsum=Module[\"_Cumsum\"]=function(){return(_Cumsum=Module[\"_Cumsum\"]=Module[\"asm\"][\"Cumsum\"]).apply(null,arguments)};var _DepthToSpace=Module[\"_DepthToSpace\"]=function(){return(_DepthToSpace=Module[\"_DepthToSpace\"]=Module[\"asm\"][\"DepthToSpace\"]).apply(null,arguments)};var _DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=function(){return(_DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=Module[\"asm\"][\"DepthwiseConv2dNative\"]).apply(null,arguments)};var _Equal=Module[\"_Equal\"]=function(){return(_Equal=Module[\"_Equal\"]=Module[\"asm\"][\"Equal\"]).apply(null,arguments)};var _Exp=Module[\"_Exp\"]=function(){return(_Exp=Module[\"_Exp\"]=Module[\"asm\"][\"Exp\"]).apply(null,arguments)};var _FlipLeftRight=Module[\"_FlipLeftRight\"]=function(){return(_FlipLeftRight=Module[\"_FlipLeftRight\"]=Module[\"asm\"][\"FlipLeftRight\"]).apply(null,arguments)};var _Floor=Module[\"_Floor\"]=function(){return(_Floor=Module[\"_Floor\"]=Module[\"asm\"][\"Floor\"]).apply(null,arguments)};var _FloorDiv=Module[\"_FloorDiv\"]=function(){return(_FloorDiv=Module[\"_FloorDiv\"]=Module[\"asm\"][\"FloorDiv\"]).apply(null,arguments)};var _FusedBatchNorm=Module[\"_FusedBatchNorm\"]=function(){return(_FusedBatchNorm=Module[\"_FusedBatchNorm\"]=Module[\"asm\"][\"FusedBatchNorm\"]).apply(null,arguments)};var _FusedConv2D=Module[\"_FusedConv2D\"]=function(){return(_FusedConv2D=Module[\"_FusedConv2D\"]=Module[\"asm\"][\"FusedConv2D\"]).apply(null,arguments)};var _FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=function(){return(_FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=Module[\"asm\"][\"FusedDepthwiseConv2D\"]).apply(null,arguments)};var _Gather=Module[\"_Gather\"]=function(){return(_Gather=Module[\"_Gather\"]=Module[\"asm\"][\"Gather\"]).apply(null,arguments)};var _GatherNd=Module[\"_GatherNd\"]=function(){return(_GatherNd=Module[\"_GatherNd\"]=Module[\"asm\"][\"GatherNd\"]).apply(null,arguments)};var _Greater=Module[\"_Greater\"]=function(){return(_Greater=Module[\"_Greater\"]=Module[\"asm\"][\"Greater\"]).apply(null,arguments)};var _GreaterEqual=Module[\"_GreaterEqual\"]=function(){return(_GreaterEqual=Module[\"_GreaterEqual\"]=Module[\"asm\"][\"GreaterEqual\"]).apply(null,arguments)};var _LeakyRelu=Module[\"_LeakyRelu\"]=function(){return(_LeakyRelu=Module[\"_LeakyRelu\"]=Module[\"asm\"][\"LeakyRelu\"]).apply(null,arguments)};var _Less=Module[\"_Less\"]=function(){return(_Less=Module[\"_Less\"]=Module[\"asm\"][\"Less\"]).apply(null,arguments)};var _LessEqual=Module[\"_LessEqual\"]=function(){return(_LessEqual=Module[\"_LessEqual\"]=Module[\"asm\"][\"LessEqual\"]).apply(null,arguments)};var _Log=Module[\"_Log\"]=function(){return(_Log=Module[\"_Log\"]=Module[\"asm\"][\"Log\"]).apply(null,arguments)};var _LogicalAnd=Module[\"_LogicalAnd\"]=function(){return(_LogicalAnd=Module[\"_LogicalAnd\"]=Module[\"asm\"][\"LogicalAnd\"]).apply(null,arguments)};var _Max=Module[\"_Max\"]=function(){return(_Max=Module[\"_Max\"]=Module[\"asm\"][\"Max\"]).apply(null,arguments)};var _MaxPool=Module[\"_MaxPool\"]=function(){return(_MaxPool=Module[\"_MaxPool\"]=Module[\"asm\"][\"MaxPool\"]).apply(null,arguments)};var _Maximum=Module[\"_Maximum\"]=function(){return(_Maximum=Module[\"_Maximum\"]=Module[\"asm\"][\"Maximum\"]).apply(null,arguments)};var _Mean=Module[\"_Mean\"]=function(){return(_Mean=Module[\"_Mean\"]=Module[\"asm\"][\"Mean\"]).apply(null,arguments)};var _Min=Module[\"_Min\"]=function(){return(_Min=Module[\"_Min\"]=Module[\"asm\"][\"Min\"]).apply(null,arguments)};var _Minimum=Module[\"_Minimum\"]=function(){return(_Minimum=Module[\"_Minimum\"]=Module[\"asm\"][\"Minimum\"]).apply(null,arguments)};var _Multiply=Module[\"_Multiply\"]=function(){return(_Multiply=Module[\"_Multiply\"]=Module[\"asm\"][\"Multiply\"]).apply(null,arguments)};var _Neg=Module[\"_Neg\"]=function(){return(_Neg=Module[\"_Neg\"]=Module[\"asm\"][\"Neg\"]).apply(null,arguments)};var _NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=function(){return(_NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=Module[\"asm\"][\"NonMaxSuppressionV3\"]).apply(null,arguments)};var _NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=function(){return(_NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=Module[\"asm\"][\"NonMaxSuppressionV4\"]).apply(null,arguments)};var _NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=function(){return(_NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=Module[\"asm\"][\"NonMaxSuppressionV5\"]).apply(null,arguments)};var _NotEqual=Module[\"_NotEqual\"]=function(){return(_NotEqual=Module[\"_NotEqual\"]=Module[\"asm\"][\"NotEqual\"]).apply(null,arguments)};var _OneHot=Module[\"_OneHot\"]=function(){return(_OneHot=Module[\"_OneHot\"]=Module[\"asm\"][\"OneHot\"]).apply(null,arguments)};var _PadV2=Module[\"_PadV2\"]=function(){return(_PadV2=Module[\"_PadV2\"]=Module[\"asm\"][\"PadV2\"]).apply(null,arguments)};var _Pow=Module[\"_Pow\"]=function(){return(_Pow=Module[\"_Pow\"]=Module[\"asm\"][\"Pow\"]).apply(null,arguments)};var _Prelu=Module[\"_Prelu\"]=function(){return(_Prelu=Module[\"_Prelu\"]=Module[\"asm\"][\"Prelu\"]).apply(null,arguments)};var _Prod=Module[\"_Prod\"]=function(){return(_Prod=Module[\"_Prod\"]=Module[\"asm\"][\"Prod\"]).apply(null,arguments)};var _RealDiv=Module[\"_RealDiv\"]=function(){return(_RealDiv=Module[\"_RealDiv\"]=Module[\"asm\"][\"RealDiv\"]).apply(null,arguments)};var _Relu=Module[\"_Relu\"]=function(){return(_Relu=Module[\"_Relu\"]=Module[\"asm\"][\"Relu\"]).apply(null,arguments)};var _Relu6=Module[\"_Relu6\"]=function(){return(_Relu6=Module[\"_Relu6\"]=Module[\"asm\"][\"Relu6\"]).apply(null,arguments)};var _ResizeBilinear=Module[\"_ResizeBilinear\"]=function(){return(_ResizeBilinear=Module[\"_ResizeBilinear\"]=Module[\"asm\"][\"ResizeBilinear\"]).apply(null,arguments)};var _Reverse=Module[\"_Reverse\"]=function(){return(_Reverse=Module[\"_Reverse\"]=Module[\"asm\"][\"Reverse\"]).apply(null,arguments)};var _RotateWithOffset=Module[\"_RotateWithOffset\"]=function(){return(_RotateWithOffset=Module[\"_RotateWithOffset\"]=Module[\"asm\"][\"RotateWithOffset\"]).apply(null,arguments)};var _Rsqrt=Module[\"_Rsqrt\"]=function(){return(_Rsqrt=Module[\"_Rsqrt\"]=Module[\"asm\"][\"Rsqrt\"]).apply(null,arguments)};var _ScatterNd=Module[\"_ScatterNd\"]=function(){return(_ScatterNd=Module[\"_ScatterNd\"]=Module[\"asm\"][\"ScatterNd\"]).apply(null,arguments)};var _SelectV2=Module[\"_SelectV2\"]=function(){return(_SelectV2=Module[\"_SelectV2\"]=Module[\"asm\"][\"SelectV2\"]).apply(null,arguments)};var _Sigmoid=Module[\"_Sigmoid\"]=function(){return(_Sigmoid=Module[\"_Sigmoid\"]=Module[\"asm\"][\"Sigmoid\"]).apply(null,arguments)};var _Sin=Module[\"_Sin\"]=function(){return(_Sin=Module[\"_Sin\"]=Module[\"asm\"][\"Sin\"]).apply(null,arguments)};var _Softmax=Module[\"_Softmax\"]=function(){return(_Softmax=Module[\"_Softmax\"]=Module[\"asm\"][\"Softmax\"]).apply(null,arguments)};var _Sqrt=Module[\"_Sqrt\"]=function(){return(_Sqrt=Module[\"_Sqrt\"]=Module[\"asm\"][\"Sqrt\"]).apply(null,arguments)};var _Square=Module[\"_Square\"]=function(){return(_Square=Module[\"_Square\"]=Module[\"asm\"][\"Square\"]).apply(null,arguments)};var _SquaredDifference=Module[\"_SquaredDifference\"]=function(){return(_SquaredDifference=Module[\"_SquaredDifference\"]=Module[\"asm\"][\"SquaredDifference\"]).apply(null,arguments)};var _StridedSlice=Module[\"_StridedSlice\"]=function(){return(_StridedSlice=Module[\"_StridedSlice\"]=Module[\"asm\"][\"StridedSlice\"]).apply(null,arguments)};var _Sub=Module[\"_Sub\"]=function(){return(_Sub=Module[\"_Sub\"]=Module[\"asm\"][\"Sub\"]).apply(null,arguments)};var _Sum=Module[\"_Sum\"]=function(){return(_Sum=Module[\"_Sum\"]=Module[\"asm\"][\"Sum\"]).apply(null,arguments)};var _Tanh=Module[\"_Tanh\"]=function(){return(_Tanh=Module[\"_Tanh\"]=Module[\"asm\"][\"Tanh\"]).apply(null,arguments)};var _Tile=Module[\"_Tile\"]=function(){return(_Tile=Module[\"_Tile\"]=Module[\"asm\"][\"Tile\"]).apply(null,arguments)};var _TopK=Module[\"_TopK\"]=function(){return(_TopK=Module[\"_TopK\"]=Module[\"asm\"][\"TopK\"]).apply(null,arguments)};var _Transpose=Module[\"_Transpose\"]=function(){return(_Transpose=Module[\"_Transpose\"]=Module[\"asm\"][\"Transpose\"]).apply(null,arguments)};var __FusedMatMul=Module[\"__FusedMatMul\"]=function(){return(__FusedMatMul=Module[\"__FusedMatMul\"]=Module[\"asm\"][\"_FusedMatMul\"]).apply(null,arguments)};var _malloc=Module[\"_malloc\"]=function(){return(_malloc=Module[\"_malloc\"]=Module[\"asm\"][\"malloc\"]).apply(null,arguments)};var _free=Module[\"_free\"]=function(){return(_free=Module[\"_free\"]=Module[\"asm\"][\"free\"]).apply(null,arguments)};var __start=Module[\"__start\"]=function(){return(__start=Module[\"__start\"]=Module[\"asm\"][\"_start\"]).apply(null,arguments)};var stackSave=Module[\"stackSave\"]=function(){return(stackSave=Module[\"stackSave\"]=Module[\"asm\"][\"stackSave\"]).apply(null,arguments)};var stackAlloc=Module[\"stackAlloc\"]=function(){return(stackAlloc=Module[\"stackAlloc\"]=Module[\"asm\"][\"stackAlloc\"]).apply(null,arguments)};var stackRestore=Module[\"stackRestore\"]=function(){return(stackRestore=Module[\"stackRestore\"]=Module[\"asm\"][\"stackRestore\"]).apply(null,arguments)};Module[\"asm\"]=asm;Module[\"cwrap\"]=cwrap;var calledRun;Module[\"then\"]=function(func){if(calledRun){func(Module)}else{var old=Module[\"onRuntimeInitialized\"];Module[\"onRuntimeInitialized\"]=function(){if(old)old();func(Module)}}return Module};function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module[\"__start\"];try{entryFunction();var ret=0;exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e==\"unwind\"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e===\"object\"&&e.stack){toLog=[e,e.stack]}err(\"exception thrown: \"+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();if(shouldRunNow)callMain(args);postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}Module[\"run\"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module[\"onExit\"])Module[\"onExit\"](status)}quit_(status,new ExitStatus(status))}if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}var shouldRunNow=true;if(Module[\"noInitialRun\"])shouldRunNow=false;noExitRuntime=true;run();\n\n\n return WasmBackendModule\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n module.exports = WasmBackendModule;\n else if (typeof define === 'function' && define['amd'])\n define([], function() { return WasmBackendModule; });\n else if (typeof exports === 'object')\n exports[\"WasmBackendModule\"] = WasmBackendModule;\n ", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "export const wasmWorkerContents = 'var threadInfoStruct=0;var selfThreadId=0;var parentThreadId=0;var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(\" \");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(\" \");postMessage({cmd:\"alert\",text:text,threadId:selfThreadId})}var err=threadPrintErr;this.alert=threadAlert;Module[\"instantiateWasm\"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module[\"wasmModule\"],info);Module[\"wasmModule\"]=null;receiveInstance(instance);return instance.exports};this.onmessage=function(e){try{if(e.data.cmd===\"load\"){Module[\"DYNAMIC_BASE\"]=e.data.DYNAMIC_BASE;Module[\"DYNAMICTOP_PTR\"]=e.data.DYNAMICTOP_PTR;Module[\"wasmModule\"]=e.data.wasmModule;Module[\"wasmMemory\"]=e.data.wasmMemory;Module[\"buffer\"]=Module[\"wasmMemory\"].buffer;Module[\"ENVIRONMENT_IS_PTHREAD\"]=true;if(typeof e.data.urlOrBlob===\"string\"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}Module=WasmBackendModuleThreadedSimd(Module);postMessage({\"cmd\":\"loaded\"})}else if(e.data.cmd===\"objectTransfer\"){Module[\"PThread\"].receiveObjectTransfer(e.data)}else if(e.data.cmd===\"run\"){Module[\"__performance_now_clock_drift\"]=performance.now()-e.data.time;threadInfoStruct=e.data.threadInfoStruct;Module[\"__register_pthread_ptr\"](threadInfoStruct,0,0);selfThreadId=e.data.selfThreadId;parentThreadId=e.data.parentThreadId;var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module[\"establishStackSpace\"](top,max);Module[\"_emscripten_tls_init\"]();Module[\"PThread\"].receiveObjectTransfer(e.data);Module[\"PThread\"].setThreadStatus(Module[\"_pthread_self\"](),1);try{var result=Module[\"dynCall_ii\"](e.data.start_routine,e.data.arg);if(!Module[\"getNoExitRuntime\"]())Module[\"PThread\"].threadExit(result)}catch(ex){if(ex===\"Canceled!\"){Module[\"PThread\"].threadCancel()}else if(ex!=\"unwind\"){Atomics.store(Module[\"HEAPU32\"],threadInfoStruct+4>>2,ex instanceof Module[\"ExitStatus\"]?ex.status:-2);Atomics.store(Module[\"HEAPU32\"],threadInfoStruct+0>>2,1);Module[\"_emscripten_futex_wake\"](threadInfoStruct+0,2147483647);if(!(ex instanceof Module[\"ExitStatus\"]))throw ex}}}else if(e.data.cmd===\"cancel\"){if(threadInfoStruct){Module[\"PThread\"].threadCancel()}}else if(e.data.target===\"setimmediate\"){}else if(e.data.cmd===\"processThreadQueue\"){if(threadInfoStruct){Module[\"_emscripten_current_thread_process_queued_calls\"]()}}else{err(\"worker.js received unknown command \"+e.data.cmd);err(e.data)}}catch(ex){err(\"worker.js onmessage() captured an uncaught exception: \"+ex);if(ex.stack)err(ex.stack);throw ex}};if(typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\"){self={location:{href:__filename}};var onmessage=this.onmessage;var nodeWorkerThreads=require(\"worker_threads\");Worker=nodeWorkerThreads.Worker;var parentPort=nodeWorkerThreads.parentPort;parentPort.on(\"message\",function(data){onmessage({data:data})});var nodeFS=require(\"fs\");var nodeRead=function(filename){return nodeFS.readFileSync(filename,\"utf8\")};function globalEval(x){global.require=require;global.Module=Module;eval.call(null,x)}importScripts=function(f){globalEval(nodeRead(f))};postMessage=function(msg){parentPort.postMessage(msg)};if(typeof performance===\"undefined\"){performance={now:function(){return Date.now()}}}}';", null, null, null, "export * from './drawContour';\nexport * from './drawDetections';\nexport * from './drawFaceExpressions';\nexport * from './DrawBox';\nexport * from './DrawFaceLandmarks';\nexport * from './DrawTextField';\n", "import { Point } from '../classes/index';\n\nexport function drawContour(\n ctx: CanvasRenderingContext2D,\n points: Point[],\n isClosed: boolean = false,\n) {\n ctx.beginPath();\n\n points.slice(1).forEach(({ x, y }, prevIdx) => {\n const from = points[prevIdx];\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(x, y);\n });\n\n if (isClosed) {\n const from = points[points.length - 1];\n const to = points[0];\n if (!from || !to) {\n return;\n }\n\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n }\n\n ctx.stroke();\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Point } from '../classes/index';\nimport { Dimensions, IDimensions } from '../classes/Dimensions';\n\nexport function isTensor(tensor: any, dim: number) {\n return tensor instanceof tf.Tensor && tensor.shape.length === dim;\n}\n\nexport function isTensor1D(tensor: any): tensor is tf.Tensor1D {\n return isTensor(tensor, 1);\n}\n\nexport function isTensor2D(tensor: any): tensor is tf.Tensor2D {\n return isTensor(tensor, 2);\n}\n\nexport function isTensor3D(tensor: any): tensor is tf.Tensor3D {\n return isTensor(tensor, 3);\n}\n\nexport function isTensor4D(tensor: any): tensor is tf.Tensor4D {\n return isTensor(tensor, 4);\n}\n\nexport function isFloat(num: number) {\n return num % 1 !== 0;\n}\n\nexport function isEven(num: number) {\n return num % 2 === 0;\n}\n\nexport function round(num: number, prec: number = 2) {\n const f = 10 ** prec;\n return Math.floor(num * f) / f;\n}\n\nexport function isDimensions(obj: any): boolean {\n return obj && obj.width && obj.height;\n}\n\nexport function computeReshapedDimensions({ width, height }: IDimensions, inputSize: number) {\n const scale = inputSize / Math.max(height, width);\n return new Dimensions(Math.round(width * scale), Math.round(height * scale));\n}\n\nexport function getCenterPoint(pts: Point[]): Point {\n return pts.reduce((sum, pt) => sum.add(pt), new Point(0, 0))\n .div(new Point(pts.length, pts.length));\n}\n\nexport function range(num: number, start: number, step: number): number[] {\n return Array(num).fill(0).map((_, i) => start + (i * step));\n}\n\nexport function isValidNumber(num: any) {\n // eslint-disable-next-line no-mixed-operators\n return !!num && (num !== Infinity) && (num !== -Infinity) && !Number.isNaN(num) || num === 0;\n}\n\nexport function isValidProbablitiy(num: any) {\n return isValidNumber(num) && num >= 0 && num <= 1.0;\n}\n", "import { isValidNumber } from '../utils/index';\n\nexport interface IDimensions {\n width: number\n height: number\n}\n\nexport class Dimensions implements IDimensions {\n private _width: number\n\n private _height: number\n\n constructor(width: number, height: number) {\n if (!isValidNumber(width) || !isValidNumber(height)) {\n throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({ width, height })}`);\n }\n\n this._width = width;\n this._height = height;\n }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public reverse(): Dimensions {\n return new Dimensions(1 / this.width, 1 / this.height);\n }\n}\n", "export interface IPoint {\n x: number\n y: number\n}\n\nexport class Point implements IPoint {\n private _x: number\n\n private _y: number\n\n constructor(x: number, y: number) {\n this._x = x;\n this._y = y;\n }\n\n get x(): number { return this._x; }\n\n get y(): number { return this._y; }\n\n public add(pt: IPoint): Point {\n return new Point(this.x + pt.x, this.y + pt.y);\n }\n\n public sub(pt: IPoint): Point {\n return new Point(this.x - pt.x, this.y - pt.y);\n }\n\n public mul(pt: IPoint): Point {\n return new Point(this.x * pt.x, this.y * pt.y);\n }\n\n public div(pt: IPoint): Point {\n return new Point(this.x / pt.x, this.y / pt.y);\n }\n\n public abs(): Point {\n return new Point(Math.abs(this.x), Math.abs(this.y));\n }\n\n public magnitude(): number {\n return Math.sqrt((this.x ** 2) + (this.y ** 2));\n }\n\n public floor(): Point {\n return new Point(Math.floor(this.x), Math.floor(this.y));\n }\n}\n", "import { isDimensions, isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { IDimensions } from './Dimensions';\nimport { Point } from './Point';\nimport { IRect } from './Rect';\n\nexport class Box implements IBoundingBox, IRect {\n public static isRect(rect: any): boolean {\n return !!rect && [rect.x, rect.y, rect.width, rect.height].every(isValidNumber);\n }\n\n public static assertIsValidBox(box: any, callee: string, allowNegativeDimensions: boolean = false) {\n if (!Box.isRect(box)) {\n throw new Error(`${callee} - invalid box: ${JSON.stringify(box)}, expected object with properties x, y, width, height`);\n }\n\n if (!allowNegativeDimensions && (box.width < 0 || box.height < 0)) {\n throw new Error(`${callee} - width (${box.width}) and height (${box.height}) must be positive numbers`);\n }\n }\n\n private _x: number\n\n private _y: number\n\n private _width: number\n\n private _height: number\n\n constructor(_box: IBoundingBox | IRect, allowNegativeDimensions: boolean = true) {\n const box = (_box || {}) as any;\n\n const isBbox = [box.left, box.top, box.right, box.bottom].every(isValidNumber);\n const isRect = [box.x, box.y, box.width, box.height].every(isValidNumber);\n\n if (!isRect && !isBbox) {\n throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(box)}`);\n }\n\n const [x, y, width, height] = isRect\n ? [box.x, box.y, box.width, box.height]\n : [box.left, box.top, box.right - box.left, box.bottom - box.top];\n\n Box.assertIsValidBox({\n x, y, width, height,\n }, 'Box.constructor', allowNegativeDimensions);\n\n this._x = x;\n this._y = y;\n this._width = width;\n this._height = height;\n }\n\n public get x(): number { return this._x; }\n\n public get y(): number { return this._y; }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public get left(): number { return this.x; }\n\n public get top(): number { return this.y; }\n\n public get right(): number { return this.x + this.width; }\n\n public get bottom(): number { return this.y + this.height; }\n\n public get area(): number { return this.width * this.height; }\n\n public get topLeft(): Point { return new Point(this.left, this.top); }\n\n public get topRight(): Point { return new Point(this.right, this.top); }\n\n public get bottomLeft(): Point { return new Point(this.left, this.bottom); }\n\n public get bottomRight(): Point { return new Point(this.right, this.bottom); }\n\n public round(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.round(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public floor(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.floor(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public toSquare(): Box {\n let {\n x, y, width, height,\n } = this;\n const diff = Math.abs(width - height);\n if (width < height) {\n x -= (diff / 2);\n width += diff;\n }\n if (height < width) {\n y -= (diff / 2);\n height += diff;\n }\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public rescale(s: IDimensions | number): Box {\n const scaleX = isDimensions(s) ? (s as IDimensions).width : s as number;\n const scaleY = isDimensions(s) ? (s as IDimensions).height : s as number;\n return new Box({\n x: this.x * scaleX,\n y: this.y * scaleY,\n width: this.width * scaleX,\n height: this.height * scaleY,\n });\n }\n\n public pad(padX: number, padY: number): Box {\n const [x, y, width, height] = [\n this.x - (padX / 2),\n this.y - (padY / 2),\n this.width + padX,\n this.height + padY,\n ];\n return new Box({\n x, y, width, height,\n });\n }\n\n public clipAtImageBorders(imgWidth: number, imgHeight: number): Box {\n const {\n x, y, right, bottom,\n } = this;\n const clippedX = Math.max(x, 0);\n const clippedY = Math.max(y, 0);\n\n const newWidth = right - clippedX;\n const newHeight = bottom - clippedY;\n const clippedWidth = Math.min(newWidth, imgWidth - clippedX);\n const clippedHeight = Math.min(newHeight, imgHeight - clippedY);\n\n return (new Box({\n x: clippedX, y: clippedY, width: clippedWidth, height: clippedHeight,\n })).floor();\n }\n\n public shift(sx: number, sy: number): Box {\n const { width, height } = this;\n const x = this.x + sx;\n const y = this.y + sy;\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public padAtBorders(imageHeight: number, imageWidth: number) {\n const w = this.width + 1;\n const h = this.height + 1;\n\n const dx = 1;\n const dy = 1;\n let edx = w;\n let edy = h;\n\n let x = this.left;\n let y = this.top;\n let ex = this.right;\n let ey = this.bottom;\n\n if (ex > imageWidth) {\n edx = -ex + imageWidth + w;\n ex = imageWidth;\n }\n if (ey > imageHeight) {\n edy = -ey + imageHeight + h;\n ey = imageHeight;\n }\n if (x < 1) {\n edy = 2 - x;\n x = 1;\n }\n if (y < 1) {\n edy = 2 - y;\n y = 1;\n }\n\n return {\n dy, edy, dx, edx, y, ey, x, ex, w, h,\n };\n }\n\n public calibrate(region: Box) {\n return new Box({\n left: this.left + (region.left * this.width),\n top: this.top + (region.top * this.height),\n right: this.right + (region.right * this.width),\n bottom: this.bottom + (region.bottom * this.height),\n }).toSquare().round();\n }\n}\n", "import { Box } from './Box';\n\nexport interface IBoundingBox {\n left: number\n top: number\n right: number\n bottom: number\n}\n\nexport class BoundingBox extends Box implements IBoundingBox {\n constructor(left: number, top: number, right: number, bottom: number, allowNegativeDimensions: boolean = false) {\n super({\n left, top, right, bottom,\n }, allowNegativeDimensions);\n }\n}\n", "import { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { IRect, Rect } from './Rect';\n\nexport class ObjectDetection {\n private _score: number\n\n private _classScore: number\n\n private _className: string\n\n private _box: Rect\n\n private _imageDims: Dimensions\n\n constructor(\n score: number,\n classScore: number,\n className: string,\n relativeBox: IRect,\n imageDims: IDimensions,\n ) {\n this._imageDims = new Dimensions(imageDims.width, imageDims.height);\n this._score = score;\n this._classScore = classScore;\n this._className = className;\n this._box = new Box(relativeBox).rescale(this._imageDims);\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n\n public get className(): string { return this._className; }\n\n public get box(): Box { return this._box; }\n\n public get imageDims(): Dimensions { return this._imageDims; }\n\n public get imageWidth(): number { return this.imageDims.width; }\n\n public get imageHeight(): number { return this.imageDims.height; }\n\n public get relativeBox(): Box { return new Box(this._box).rescale(this.imageDims.reverse()); }\n\n public forSize(width: number, height: number): ObjectDetection {\n return new ObjectDetection(\n this.score,\n this.classScore,\n this.className,\n this.relativeBox,\n { width, height },\n );\n }\n}\n", "import { Box } from './Box';\nimport { IDimensions } from './Dimensions';\nimport { ObjectDetection } from './ObjectDetection';\nimport { Rect } from './Rect';\n\nexport interface IFaceDetecion {\n score: number\n box: Box\n}\n\nexport class FaceDetection extends ObjectDetection implements IFaceDetecion {\n constructor(\n score: number,\n relativeBox: Rect,\n imageDims: IDimensions,\n ) {\n super(score, score, '', relativeBox, imageDims);\n }\n\n public forSize(width: number, height: number): FaceDetection {\n const { score, relativeBox, imageDims } = super.forSize(width, height);\n return new FaceDetection(score, relativeBox, imageDims);\n }\n}\n", "import { Box } from '../classes/Box';\n\nexport function iou(box1: Box, box2: Box, isIOU: boolean = true) {\n const width = Math.max(0.0, Math.min(box1.right, box2.right) - Math.max(box1.left, box2.left));\n const height = Math.max(0.0, Math.min(box1.bottom, box2.bottom) - Math.max(box1.top, box2.top));\n const interSection = width * height;\n\n return isIOU\n ? interSection / (box1.area + box2.area - interSection)\n : interSection / Math.min(box1.area, box2.area);\n}\n", "import { BoundingBox, IPoint } from '../classes/index';\n\nexport function minBbox(pts: IPoint[]): BoundingBox {\n const xs = pts.map((pt) => pt.x);\n const ys = pts.map((pt) => pt.y);\n const minX = xs.reduce((min, x) => (x < min ? x : min), Infinity);\n const minY = ys.reduce((min, y) => (y < min ? y : min), Infinity);\n const maxX = xs.reduce((max, x) => (max < x ? x : max), 0);\n const maxY = ys.reduce((max, y) => (max < y ? y : max), 0);\n\n return new BoundingBox(minX, minY, maxX, maxY);\n}\n", "import { Box } from '../classes/Box';\nimport { iou } from './iou';\n\nexport function nonMaxSuppression(\n boxes: Box[],\n scores: number[],\n iouThreshold: number,\n isIOU: boolean = true,\n): number[] {\n let indicesSortedByScore = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .sort((c1, c2) => c1.score - c2.score)\n .map((c) => c.boxIndex);\n\n const pick: number[] = [];\n\n while (indicesSortedByScore.length > 0) {\n const curr = indicesSortedByScore.pop() as number;\n pick.push(curr);\n\n const indices = indicesSortedByScore;\n\n const outputs: number[] = [];\n for (let i = 0; i < indices.length; i++) {\n const idx = indices[i];\n\n const currBox = boxes[curr];\n const idxBox = boxes[idx];\n\n outputs.push(iou(currBox, idxBox, isIOU));\n }\n\n indicesSortedByScore = indicesSortedByScore.filter(\n (_, j) => outputs[j] <= iouThreshold,\n );\n }\n\n return pick;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nexport function normalize(x: tf.Tensor4D, meanRgb: number[]): tf.Tensor4D {\n return tf.tidy(() => {\n const [r, g, b] = meanRgb;\n const avg_r = tf.fill([...x.shape.slice(0, 3), 1], r, 'float32');\n const avg_g = tf.fill([...x.shape.slice(0, 3), 1], g, 'float32');\n const avg_b = tf.fill([...x.shape.slice(0, 3), 1], b, 'float32');\n const avg_rgb = tf.concat([avg_r, avg_g, avg_b], 3);\n\n return tf.sub(x, avg_rgb);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\n/**\n * Pads the smaller dimension of an image tensor with zeros, such that width === height.\n *\n * @param imgTensor The image tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The padded tensor with width === height.\n */\nexport function padToSquare(\n imgTensor: tf.Tensor4D,\n isCenterImage: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const [height, width] = imgTensor.shape.slice(1);\n if (height === width) {\n return imgTensor;\n }\n\n const dimDiff = Math.abs(height - width);\n const paddingAmount = Math.round(dimDiff * (isCenterImage ? 0.5 : 1));\n const paddingAxis = height > width ? 2 : 1;\n\n const createPaddingTensor = (paddingAmountLocal: number): tf.Tensor => {\n const paddingTensorShape = imgTensor.shape.slice();\n paddingTensorShape[paddingAxis] = paddingAmountLocal;\n return tf.fill(paddingTensorShape, 0, 'float32');\n };\n\n const paddingTensorAppend = createPaddingTensor(paddingAmount);\n const remainingPaddingAmount = dimDiff - (paddingTensorAppend.shape[paddingAxis] as number);\n\n const paddingTensorPrepend = isCenterImage && remainingPaddingAmount\n ? createPaddingTensor(remainingPaddingAmount)\n : null;\n\n const tensorsToStack = [\n paddingTensorPrepend,\n imgTensor,\n paddingTensorAppend,\n ]\n .filter((t) => !!t)\n // .map((t: tf.Tensor) => t.toFloat()) as tf.Tensor4D[]\n .map((t: tf.Tensor) => tf.cast(t, 'float32')) as tf.Tensor4D[];\n return tf.concat(tensorsToStack, paddingAxis);\n });\n}\n", "export function shuffleArray(inputArray: any[]) {\n const array = inputArray.slice();\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const x = array[i];\n array[i] = array[j];\n array[j] = x;\n }\n return array;\n}\n", "export * from './iou';\nexport * from './minBbox';\nexport * from './nonMaxSuppression';\nexport * from './normalize';\nexport * from './padToSquare';\nexport * from './shuffleArray';\n\nexport function sigmoid(x: number) {\n return 1 / (1 + Math.exp(-x));\n}\n\nexport function inverseSigmoid(x: number) {\n return Math.log(x / (1 - x));\n}\n", "import { Box } from './Box';\n\nexport interface IRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport class Rect extends Box implements IRect {\n constructor(x: number, y: number, width: number, height: number, allowNegativeDimensions: boolean = false) {\n super({\n x, y, width, height,\n }, allowNegativeDimensions);\n }\n}\n", "import { minBbox } from '../ops/index';\nimport { getCenterPoint } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { FaceDetection } from './FaceDetection';\nimport { Point } from './Point';\nimport { IRect, Rect } from './Rect';\n\n// face alignment constants\nconst relX = 0.5;\nconst relY = 0.43;\nconst relScale = 0.45;\n\nexport interface IFaceLandmarks {\n positions: Point[]\n shift: Point\n}\n\nexport class FaceLandmarks implements IFaceLandmarks {\n protected _shift: Point\n\n protected _positions: Point[]\n\n protected _imgDims: Dimensions\n\n constructor(\n relativeFaceLandmarkPositions: Point[],\n imgDims: IDimensions,\n shift: Point = new Point(0, 0),\n ) {\n const { width, height } = imgDims;\n this._imgDims = new Dimensions(width, height);\n this._shift = shift;\n this._positions = relativeFaceLandmarkPositions.map(\n (pt) => pt.mul(new Point(width, height)).add(shift),\n );\n }\n\n public get shift(): Point { return new Point(this._shift.x, this._shift.y); }\n\n public get imageWidth(): number { return this._imgDims.width; }\n\n public get imageHeight(): number { return this._imgDims.height; }\n\n public get positions(): Point[] { return this._positions; }\n\n public get relativePositions(): Point[] {\n return this._positions.map(\n (pt) => pt.sub(this._shift).div(new Point(this.imageWidth, this.imageHeight)),\n );\n }\n\n public forSize(width: number, height: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n { width, height },\n );\n }\n\n public shiftBy(x: number, y: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n this._imgDims,\n new Point(x, y),\n );\n }\n\n public shiftByPoint(pt: Point): T {\n return this.shiftBy(pt.x, pt.y);\n }\n\n /**\n * Aligns the face landmarks after face detection from the relative positions of the faces\n * bounding box, or it's current shift. This function should be used to align the face images\n * after face detection has been performed, before they are passed to the face recognition net.\n * This will make the computed face descriptor more accurate.\n *\n * @param detection (optional) The bounding box of the face or the face detection result. If\n * no argument was passed the position of the face landmarks are assumed to be relative to\n * it's current shift.\n * @returns The bounding box of the aligned face.\n */\n public align(\n detection?: FaceDetection | IRect | IBoundingBox | null,\n options: { useDlibAlignment?: boolean, minBoxPadding?: number } = { },\n ): Box {\n if (detection) {\n const box = detection instanceof FaceDetection\n ? detection.box.floor()\n : new Box(detection);\n\n return this.shiftBy(box.x, box.y).align(null, options);\n }\n\n const { useDlibAlignment, minBoxPadding } = { useDlibAlignment: false, minBoxPadding: 0.2, ...options };\n\n if (useDlibAlignment) {\n return this.alignDlib();\n }\n\n return this.alignMinBbox(minBoxPadding);\n }\n\n private alignDlib(): Box {\n const centers = this.getRefPointsForAlignment();\n\n const [leftEyeCenter, rightEyeCenter, mouthCenter] = centers;\n const distToMouth = (pt: Point) => mouthCenter.sub(pt).magnitude();\n const eyeToMouthDist = (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2;\n\n const size = Math.floor(eyeToMouthDist / relScale);\n\n const refPoint = getCenterPoint(centers);\n // TODO: pad in case rectangle is out of image bounds\n const x = Math.floor(Math.max(0, refPoint.x - (relX * size)));\n const y = Math.floor(Math.max(0, refPoint.y - (relY * size)));\n\n return new Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y));\n }\n\n private alignMinBbox(padding: number): Box {\n const box = minBbox(this.positions);\n return box.pad(box.width * padding, box.height * padding);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n throw new Error('getRefPointsForAlignment not implemented by base class');\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks5 extends FaceLandmarks {\n protected getRefPointsForAlignment(): Point[] {\n const pts = this.positions;\n return [\n pts[0],\n pts[1],\n getCenterPoint([pts[3], pts[4]]),\n ];\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks68 extends FaceLandmarks {\n public getJawOutline(): Point[] {\n return this.positions.slice(0, 17);\n }\n\n public getLeftEyeBrow(): Point[] {\n return this.positions.slice(17, 22);\n }\n\n public getRightEyeBrow(): Point[] {\n return this.positions.slice(22, 27);\n }\n\n public getNose(): Point[] {\n return this.positions.slice(27, 36);\n }\n\n public getLeftEye(): Point[] {\n return this.positions.slice(36, 42);\n }\n\n public getRightEye(): Point[] {\n return this.positions.slice(42, 48);\n }\n\n public getMouth(): Point[] {\n return this.positions.slice(48, 68);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n return [\n this.getLeftEye(),\n this.getRightEye(),\n this.getMouth(),\n ].map(getCenterPoint);\n }\n}\n", "import { round } from '../utils/index';\n\nexport interface IFaceMatch {\n label: string\n distance: number\n}\n\nexport class FaceMatch implements IFaceMatch {\n private _label: string\n\n private _distance: number\n\n constructor(label: string, distance: number) {\n this._label = label;\n this._distance = distance;\n }\n\n public get label(): string { return this._label; }\n\n public get distance(): number { return this._distance; }\n\n public toString(withDistance: boolean = true): string {\n return `${this.label}${withDistance ? ` (${round(this.distance)})` : ''}`;\n }\n}\n", "import { isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { IRect } from './Rect';\n\nexport class LabeledBox extends Box {\n public static assertIsValidLabeledBox(box: any, callee: string) {\n Box.assertIsValidBox(box, callee);\n\n if (!isValidNumber(box.label)) {\n throw new Error(`${callee} - expected property label (${box.label}) to be a number`);\n }\n }\n\n private _label: number\n\n constructor(box: IBoundingBox | IRect | any, label: number) {\n super(box);\n this._label = label;\n }\n\n public get label(): number { return this._label; }\n}\n", "export class LabeledFaceDescriptors {\n private _label: string\n\n private _descriptors: Float32Array[]\n\n constructor(label: string, descriptors: Float32Array[]) {\n if (!(typeof label === 'string')) {\n throw new Error('LabeledFaceDescriptors - constructor expected label to be a string');\n }\n\n if (!Array.isArray(descriptors) || descriptors.some((desc) => !(desc instanceof Float32Array))) {\n throw new Error('LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array');\n }\n\n this._label = label;\n this._descriptors = descriptors;\n }\n\n public get label(): string { return this._label; }\n\n public get descriptors(): Float32Array[] { return this._descriptors; }\n\n public toJSON(): any {\n return {\n label: this.label,\n descriptors: this.descriptors.map((d) => Array.from(d)),\n };\n }\n\n public static fromJSON(json: any): LabeledFaceDescriptors {\n const descriptors = json.descriptors.map((d: any) => new Float32Array(d));\n return new LabeledFaceDescriptors(json.label, descriptors);\n }\n}\n", "import { isValidProbablitiy } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { LabeledBox } from './LabeledBox';\nimport { IRect } from './Rect';\n\nexport class PredictedBox extends LabeledBox {\n public static assertIsValidPredictedBox(box: any, callee: string) {\n LabeledBox.assertIsValidLabeledBox(box, callee);\n\n if (\n !isValidProbablitiy(box.score)\n || !isValidProbablitiy(box.classScore)\n ) {\n throw new Error(`${callee} - expected properties score (${box.score}) and (${box.classScore}) to be a number between [0, 1]`);\n }\n }\n\n private _score: number\n\n private _classScore: number\n\n constructor(box: IBoundingBox | IRect | any, label: number, score: number, classScore: number) {\n super(box, label);\n this._score = score;\n this._classScore = classScore;\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\n\nexport type WithFaceDetection = TSource & {\n detection: FaceDetection\n}\n\nexport function isWithFaceDetection(obj: any): obj is WithFaceDetection<{}> {\n return obj.detection instanceof FaceDetection;\n}\n\nexport function extendWithFaceDetection<\n TSource\n>(\n sourceObj: TSource,\n detection: FaceDetection,\n): WithFaceDetection {\n const extension = { detection };\n return { ...sourceObj, ...extension };\n}\n", "import { Environment } from './types';\n\nexport function createBrowserEnv(): Environment {\n const fetch = window.fetch;\n if (!fetch) throw new Error('fetch - missing fetch implementation for browser environment');\n\n const readFile = () => {\n throw new Error('readFile - filesystem not available for browser environment');\n };\n\n return {\n Canvas: HTMLCanvasElement,\n CanvasRenderingContext2D,\n Image: HTMLImageElement,\n ImageData,\n Video: HTMLVideoElement,\n createCanvasElement: () => document.createElement('canvas'),\n createImageElement: () => document.createElement('img'),\n fetch,\n readFile,\n };\n}\n", "import { FileSystem } from './types';\n\nexport function createFileSystem(fs?: any): FileSystem {\n let requireFsError = '';\n\n if (!fs) {\n try {\n // eslint-disable-next-line global-require\n fs = require('fs');\n } catch (err) {\n requireFsError = err.toString();\n }\n }\n\n const readFile = fs\n ? (filePath: string) => new Promise((resolve, reject) => {\n fs.readFile(filePath, (err: any, buffer: Buffer) => (err ? reject(err) : resolve(buffer)));\n })\n : () => {\n throw new Error(`readFile - failed to require fs in nodejs environment with error: ${requireFsError}`);\n };\n\n return {\n readFile,\n };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { createFileSystem } from './createFileSystem';\nimport { Environment } from './types';\n\nexport function createNodejsEnv(): Environment {\n // eslint-disable-next-line dot-notation\n const Canvas = global['Canvas'] || global.HTMLCanvasElement;\n const Image = global.Image || global.HTMLImageElement;\n\n const createCanvasElement = () => {\n if (Canvas) return new Canvas();\n throw new Error('createCanvasElement - missing Canvas implementation for nodejs environment');\n };\n\n const createImageElement = () => {\n if (Image) return new Image();\n throw new Error('createImageElement - missing Image implementation for nodejs environment');\n };\n\n const fetch = global.fetch;\n // if (!fetch) throw new Error('fetch - missing fetch implementation for nodejs environment');\n\n const fileSystem = createFileSystem();\n\n return {\n Canvas: Canvas || class {},\n CanvasRenderingContext2D: global.CanvasRenderingContext2D || class {},\n Image: Image || class {},\n ImageData: global.ImageData || class {},\n Video: global.HTMLVideoElement || class {},\n createCanvasElement,\n createImageElement,\n fetch,\n ...fileSystem,\n };\n}\n", "export function isBrowser(): boolean {\n return typeof window === 'object'\n && typeof document !== 'undefined'\n && typeof HTMLImageElement !== 'undefined'\n && typeof HTMLCanvasElement !== 'undefined'\n && typeof HTMLVideoElement !== 'undefined'\n && typeof ImageData !== 'undefined'\n && typeof CanvasRenderingContext2D !== 'undefined';\n}\n", "import { createBrowserEnv } from './createBrowserEnv';\nimport { createFileSystem } from './createFileSystem';\nimport { createNodejsEnv } from './createNodejsEnv';\nimport { isBrowser } from './isBrowser';\nimport { isNodejs } from './isNodejs';\nimport { Environment } from './types';\n\nlet environment: Environment | null;\n\nfunction getEnv(): Environment {\n if (!environment) {\n throw new Error('getEnv - environment is not defined, check isNodejs() and isBrowser()');\n }\n return environment;\n}\n\nfunction setEnv(env: Environment) {\n environment = env;\n}\n\nfunction initialize() {\n // check for isBrowser() first to prevent electron renderer process\n // to be initialized with wrong environment due to isNodejs() returning true\n if (isBrowser()) return setEnv(createBrowserEnv());\n if (isNodejs()) return setEnv(createNodejsEnv());\n return null;\n}\n\nfunction monkeyPatch(env: Partial) {\n if (!environment) {\n initialize();\n }\n\n if (!environment) {\n throw new Error('monkeyPatch - environment is not defined, check isNodejs() and isBrowser()');\n }\n\n const { Canvas = environment.Canvas, Image = environment.Image } = env;\n environment.Canvas = Canvas;\n environment.Image = Image;\n environment.createCanvasElement = env.createCanvasElement || (() => new Canvas());\n environment.createImageElement = env.createImageElement || (() => new Image());\n\n environment.ImageData = env.ImageData || environment.ImageData;\n environment.Video = env.Video || environment.Video;\n environment.fetch = env.fetch || environment.fetch;\n environment.readFile = env.readFile || environment.readFile;\n}\n\nexport const env = {\n getEnv,\n setEnv,\n initialize,\n createBrowserEnv,\n createFileSystem,\n createNodejsEnv,\n monkeyPatch,\n isBrowser,\n isNodejs,\n};\n\ninitialize();\n\nexport * from './types';\n", "import { env } from '../env/index';\n\nexport function resolveInput(arg: string | any) {\n if (!env.isNodejs() && typeof arg === 'string') {\n return document.getElementById(arg);\n }\n return arg;\n}\n", "import { env } from '../env/index';\nimport { resolveInput } from './resolveInput';\n\nexport function getContext2dOrThrow(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D): CanvasRenderingContext2D {\n const { Canvas, CanvasRenderingContext2D } = env.getEnv();\n\n if (canvasArg instanceof CanvasRenderingContext2D) {\n return canvasArg;\n }\n\n const canvas = resolveInput(canvasArg);\n\n if (!(canvas instanceof Canvas)) {\n throw new Error('resolveContext2d - expected canvas to be of instance of Canvas');\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('resolveContext2d - canvas 2d context is null');\n }\n\n return ctx;\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IDimensions, IPoint } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { resolveInput } from '../dom/resolveInput';\n\n// eslint-disable-next-line no-shadow\nexport enum AnchorPosition {\n // eslint-disable-next-line no-unused-vars\n TOP_LEFT = 'TOP_LEFT',\n // eslint-disable-next-line no-unused-vars\n TOP_RIGHT = 'TOP_RIGHT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_LEFT = 'BOTTOM_LEFT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_RIGHT = 'BOTTOM_RIGHT'\n}\n\nexport interface IDrawTextFieldOptions {\n anchorPosition?: AnchorPosition\n backgroundColor?: string\n fontColor?: string\n fontSize?: number\n fontStyle?: string\n padding?: number\n}\n\nexport class DrawTextFieldOptions implements IDrawTextFieldOptions {\n public anchorPosition: AnchorPosition\n\n public backgroundColor: string\n\n public fontColor: string\n\n public fontSize: number\n\n public fontStyle: string\n\n public padding: number\n\n constructor(options: IDrawTextFieldOptions = {}) {\n const {\n anchorPosition, backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = options;\n this.anchorPosition = anchorPosition || AnchorPosition.TOP_LEFT;\n this.backgroundColor = backgroundColor || 'rgba(0, 0, 0, 0.5)';\n this.fontColor = fontColor || 'rgba(255, 255, 255, 1)';\n this.fontSize = fontSize || 14;\n this.fontStyle = fontStyle || 'Georgia';\n this.padding = padding || 4;\n }\n}\n\nexport class DrawTextField {\n public text: string[]\n\n public anchor : IPoint\n\n public options: DrawTextFieldOptions\n\n constructor(\n text: string | string[] | DrawTextField,\n anchor: IPoint,\n options: IDrawTextFieldOptions = {},\n ) {\n // eslint-disable-next-line no-nested-ternary\n this.text = typeof text === 'string'\n ? [text]\n : (text instanceof DrawTextField ? text.text : text);\n this.anchor = anchor;\n this.options = new DrawTextFieldOptions(options);\n }\n\n measureWidth(ctx: CanvasRenderingContext2D): number {\n const { padding } = this.options;\n return this.text.map((l) => ctx.measureText(l).width).reduce((w0, w1) => (w0 < w1 ? w1 : w0), 0) + (2 * padding);\n }\n\n measureHeight(): number {\n const { fontSize, padding } = this.options;\n return this.text.length * fontSize + (2 * padding);\n }\n\n getUpperLeft(ctx: CanvasRenderingContext2D, canvasDims?: IDimensions): IPoint {\n const { anchorPosition } = this.options;\n const isShiftLeft = anchorPosition === AnchorPosition.BOTTOM_RIGHT || anchorPosition === AnchorPosition.TOP_RIGHT;\n const isShiftTop = anchorPosition === AnchorPosition.BOTTOM_LEFT || anchorPosition === AnchorPosition.BOTTOM_RIGHT;\n\n const textFieldWidth = this.measureWidth(ctx);\n const textFieldHeight = this.measureHeight();\n const x = (isShiftLeft ? this.anchor.x - textFieldWidth : this.anchor.x);\n const y = isShiftTop ? this.anchor.y - textFieldHeight : this.anchor.y;\n\n // adjust anchor if text box exceeds canvas borders\n if (canvasDims) {\n const { width, height } = canvasDims;\n const newX = Math.max(Math.min(x, width - textFieldWidth), 0);\n const newY = Math.max(Math.min(y, height - textFieldHeight), 0);\n return { x: newX, y: newY };\n }\n return { x, y };\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const canvas = resolveInput(canvasArg);\n const ctx = getContext2dOrThrow(canvas);\n\n const {\n backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = this.options;\n\n ctx.font = `${fontSize}px ${fontStyle}`;\n const maxTextWidth = this.measureWidth(ctx);\n const textHeight = this.measureHeight();\n\n ctx.fillStyle = backgroundColor;\n const upperLeft = this.getUpperLeft(ctx, canvas);\n ctx.fillRect(upperLeft.x, upperLeft.y, maxTextWidth, textHeight);\n\n ctx.fillStyle = fontColor;\n this.text.forEach((textLine, i) => {\n const x = padding + upperLeft.x;\n const y = padding + upperLeft.y + ((i + 1) * fontSize);\n ctx.fillText(textLine, x, y);\n });\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { Box, IBoundingBox, IRect } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport {\n AnchorPosition, DrawTextField, DrawTextFieldOptions, IDrawTextFieldOptions,\n} from './DrawTextField';\n\nexport interface IDrawBoxOptions {\n boxColor?: string\n lineWidth?: number\n drawLabelOptions?: IDrawTextFieldOptions\n label?: string\n}\n\nexport class DrawBoxOptions {\n public boxColor: string\n\n public lineWidth: number\n\n public drawLabelOptions: DrawTextFieldOptions\n\n public label?: string\n\n constructor(options: IDrawBoxOptions = {}) {\n const {\n boxColor, lineWidth, label, drawLabelOptions,\n } = options;\n this.boxColor = boxColor || 'rgba(0, 0, 255, 1)';\n this.lineWidth = lineWidth || 2;\n this.label = label;\n\n const defaultDrawLabelOptions = {\n anchorPosition: AnchorPosition.BOTTOM_LEFT,\n backgroundColor: this.boxColor,\n };\n this.drawLabelOptions = new DrawTextFieldOptions({ ...defaultDrawLabelOptions, ...drawLabelOptions });\n }\n}\n\nexport class DrawBox {\n public box: Box\n\n public options: DrawBoxOptions\n\n constructor(\n box: IBoundingBox | IRect,\n options: IDrawBoxOptions = {},\n ) {\n this.box = new Box(box);\n this.options = new DrawBoxOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const { boxColor, lineWidth } = this.options;\n\n const {\n x, y, width, height,\n } = this.box;\n ctx.strokeStyle = boxColor;\n ctx.lineWidth = lineWidth;\n ctx.strokeRect(x, y, width, height);\n\n const { label } = this.options;\n if (label) {\n new DrawTextField([label], { x: x - (lineWidth / 2), y }, this.options.drawLabelOptions).draw(canvasArg);\n }\n }\n}\n", "import { Box, IBoundingBox, IRect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { round } from '../utils/index';\nimport { DrawBox } from './DrawBox';\n\nexport type TDrawDetectionsInput = IRect | IBoundingBox | FaceDetection | WithFaceDetection<{}>\n\nexport function drawDetections(\n canvasArg: string | HTMLCanvasElement,\n detections: TDrawDetectionsInput | Array,\n) {\n const detectionsArray = Array.isArray(detections) ? detections : [detections];\n\n detectionsArray.forEach((det) => {\n // eslint-disable-next-line no-nested-ternary\n const score = det instanceof FaceDetection\n ? det.score\n : (isWithFaceDetection(det) ? det.detection.score : undefined);\n\n // eslint-disable-next-line no-nested-ternary\n const box = det instanceof FaceDetection\n ? det.box\n : (isWithFaceDetection(det) ? det.detection.box : new Box(det));\n\n const label = score ? `${round(score)}` : undefined;\n new DrawBox(box, { label }).draw(canvasArg);\n });\n}\n", "import { env } from '../env/index';\n\nexport function isMediaLoaded(media: HTMLImageElement | HTMLVideoElement) : boolean {\n const { Image, Video } = env.getEnv();\n\n return (media instanceof Image && media.complete)\n || (media instanceof Video && media.readyState >= 3);\n}\n", "import { env } from '../env/index';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function awaitMediaLoaded(media: HTMLImageElement | HTMLVideoElement | HTMLCanvasElement) {\n // eslint-disable-next-line consistent-return\n return new Promise((resolve, reject) => {\n if (media instanceof env.getEnv().Canvas || isMediaLoaded(media)) {\n return resolve(null);\n }\n\n function onError(e: Event) {\n if (!e.currentTarget) return;\n // eslint-disable-next-line no-use-before-define\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n reject(e);\n }\n\n function onLoad(e: Event) {\n if (!e.currentTarget) return;\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n resolve(e);\n }\n\n media.addEventListener('load', onLoad);\n media.addEventListener('error', onError);\n });\n}\n", "import { env } from '../env/index';\n\nexport function bufferToImage(buf: Blob): Promise {\n return new Promise((resolve, reject) => {\n if (!(buf instanceof Blob)) reject(new Error('bufferToImage - expected buf to be of type: Blob'));\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result !== 'string') reject(new Error('bufferToImage - expected reader.result to be a string, in onload'));\n const img = env.getEnv().createImageElement();\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = reader.result as string;\n };\n reader.onerror = reject;\n reader.readAsDataURL(buf);\n });\n}\n", "import { Dimensions, IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\n\nexport function getMediaDimensions(input: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | IDimensions): Dimensions {\n const { Image, Video } = env.getEnv();\n\n if (input instanceof Image) {\n return new Dimensions(input.naturalWidth, input.naturalHeight);\n }\n if (input instanceof Video) {\n return new Dimensions(input.videoWidth, input.videoHeight);\n }\n return new Dimensions(input.width, input.height);\n}\n", "import { IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function createCanvas({ width, height }: IDimensions): HTMLCanvasElement {\n const { createCanvasElement } = env.getEnv();\n const canvas = createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n\nexport function createCanvasFromMedia(media: HTMLImageElement | HTMLVideoElement | ImageData, dims?: IDimensions): HTMLCanvasElement {\n const { ImageData } = env.getEnv();\n\n if (!(media instanceof ImageData) && !isMediaLoaded(media)) {\n throw new Error('createCanvasFromMedia - media has not finished loading yet');\n }\n\n const { width, height } = dims || getMediaDimensions(media);\n const canvas = createCanvas({ width, height });\n\n if (media instanceof ImageData) {\n getContext2dOrThrow(canvas).putImageData(media, 0, 0);\n } else {\n getContext2dOrThrow(canvas).drawImage(media, 0, 0, width, height);\n }\n return canvas;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { env } from '../env/index';\nimport { isTensor4D } from '../utils/index';\n\nexport async function imageTensorToCanvas(\n imgTensor: tf.Tensor,\n canvas?: HTMLCanvasElement,\n): Promise {\n const targetCanvas = canvas || env.getEnv().createCanvasElement();\n\n const [height, width, numChannels] = imgTensor.shape.slice(isTensor4D(imgTensor) ? 1 : 0);\n const imgTensor3D = tf.tidy(() => imgTensor.as3D(height, width, numChannels).toInt());\n await tf.browser.toPixels(imgTensor3D, targetCanvas);\n\n imgTensor3D.dispose();\n\n return targetCanvas;\n}\n", "import { env } from '../env/index';\n\nexport function isMediaElement(input: any) {\n const { Image, Canvas, Video } = env.getEnv();\n\n return input instanceof Image\n || input instanceof Canvas\n || input instanceof Video;\n}\n", "import { env } from '../env/index';\nimport { createCanvas, createCanvasFromMedia } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function imageToSquare(input: HTMLImageElement | HTMLCanvasElement, inputSize: number, centerImage: boolean = false) {\n const { Image, Canvas } = env.getEnv();\n\n if (!(input instanceof Image || input instanceof Canvas)) {\n throw new Error('imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement');\n }\n\n const dims = getMediaDimensions(input);\n const scale = inputSize / Math.max(dims.height, dims.width);\n const width = scale * dims.width;\n const height = scale * dims.height;\n\n const targetCanvas = createCanvas({ width: inputSize, height: inputSize });\n const inputCanvas = input instanceof Canvas ? input : createCanvasFromMedia(input);\n\n const offset = Math.abs(width - height) / 2;\n const dx = centerImage && width < height ? offset : 0;\n const dy = centerImage && height < width ? offset : 0;\n getContext2dOrThrow(targetCanvas).drawImage(inputCanvas, dx, dy, width, height);\n\n return targetCanvas;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Dimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { padToSquare } from '../ops/padToSquare';\nimport {\n computeReshapedDimensions, isTensor3D, isTensor4D, range,\n} from '../utils/index';\nimport { createCanvasFromMedia } from './createCanvas';\nimport { imageToSquare } from './imageToSquare';\nimport { TResolvedNetInput } from './types';\n\nexport class NetInput {\n private _imageTensors: Array = []\n\n private _canvases: HTMLCanvasElement[] = []\n\n private _batchSize: number\n\n private _treatAsBatchInput: boolean = false\n\n private _inputDimensions: number[][] = []\n\n private _inputSize: number\n\n constructor(\n inputs: Array,\n treatAsBatchInput: boolean = false,\n ) {\n if (!Array.isArray(inputs)) {\n throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${inputs}`);\n }\n\n this._treatAsBatchInput = treatAsBatchInput;\n this._batchSize = inputs.length;\n\n inputs.forEach((input, idx) => {\n if (isTensor3D(input)) {\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = input.shape;\n return;\n }\n\n if (isTensor4D(input)) {\n const batchSize = (input as any).shape[0];\n if (batchSize !== 1) {\n throw new Error(`NetInput - tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = (input as any).shape.slice(1);\n return;\n }\n\n const canvas = (input as any) instanceof env.getEnv().Canvas ? input : createCanvasFromMedia(input);\n this._canvases[idx] = canvas;\n this._inputDimensions[idx] = [canvas.height, canvas.width, 3];\n });\n }\n\n public get imageTensors(): Array {\n return this._imageTensors;\n }\n\n public get canvases(): HTMLCanvasElement[] {\n return this._canvases;\n }\n\n public get isBatchInput(): boolean {\n return this.batchSize > 1 || this._treatAsBatchInput;\n }\n\n public get batchSize(): number {\n return this._batchSize;\n }\n\n public get inputDimensions(): number[][] {\n return this._inputDimensions;\n }\n\n public get inputSize(): number | undefined {\n return this._inputSize;\n }\n\n public get reshapedInputDimensions(): Dimensions[] {\n return range(this.batchSize, 0, 1).map(\n (_, batchIdx) => this.getReshapedInputDimensions(batchIdx),\n );\n }\n\n public getInput(batchIdx: number): tf.Tensor3D | tf.Tensor4D | HTMLCanvasElement {\n return this.canvases[batchIdx] || this.imageTensors[batchIdx];\n }\n\n public getInputDimensions(batchIdx: number): number[] {\n return this._inputDimensions[batchIdx];\n }\n\n public getInputHeight(batchIdx: number): number {\n return this._inputDimensions[batchIdx][0];\n }\n\n public getInputWidth(batchIdx: number): number {\n return this._inputDimensions[batchIdx][1];\n }\n\n public getReshapedInputDimensions(batchIdx: number): Dimensions {\n if (typeof this.inputSize !== 'number') {\n throw new Error('getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet');\n }\n\n const width = this.getInputWidth(batchIdx);\n const height = this.getInputHeight(batchIdx);\n return computeReshapedDimensions({ width, height }, this.inputSize);\n }\n\n /**\n * Create a batch tensor from all input canvases and tensors\n * with size [batchSize, inputSize, inputSize, 3].\n *\n * @param inputSize Height and width of the tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The batch tensor.\n */\n public toBatchTensor(inputSize: number, isCenterInputs: boolean = true): tf.Tensor4D {\n this._inputSize = inputSize;\n\n return tf.tidy(() => {\n const inputTensors = range(this.batchSize, 0, 1).map((batchIdx) => {\n const input = this.getInput(batchIdx);\n\n if (input instanceof tf.Tensor) {\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n let imgTensor = isTensor4D(input) ? input : input.expandDims();\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n imgTensor = padToSquare(imgTensor, isCenterInputs);\n\n if (imgTensor.shape[1] !== inputSize || imgTensor.shape[2] !== inputSize) {\n imgTensor = tf.image.resizeBilinear(imgTensor, [inputSize, inputSize]);\n }\n\n return imgTensor.as3D(inputSize, inputSize, 3);\n }\n\n if (input instanceof env.getEnv().Canvas) {\n return tf.browser.fromPixels(imageToSquare(input, inputSize, isCenterInputs));\n }\n\n throw new Error(`toBatchTensor - at batchIdx ${batchIdx}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${input}`);\n });\n\n // const batchTensor = tf.stack(inputTensors.map(t => t.toFloat())).as4D(this.batchSize, inputSize, inputSize, 3)\n const batchTensor = tf.stack(inputTensors.map((t) => tf.cast(t, 'float32'))).as4D(this.batchSize, inputSize, inputSize, 3);\n // const batchTensor = tf.stack(inputTensors.map(t => tf.Tensor.as4D(tf.cast(t, 'float32'))), this.batchSize, inputSize, inputSize, 3);\n\n return batchTensor;\n });\n }\n}\n", "import { isTensor3D, isTensor4D } from '../utils/index';\nimport { awaitMediaLoaded } from './awaitMediaLoaded';\nimport { isMediaElement } from './isMediaElement';\nimport { NetInput } from './NetInput';\nimport { resolveInput } from './resolveInput';\nimport { TNetInput } from './types';\n\n/**\n * Validates the input to make sure, they are valid net inputs and awaits all media elements\n * to be finished loading.\n *\n * @param input The input, which can be a media element or an array of different media elements.\n * @returns A NetInput instance, which can be passed into one of the neural networks.\n */\nexport async function toNetInput(inputs: TNetInput): Promise {\n if (inputs instanceof NetInput) {\n return inputs;\n }\n\n const inputArgArray = Array.isArray(inputs)\n ? inputs\n : [inputs];\n\n if (!inputArgArray.length) {\n throw new Error('toNetInput - empty array passed as input');\n }\n\n const getIdxHint = (idx: number) => (Array.isArray(inputs) ? ` at input index ${idx}:` : '');\n\n const inputArray = inputArgArray.map(resolveInput);\n\n inputArray.forEach((input, i) => {\n if (!isMediaElement(input) && !isTensor3D(input) && !isTensor4D(input)) {\n if (typeof inputArgArray[i] === 'string') {\n throw new Error(`toNetInput -${getIdxHint(i)} string passed, but could not resolve HTMLElement for element id ${inputArgArray[i]}`);\n }\n\n throw new Error(`toNetInput -${getIdxHint(i)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);\n }\n\n if (isTensor4D(input)) {\n // if tf.Tensor4D is passed in the input array, the batch size has to be 1\n const batchSize = input.shape[0];\n if (batchSize !== 1) {\n throw new Error(`toNetInput -${getIdxHint(i)} tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n }\n });\n\n // wait for all media elements being loaded\n await Promise.all(\n inputArray.map((input) => isMediaElement(input) && awaitMediaLoaded(input)),\n );\n\n return new NetInput(inputArray, Array.isArray(inputs));\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { Rect } from '../classes/Rect';\nimport { env } from '../env/index';\nimport { createCanvas } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { imageTensorToCanvas } from './imageTensorToCanvas';\nimport { toNetInput } from './toNetInput';\nimport { TNetInput } from './types';\n\n/**\n * Extracts the image regions containing the detected faces.\n *\n * @param input The image that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns The Canvases of the corresponding image region for each detected face.\n */\nexport async function extractFaces(\n input: TNetInput,\n detections: Array,\n): Promise {\n const { Canvas } = env.getEnv();\n\n let canvas = input as HTMLCanvasElement;\n\n if (!(input instanceof Canvas)) {\n const netInput = await toNetInput(input);\n\n if (netInput.batchSize > 1) {\n throw new Error('extractFaces - batchSize > 1 not supported');\n }\n\n const tensorOrCanvas = netInput.getInput(0);\n canvas = tensorOrCanvas instanceof Canvas\n ? tensorOrCanvas\n : await imageTensorToCanvas(tensorOrCanvas);\n }\n\n const ctx = getContext2dOrThrow(canvas);\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(canvas.width, canvas.height).box.floor()\n : det),\n )\n .map((box) => box.clipAtImageBorders(canvas.width, canvas.height));\n\n return boxes.map(({\n x, y, width, height,\n }) => {\n const faceImg = createCanvas({ width, height });\n getContext2dOrThrow(faceImg)\n .putImageData(ctx.getImageData(x, y, width, height), 0, 0);\n return faceImg;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isTensor3D, isTensor4D } from '../utils/index';\n\n/**\n * Extracts the tensors of the image regions containing the detected faces.\n * Useful if you want to compute the face descriptors for the face images.\n * Using this method is faster then extracting a canvas for each face and\n * converting them to tensors individually.\n *\n * @param imageTensor The image tensor that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns Tensors of the corresponding image region for each detected face.\n */\nexport async function extractFaceTensors(\n imageTensor: tf.Tensor3D | tf.Tensor4D,\n detections: Array,\n): Promise {\n if (!isTensor3D(imageTensor) && !isTensor4D(imageTensor)) {\n throw new Error('extractFaceTensors - expected image tensor to be 3D or 4D');\n }\n\n if (isTensor4D(imageTensor) && imageTensor.shape[0] > 1) {\n throw new Error('extractFaceTensors - batchSize > 1 not supported');\n }\n\n return tf.tidy(() => {\n const [imgHeight, imgWidth, numChannels] = imageTensor.shape.slice(isTensor4D(imageTensor) ? 1 : 0);\n\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(imgWidth, imgHeight).box\n : det),\n )\n .map((box) => box.clipAtImageBorders(imgWidth, imgHeight));\n\n const faceTensors = boxes.map(({\n x, y, width, height,\n }) => tf.slice3d(imageTensor.as3D(imgHeight, imgWidth, numChannels), [y, x, 0], [height, width, numChannels]));\n\n return faceTensors;\n });\n}\n", "import { env } from '../env/index';\n\nexport async function fetchOrThrow(\n url: string,\n // eslint-disable-next-line no-undef\n init?: RequestInit,\n): Promise {\n const { fetch } = env.getEnv();\n const res = await fetch(url, init);\n if (!(res.status < 400)) {\n throw new Error(`failed to fetch: (${res.status}) ${res.statusText}, from url: ${res.url}`);\n }\n return res;\n}\n", "import { bufferToImage } from './bufferToImage';\nimport { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchImage(uri: string): Promise {\n const res = await fetchOrThrow(uri);\n const blob = await (res).blob();\n\n if (!blob.type.startsWith('image/')) {\n throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${blob.type}, for url: ${res.url}`);\n }\n return bufferToImage(blob);\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchJson(uri: string): Promise {\n return (await fetchOrThrow(uri)).json();\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchNetWeights(uri: string): Promise {\n return new Float32Array(await (await fetchOrThrow(uri)).arrayBuffer());\n}\n", "export function getModelUris(uri: string | undefined, defaultModelName: string) {\n const defaultManifestFilename = `${defaultModelName}-weights_manifest.json`;\n\n if (!uri) {\n return {\n modelBaseUri: '',\n manifestUri: defaultManifestFilename,\n };\n }\n\n if (uri === '/') {\n return {\n modelBaseUri: '/',\n manifestUri: `/${defaultManifestFilename}`,\n };\n }\n // eslint-disable-next-line no-nested-ternary\n const protocol = uri.startsWith('http://') ? 'http://' : uri.startsWith('https://') ? 'https://' : '';\n uri = uri.replace(protocol, '');\n\n const parts = uri.split('/').filter((s) => s);\n\n const manifestFile = uri.endsWith('.json')\n ? parts[parts.length - 1]\n : defaultManifestFilename;\n\n let modelBaseUri = protocol + (uri.endsWith('.json') ? parts.slice(0, parts.length - 1) : parts).join('/');\n modelBaseUri = uri.startsWith('/') ? `/${modelBaseUri}` : modelBaseUri;\n\n return {\n modelBaseUri,\n manifestUri: modelBaseUri === '/' ? `/${manifestFile}` : `${modelBaseUri}/${manifestFile}`,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { getModelUris } from '../common/getModelUris';\nimport { fetchJson } from './fetchJson';\n\nexport async function loadWeightMap(\n uri: string | undefined,\n defaultModelName: string,\n): Promise {\n const { manifestUri, modelBaseUri } = getModelUris(uri, defaultModelName);\n const manifest = await fetchJson(manifestUri);\n // if (manifest['weightsManifest']) manifest = manifest['weightsManifest'];\n return tf.io.loadWeights(manifest, modelBaseUri);\n}\n", "import { IDimensions } from '../classes/index';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function matchDimensions(input: IDimensions, reference: IDimensions, useMediaDimensions: boolean = false) {\n const { width, height } = useMediaDimensions\n ? getMediaDimensions(reference)\n : reference;\n input.width = width;\n input.height = height;\n return { width, height };\n}\n", "import * as tf from '../dist/tfjs.esm';\n\nimport { ParamMapping } from './common/index';\nimport { getModelUris } from './common/getModelUris';\nimport { loadWeightMap } from './dom/index';\nimport { env } from './env/index';\n\nexport abstract class NeuralNetwork {\n\n protected _params: TNetParams | undefined = undefined\n protected _paramMappings: ParamMapping[] = []\n\n constructor(protected _name: string) {\n }\n\n public get params(): TNetParams | undefined { return this._params }\n public get paramMappings(): ParamMapping[] { return this._paramMappings }\n public get isLoaded(): boolean { return !!this.params }\n\n public getParamFromPath(paramPath: string): tf.Tensor {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n return obj[objProp]\n }\n\n public reassignParamFromPath(paramPath: string, tensor: tf.Tensor) {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n obj[objProp].dispose()\n obj[objProp] = tensor\n }\n\n public getParamList() {\n return this._paramMappings.map(({ paramPath }) => ({\n path: paramPath,\n tensor: this.getParamFromPath(paramPath)\n }))\n }\n\n public getTrainableParams() {\n return this.getParamList().filter(param => param.tensor instanceof tf.Variable)\n }\n\n public getFrozenParams() {\n return this.getParamList().filter(param => !(param.tensor instanceof tf.Variable))\n }\n\n public variable() {\n this.getFrozenParams().forEach(({ path, tensor }) => {\n this.reassignParamFromPath(path, tensor.variable())\n })\n }\n\n public freeze() {\n this.getTrainableParams().forEach(({ path, tensor: variable }) => {\n const tensor = tf.tensor(variable.dataSync())\n variable.dispose()\n this.reassignParamFromPath(path, tensor)\n })\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.getParamList().forEach(param => {\n if (throwOnRedispose && param.tensor.isDisposed) {\n throw new Error(`param tensor has already been disposed for path ${param.path}`)\n }\n param.tensor.dispose()\n })\n this._params = undefined\n }\n\n public serializeParams(): Float32Array {\n return new Float32Array(\n this.getParamList()\n .map(({ tensor }) => Array.from(tensor.dataSync()) as number[])\n .reduce((flat, arr) => flat.concat(arr))\n )\n }\n\n public async load(weightsOrUrl: Float32Array | string | undefined): Promise {\n if (weightsOrUrl instanceof Float32Array) {\n this.extractWeights(weightsOrUrl)\n return\n }\n\n await this.loadFromUri(weightsOrUrl)\n }\n\n public async loadFromUri(uri: string | undefined) {\n if (uri && typeof uri !== 'string') {\n throw new Error(`${this._name}.loadFromUri - expected model uri`)\n }\n\n const weightMap = await loadWeightMap(uri, this.getDefaultModelName())\n this.loadFromWeightMap(weightMap)\n }\n\n public async loadFromDisk(filePath: string | undefined) {\n if (filePath && typeof filePath !== 'string') {\n throw new Error(`${this._name}.loadFromDisk - expected model file path`)\n }\n\n const { readFile } = env.getEnv()\n\n const { manifestUri, modelBaseUri } = getModelUris(filePath, this.getDefaultModelName())\n\n const fetchWeightsFromDisk = (filePaths: string[]) => Promise.all(\n filePaths.map(filePath => readFile(filePath).then(buf => buf.buffer))\n )\n const loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk)\n const manifest = JSON.parse((await readFile(manifestUri)).toString())\n const weightMap = await loadWeights(manifest, modelBaseUri)\n\n this.loadFromWeightMap(weightMap)\n }\n\n public loadFromWeightMap(weightMap: tf.NamedTensorMap) {\n const {\n paramMappings,\n params\n } = this.extractParamsFromWeigthMap(weightMap)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n public extractWeights(weights: Float32Array) {\n const {\n paramMappings,\n params\n } = this.extractParams(weights)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n private traversePropertyPath(paramPath: string) {\n if (!this.params) {\n throw new Error(`traversePropertyPath - model has no loaded params`)\n }\n\n const result = paramPath.split('/').reduce((res: { nextObj: any, obj?: any, objProp?: string }, objProp) => {\n if (!res.nextObj.hasOwnProperty(objProp)) {\n throw new Error(`traversePropertyPath - object does not have property ${objProp}, for path ${paramPath}`)\n }\n\n return { obj: res.nextObj, objProp, nextObj: res.nextObj[objProp] }\n }, { nextObj: this.params })\n\n const { obj, objProp } = result\n if (!obj || !objProp || !(obj[objProp] instanceof tf.Tensor)) {\n throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${paramPath}`)\n }\n\n return { obj, objProp }\n }\n\n protected abstract getDefaultModelName(): string\n protected abstract extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TNetParams, paramMappings: ParamMapping[] }\n protected abstract extractParams(weights: Float32Array): { params: TNetParams, paramMappings: ParamMapping[] }\n}", "import * as tf from '../../dist/tfjs.esm';\n\nimport { SeparableConvParams } from './types';\n\nexport function depthwiseSeparableConv(\n x: tf.Tensor4D,\n params: SeparableConvParams,\n stride: [number, number],\n): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same');\n out = tf.add(out, params.bias);\n return out;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams, SeparableConvParams } from '../common/index';\nimport { depthwiseSeparableConv } from '../common/depthwiseSeparableConv';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function denseBlock3(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock3Params,\n isFirstLayer: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, [2, 2], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, [2, 2]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n });\n}\n\nexport function denseBlock4(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock4Params,\n isFirstLayer: boolean = false,\n isScaleDown: boolean = true,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, isScaleDown ? [2, 2] : [1, 1], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, isScaleDown ? [2, 2] : [1, 1]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n const in4 = tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n const out4 = depthwiseSeparableConv(in4, denseBlockParams.conv3, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, tf.add(out3, out4)))) as tf.Tensor4D;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams } from './types';\n\nexport function convLayer(\n x: tf.Tensor4D,\n params: ConvParams,\n padding: 'valid' | 'same' = 'same',\n withRelu: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out = tf.add(\n tf.conv2d(x, params.filters, [1, 1], padding),\n params.bias,\n ) as tf.Tensor4D;\n\n return withRelu ? tf.relu(out) : out;\n });\n}\n", "import { ParamMapping } from './types';\n\nexport function disposeUnusedWeightTensors(weightMap: any, paramMappings: ParamMapping[]) {\n Object.keys(weightMap).forEach((path) => {\n if (!paramMappings.some((pm) => pm.originalPath === path)) {\n weightMap[path].dispose();\n }\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams, ExtractWeightsFunction, ParamMapping } from './types';\n\nexport function extractConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams => {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ExtractWeightsFunction, FCParams, ParamMapping } from './types';\n\nexport function extractFCParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): FCParams => {\n const fc_weights = tf.tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]);\n const fc_bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return {\n weights: fc_weights,\n bias: fc_bias,\n };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\n// eslint-disable-next-line no-unused-vars\nexport type ExtractWeightsFunction = (numWeights: number) => Float32Array\n\nexport type ParamMapping = {\n originalPath?: string\n paramPath: string\n}\n\nexport type ConvParams = {\n filters: tf.Tensor4D\n bias: tf.Tensor1D\n}\n\nexport type FCParams = {\n weights: tf.Tensor2D\n bias: tf.Tensor1D\n}\n\nexport class SeparableConvParams {\n // eslint-disable-next-line no-useless-constructor\n constructor(\n // eslint-disable-next-line no-unused-vars\n public depthwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public pointwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public bias: tf.Tensor1D,\n // eslint-disable-next-line no-empty-function\n ) {}\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ExtractWeightsFunction, ParamMapping, SeparableConvParams } from './types';\n\nexport function extractSeparableConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (channelsIn: number, channelsOut: number, mappedPrefix: string): SeparableConvParams => {\n const depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]);\n const pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]);\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/depthwise_filter` },\n { paramPath: `${mappedPrefix}/pointwise_filter` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n\nexport function loadSeparableConvParamsFactory(\n // eslint-disable-next-line no-unused-vars\n extractWeightEntry: (originalPath: string, paramRank: number) => T,\n) {\n return (prefix: string): SeparableConvParams => {\n const depthwise_filter = extractWeightEntry(`${prefix}/depthwise_filter`, 4);\n const pointwise_filter = extractWeightEntry(`${prefix}/pointwise_filter`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n", "import { isTensor } from '../utils/index';\nimport { ParamMapping } from './types';\n\nexport function extractWeightEntryFactory(weightMap: any, paramMappings: ParamMapping[]) {\n return (originalPath: string, paramRank: number, mappedPath?: string) => {\n const tensor = weightMap[originalPath];\n\n if (!isTensor(tensor, paramRank)) {\n throw new Error(`expected weightMap[${originalPath}] to be a Tensor${paramRank}D, instead have ${tensor}`);\n }\n\n paramMappings.push(\n { originalPath, paramPath: mappedPath || originalPath },\n );\n\n return tensor;\n };\n}\n", "export function extractWeightsFactory(weights: Float32Array) {\n let remainingWeights = weights;\n\n function extractWeights(numWeights: number): Float32Array {\n const ret = remainingWeights.slice(0, numWeights);\n remainingWeights = remainingWeights.slice(numWeights);\n return ret;\n }\n\n function getRemainingWeights(): Float32Array {\n return remainingWeights;\n }\n\n return {\n extractWeights,\n getRemainingWeights,\n };\n}\n", "import {\n extractConvParamsFactory,\n extractSeparableConvParamsFactory,\n ExtractWeightsFunction,\n ParamMapping,\n} from '../common/index';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractDenseBlock3Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv0`)\n : extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/conv0`);\n const conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv1`);\n const conv2 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const { conv0, conv1, conv2 } = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer);\n const conv3 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock4Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock4Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock4Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock4Params(64, 128, 'dense2');\n const dense3 = extractDenseBlock4Params(128, 256, 'dense3');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: {\n dense0, dense1, dense2, dense3,\n },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams } from './types';\n\n// eslint-disable-next-line no-unused-vars\nexport function loadConvParamsFactory(extractWeightEntry: (originalPath: string, paramRank: number) => T) {\n return (prefix: string): ConvParams => {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return { filters, bias };\n };\n}\n", "import { extractWeightEntryFactory, loadSeparableConvParamsFactory, ParamMapping } from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractDenseBlock3Params(prefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(prefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n const conv3 = extractSeparableConvParams(`${prefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock4Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock4Params('dense0', true),\n dense1: extractDenseBlock4Params('dense1'),\n dense2: extractDenseBlock4Params('dense2'),\n dense3: extractDenseBlock4Params('dense3'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock4 } from './denseBlock';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { FaceFeatureExtractorParams, IFaceFeatureExtractor } from './types';\n\nexport class FaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('FaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock4(normalized, params.dense0, true);\n out = denseBlock4(out, params.dense1);\n out = denseBlock4(out, params.dense2);\n out = denseBlock4(out, params.dense3);\n out = tf.avgPool(out, [7, 7], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FCParams } from './types';\n\nexport function fullyConnectedLayer(\n x: tf.Tensor2D,\n params: FCParams,\n): tf.Tensor2D {\n return tf.tidy(() => tf.add(\n tf.matMul(x, params.weights),\n params.bias,\n ));\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array, channelsIn: number, channelsOut: number): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const fc = extractFCParams(channelsIn, channelsOut, 'fc');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: extractFcParams('fc'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nexport function seperateWeightMaps(weightMap: tf.NamedTensorMap) {\n const featureExtractorMap: tf.NamedTensorMap = {};\n const classifierMap: tf.NamedTensorMap = {};\n\n Object.keys(weightMap).forEach((key) => {\n const map = key.startsWith('fc') ? classifierMap : featureExtractorMap;\n map[key] = weightMap[key];\n });\n\n return { featureExtractorMap, classifierMap };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { NetInput } from '../dom/index';\nimport {\n FaceFeatureExtractorParams,\n IFaceFeatureExtractor,\n TinyFaceFeatureExtractorParams,\n} from '../faceFeatureExtractor/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { NetParams } from './types';\nimport { seperateWeightMaps } from './util';\n\nexport abstract class FaceProcessor<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends NeuralNetwork {\n protected _faceFeatureExtractor: IFaceFeatureExtractor\n\n constructor(_name: string, faceFeatureExtractor: IFaceFeatureExtractor) {\n super(_name);\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): IFaceFeatureExtractor {\n return this._faceFeatureExtractor;\n }\n\n protected abstract getDefaultModelName(): string\n\n protected abstract getClassifierChannelsIn(): number\n\n protected abstract getClassifierChannelsOut(): number\n\n public runNet(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n return fullyConnectedLayer(bottleneckFeatures.as2D(bottleneckFeatures.shape[0], -1), params.fc);\n });\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights, this.getClassifierChannelsIn(), this.getClassifierChannelsOut());\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const cIn = this.getClassifierChannelsIn();\n const cOut = this.getClassifierChannelsOut();\n const classifierWeightSize = (cOut * cIn) + cOut;\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "export const FACE_EXPRESSION_LABELS = ['neutral', 'happy', 'sad', 'angry', 'fearful', 'disgusted', 'surprised'];\n\nexport class FaceExpressions {\n public neutral: number\n\n public happy: number\n\n public sad: number\n\n public angry: number\n\n public fearful: number\n\n public disgusted: number\n\n public surprised: number\n\n constructor(probabilities: number[] | Float32Array) {\n if (probabilities.length !== 7) {\n throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${probabilities.length}`);\n }\n\n FACE_EXPRESSION_LABELS.forEach((expression, idx) => {\n this[expression] = probabilities[idx];\n });\n }\n\n asSortedArray() {\n return FACE_EXPRESSION_LABELS\n .map((expression) => ({ expression, probability: this[expression] as number }))\n .sort((e0, e1) => e1.probability - e0.probability);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { FaceExpressions } from './FaceExpressions';\n\nexport class FaceExpressionNet extends FaceProcessor {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceExpressionNet', faceFeatureExtractor);\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n return tf.tidy(() => tf.softmax(this.runNet(input)));\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictExpressions(input: TNetInput) {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n const probabilitesByBatch = await Promise.all(tf.unstack(out).map(async (t) => {\n const data = await t.data();\n t.dispose();\n return data;\n }));\n out.dispose();\n\n const predictionsByBatch = probabilitesByBatch\n .map((probabilites) => new FaceExpressions(probabilites as Float32Array));\n\n return netInput.isBatchInput\n ? predictionsByBatch\n : predictionsByBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_expression_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n\n protected getClassifierChannelsOut(): number {\n return 7;\n }\n}\n", "import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\n\nexport type WithFaceExpressions = TSource & {\n expressions: FaceExpressions\n}\n\nexport function isWithFaceExpressions(obj: any): obj is WithFaceExpressions<{}> {\n return obj.expressions instanceof FaceExpressions;\n}\n\nexport function extendWithFaceExpressions<\n TSource\n>(\n sourceObj: TSource,\n expressions: FaceExpressions,\n): WithFaceExpressions {\n const extension = { expressions };\n return { ...sourceObj, ...extension };\n}\n", "import { IPoint, Point } from '../classes/index';\nimport { FaceExpressions } from '../faceExpressionNet/index';\nimport { isWithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { round } from '../utils/index';\nimport { DrawTextField } from './DrawTextField';\n\nexport type DrawFaceExpressionsInput = FaceExpressions | WithFaceExpressions<{}>\n\nexport function drawFaceExpressions(\n canvasArg: string | HTMLCanvasElement,\n faceExpressions: DrawFaceExpressionsInput | Array,\n minConfidence = 0.1,\n textFieldAnchor?: IPoint,\n) {\n const faceExpressionsArray = Array.isArray(faceExpressions) ? faceExpressions : [faceExpressions];\n\n faceExpressionsArray.forEach((e) => {\n // eslint-disable-next-line no-nested-ternary\n const expr = e instanceof FaceExpressions\n ? e\n : (isWithFaceExpressions(e) ? e.expressions : undefined);\n if (!expr) {\n throw new Error('drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof');\n }\n\n const sorted = expr.asSortedArray();\n const resultsToDisplay = sorted.filter((exprLocal) => exprLocal.probability > minConfidence);\n\n const anchor = isWithFaceDetection(e)\n ? e.detection.box.bottomLeft\n : (textFieldAnchor || new Point(0, 0));\n\n const drawTextField = new DrawTextField(\n resultsToDisplay.map((exprLocal) => `${exprLocal.expression} (${round(exprLocal.probability)})`),\n anchor,\n );\n drawTextField.draw(canvasArg);\n });\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { isWithFaceDetection, WithFaceDetection } from './WithFaceDetection';\n\nexport type WithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 > = TSource & {\n landmarks: TFaceLandmarks\n unshiftedLandmarks: TFaceLandmarks\n alignedRect: FaceDetection\n }\n\nexport function isWithFaceLandmarks(obj: any): obj is WithFaceLandmarks, FaceLandmarks> {\n return isWithFaceDetection(obj)\n // eslint-disable-next-line dot-notation\n && obj['landmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['unshiftedLandmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['alignedRect'] instanceof FaceDetection;\n}\n\nexport function extendWithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 >(sourceObj: TSource, unshiftedLandmarks: TFaceLandmarks): WithFaceLandmarks {\n const { box: shift } = sourceObj.detection;\n const landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y);\n\n const rect = landmarks.align();\n const { imageDims } = sourceObj.detection;\n const alignedRect = new FaceDetection(sourceObj.detection.score, rect.rescale(imageDims.reverse()), imageDims);\n\n const extension = {\n landmarks,\n unshiftedLandmarks,\n alignedRect,\n };\n\n return { ...sourceObj, ...extension };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IPoint } from '../classes/index';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { drawContour } from './drawContour';\n\nexport interface IDrawFaceLandmarksOptions {\n drawLines?: boolean\n drawPoints?: boolean\n lineWidth?: number\n pointSize?: number\n lineColor?: string\n pointColor?: string\n}\n\nexport class DrawFaceLandmarksOptions {\n public drawLines: boolean\n\n public drawPoints: boolean\n\n public lineWidth: number\n\n public pointSize: number\n\n public lineColor: string\n\n public pointColor: string\n\n constructor(options: IDrawFaceLandmarksOptions = {}) {\n const {\n drawLines = true, drawPoints = true, lineWidth, lineColor, pointSize, pointColor,\n } = options;\n this.drawLines = drawLines;\n this.drawPoints = drawPoints;\n this.lineWidth = lineWidth || 1;\n this.pointSize = pointSize || 2;\n this.lineColor = lineColor || 'rgba(0, 255, 255, 1)';\n this.pointColor = pointColor || 'rgba(255, 0, 255, 1)';\n }\n}\n\nexport class DrawFaceLandmarks {\n public faceLandmarks: FaceLandmarks\n\n public options: DrawFaceLandmarksOptions\n\n constructor(\n faceLandmarks: FaceLandmarks,\n options: IDrawFaceLandmarksOptions = {},\n ) {\n this.faceLandmarks = faceLandmarks;\n this.options = new DrawFaceLandmarksOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const {\n drawLines, drawPoints, lineWidth, lineColor, pointSize, pointColor,\n } = this.options;\n\n if (drawLines && this.faceLandmarks instanceof FaceLandmarks68) {\n ctx.strokeStyle = lineColor;\n ctx.lineWidth = lineWidth;\n drawContour(ctx, this.faceLandmarks.getJawOutline());\n drawContour(ctx, this.faceLandmarks.getLeftEyeBrow());\n drawContour(ctx, this.faceLandmarks.getRightEyeBrow());\n drawContour(ctx, this.faceLandmarks.getNose());\n drawContour(ctx, this.faceLandmarks.getLeftEye(), true);\n drawContour(ctx, this.faceLandmarks.getRightEye(), true);\n drawContour(ctx, this.faceLandmarks.getMouth(), true);\n }\n\n if (drawPoints) {\n ctx.strokeStyle = pointColor;\n ctx.fillStyle = pointColor;\n\n const drawPoint = (pt: IPoint) => {\n ctx.beginPath();\n ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI);\n ctx.fill();\n };\n this.faceLandmarks.positions.forEach(drawPoint);\n }\n }\n}\n\nexport type DrawFaceLandmarksInput = FaceLandmarks | WithFaceLandmarks>\n\nexport function drawFaceLandmarks(\n canvasArg: string | HTMLCanvasElement,\n faceLandmarks: DrawFaceLandmarksInput | Array,\n) {\n const faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks];\n faceLandmarksArray.forEach((f) => {\n // eslint-disable-next-line no-nested-ternary\n const landmarks = f instanceof FaceLandmarks\n ? f\n : (isWithFaceLandmarks(f) ? f.landmarks : undefined);\n if (!landmarks) {\n throw new Error('drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof');\n }\n\n new DrawFaceLandmarks(landmarks).draw(canvasArg);\n });\n}\n", "import { extractConvParamsFactory, extractSeparableConvParamsFactory, extractWeightsFactory } from '../common/index';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractReductionBlockParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(channels: number, mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParams(weights: Float32Array, numMainBlocks: number): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const entry_flow_conv_in = extractConvParams(3, 32, 3, 'entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams(32, 64, 'entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams(64, 128, 'entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(128, `middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams(128, 256, 'exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams(256, 512, 'exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { entry_flow, middle_flow, exit_flow },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n disposeUnusedWeightTensors,\n extractWeightEntryFactory,\n loadSeparableConvParamsFactory,\n ParamMapping,\n} from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractReductionBlockParams(mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(`${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(`${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n numMainBlocks: number,\n): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const entry_flow_conv_in = extractConvParams('entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams('entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams('entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(`middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams('exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams('exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params: { entry_flow, middle_flow, exit_flow }, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams, depthwiseSeparableConv } from '../common/index';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { range } from '../utils/index';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction conv(x: tf.Tensor4D, params: ConvParams, stride: [number, number]): tf.Tensor4D {\n return tf.add(tf.conv2d(x, params.filters, stride, 'same'), params.bias);\n}\n\nfunction reductionBlock(x: tf.Tensor4D, params: ReductionBlockParams, isActivateInput: boolean = true): tf.Tensor4D {\n let out = isActivateInput ? tf.relu(x) : x;\n out = depthwiseSeparableConv(out, params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = tf.maxPool(out, [3, 3], [2, 2], 'same');\n out = tf.add(out, conv(x, params.expansion_conv, [2, 2]));\n return out;\n}\n\nfunction mainBlock(x: tf.Tensor4D, params: MainBlockParams): tf.Tensor4D {\n let out = depthwiseSeparableConv(tf.relu(x), params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv2, [1, 1]);\n out = tf.add(out, x);\n return out;\n}\n\nexport class TinyXception extends NeuralNetwork {\n private _numMainBlocks: number\n\n constructor(numMainBlocks: number) {\n super('TinyXception');\n this._numMainBlocks = numMainBlocks;\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyXception - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = tf.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));\n out = reductionBlock(out, params.entry_flow.reduction_block_0, false);\n out = reductionBlock(out, params.entry_flow.reduction_block_1);\n\n range(this._numMainBlocks, 0, 1).forEach((idx) => {\n out = mainBlock(out, params.middle_flow[`main_block_${idx}`]);\n });\n\n out = reductionBlock(out, params.exit_flow.reduction_block);\n out = tf.relu(depthwiseSeparableConv(out, params.exit_flow.separable_conv, [1, 1]));\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_xception_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this._numMainBlocks);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights, this._numMainBlocks);\n }\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const age = extractFCParams(512, 1, 'fc/age');\n const gender = extractFCParams(512, 2, 'fc/gender');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc: { age, gender } },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: {\n age: extractFcParams('fc/age'),\n gender: extractFcParams('fc/gender'),\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FCParams } from '../common/index';\n\n// eslint-disable-next-line no-shadow\nexport enum Gender {\n // eslint-disable-next-line no-unused-vars\n FEMALE = 'female',\n // eslint-disable-next-line no-unused-vars\n MALE = 'male'\n}\n\nexport type AgeAndGenderPrediction = {\n age: number\n gender: Gender\n genderProbability: number\n}\n\nexport type NetOutput = { age: tf.Tensor1D, gender: tf.Tensor2D }\n\nexport type NetParams = {\n fc: {\n age: FCParams\n gender: FCParams\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { seperateWeightMaps } from '../faceProcessor/util';\nimport { TinyXception } from '../xception/TinyXception';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport {\n AgeAndGenderPrediction, Gender, NetOutput, NetParams,\n} from './types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\n\nexport class AgeGenderNet extends NeuralNetwork {\n private _faceFeatureExtractor: TinyXception\n\n constructor(faceFeatureExtractor: TinyXception = new TinyXception(2)) {\n super('AgeGenderNet');\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): TinyXception {\n return this._faceFeatureExtractor;\n }\n\n public runNet(input: NetInput | tf.Tensor4D): NetOutput {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n\n const pooled = tf.avgPool(bottleneckFeatures, [7, 7], [2, 2], 'valid').as2D(bottleneckFeatures.shape[0], -1);\n const age = fullyConnectedLayer(pooled, params.fc.age).as1D();\n const gender = fullyConnectedLayer(pooled, params.fc.gender);\n return { age, gender };\n });\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): NetOutput {\n return tf.tidy(() => {\n const { age, gender } = this.runNet(input);\n return { age, gender: tf.softmax(gender) };\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictAgeAndGender(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n\n const ages = tf.unstack(out.age);\n const genders = tf.unstack(out.gender);\n const ageAndGenderTensors = ages.map((ageTensor, i) => ({\n ageTensor,\n genderTensor: genders[i],\n }));\n\n const predictionsByBatch = await Promise.all(\n ageAndGenderTensors.map(async ({ ageTensor, genderTensor }) => {\n const age = (await ageTensor.data())[0];\n const probMale = (await genderTensor.data())[0];\n const isMale = probMale > 0.5;\n const gender = isMale ? Gender.MALE : Gender.FEMALE;\n const genderProbability = isMale ? probMale : (1 - probMale);\n\n ageTensor.dispose();\n genderTensor.dispose();\n return { age, gender, genderProbability };\n }),\n );\n out.age.dispose();\n out.gender.dispose();\n\n return netInput.isBatchInput ? predictionsByBatch as AgeAndGenderPrediction[] : predictionsByBatch[0] as AgeAndGenderPrediction;\n }\n\n protected getDefaultModelName(): string {\n return 'age_gender_model';\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights);\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const classifierWeightSize = (512 * 1 + 1) + (512 * 2 + 2);\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { IDimensions, Point } from '../classes/index';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractorParams, TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { isEven } from '../utils/index';\n\nexport abstract class FaceLandmark68NetBase<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends FaceProcessor {\n public postProcess(output: tf.Tensor2D, inputSize: number, originalDimensions: IDimensions[]): tf.Tensor2D {\n const inputDimensions = originalDimensions.map(({ width, height }) => {\n const scale = inputSize / Math.max(height, width);\n return {\n width: width * scale,\n height: height * scale,\n };\n });\n\n const batchSize = inputDimensions.length;\n\n return tf.tidy(() => {\n const createInterleavedTensor = (fillX: number, fillY: number) => tf.stack([tf.fill([68], fillX, 'float32'), tf.fill([68], fillY, 'float32')], 1).as2D(1, 136).as1D();\n\n // eslint-disable-next-line no-unused-vars\n const getPadding = (batchIdx: number, cond: (w: number, h: number) => boolean): number => {\n const { width, height } = inputDimensions[batchIdx];\n return cond(width, height) ? Math.abs(width - height) / 2 : 0;\n };\n\n const getPaddingX = (batchIdx: number) => getPadding(batchIdx, (w, h) => w < h);\n const getPaddingY = (batchIdx: number) => getPadding(batchIdx, (w, h) => h < w);\n\n const landmarkTensors = output\n .mul(tf.fill([batchSize, 136], inputSize, 'float32'))\n .sub(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n getPaddingX(batchIdx),\n getPaddingY(batchIdx),\n ))))\n .div(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n inputDimensions[batchIdx].width,\n inputDimensions[batchIdx].height,\n ))));\n\n return landmarkTensors as tf.Tensor2D;\n });\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n return tf.tidy(() => {\n const out = this.runNet(input);\n return this.postProcess(\n out,\n input.inputSize as number,\n input.inputDimensions.map(([height, width]) => ({ height, width })),\n );\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async detectLandmarks(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const landmarkTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const landmarksForBatch = await Promise.all(landmarkTensors.map(\n async (landmarkTensor, batchIdx) => {\n const landmarksArray = Array.from(await landmarkTensor.data());\n const xCoords = landmarksArray.filter((_, i) => isEven(i));\n const yCoords = landmarksArray.filter((_, i) => !isEven(i));\n\n return new FaceLandmarks68(\n Array(68).fill(0).map((_, i) => new Point(xCoords[i] as number, yCoords[i] as number)),\n {\n height: netInput.getInputHeight(batchIdx),\n width: netInput.getInputWidth(batchIdx),\n },\n );\n },\n ));\n\n landmarkTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput ? landmarksForBatch as FaceLandmarks68[] : landmarksForBatch[0] as FaceLandmarks68;\n }\n\n protected getClassifierChannelsOut(): number {\n return 136;\n }\n}\n", "import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68Net extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceLandmark68Net', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMapTiny(\n weightMap: tf.NamedTensorMap,\n): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock3Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock3Params('dense0', true),\n dense1: extractDenseBlock3Params('dense1'),\n dense2: extractDenseBlock3Params('dense2'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsTiny(weights: Float32Array): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock3Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock3Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock3Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock3Params(64, 128, 'dense2');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { dense0, dense1, dense2 },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock3 } from './denseBlock';\nimport { extractParamsFromWeigthMapTiny } from './extractParamsFromWeigthMapTiny';\nimport { extractParamsTiny } from './extractParamsTiny';\nimport { IFaceFeatureExtractor, TinyFaceFeatureExtractorParams } from './types';\n\nexport class TinyFaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('TinyFaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyFaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock3(normalized, params.dense0, true);\n out = denseBlock3(out, params.dense1);\n out = denseBlock3(out, params.dense2);\n out = tf.avgPool(out, [14, 14], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_tiny_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMapTiny(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParamsTiny(weights);\n }\n}\n", "import { TinyFaceFeatureExtractor } from '../faceFeatureExtractor/TinyFaceFeatureExtractor';\nimport { TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68TinyNet extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: TinyFaceFeatureExtractor = new TinyFaceFeatureExtractor()) {\n super('FaceLandmark68TinyNet', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_tiny_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 128;\n }\n}\n", "import { FaceLandmark68Net } from './FaceLandmark68Net';\n\nexport * from './FaceLandmark68Net';\nexport * from './FaceLandmark68TinyNet';\n\nexport class FaceLandmarkNet extends FaceLandmark68Net {}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ScaleLayerParams } from './types';\n\nexport function scale(x: tf.Tensor4D, params: ScaleLayerParams): tf.Tensor4D {\n return tf.add(tf.mul(x, params.weights), params.biases);\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { scale } from './scaleLayer';\nimport { ConvLayerParams } from './types';\n\nfunction convLayer(\n x: tf.Tensor4D,\n params: ConvLayerParams,\n strides: [number, number],\n withRelu: boolean,\n padding: 'valid' | 'same' = 'same',\n): tf.Tensor4D {\n const { filters, bias } = params.conv;\n\n let out = tf.conv2d(x, filters, strides, padding);\n out = tf.add(out, bias);\n out = scale(out, params.scale);\n return withRelu ? tf.relu(out) : out;\n}\n\nexport function conv(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], true);\n}\n\nexport function convNoRelu(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], false);\n}\n\nexport function convDown(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [2, 2], true, 'valid');\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n ConvParams, extractWeightsFactory, ExtractWeightsFunction, ParamMapping,\n} from '../common/index';\nimport { isFloat } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractFilterValues(numFilterValues: number, numFilters: number, filterSize: number): tf.Tensor4D {\n const weights = extractWeights(numFilterValues);\n const depth = weights.length / (numFilters * filterSize * filterSize);\n\n if (isFloat(depth)) {\n throw new Error(`depth has to be an integer: ${depth}, weights.length: ${weights.length}, numFilters: ${numFilters}, filterSize: ${filterSize}`);\n }\n\n return tf.tidy(\n () => tf.transpose(\n tf.tensor4d(weights, [numFilters, depth, filterSize, filterSize]),\n [2, 3, 1, 0],\n ),\n );\n }\n\n function extractConvParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams {\n const filters = extractFilterValues(numFilterValues, numFilters, filterSize);\n const bias = tf.tensor1d(extractWeights(numFilters));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n }\n\n function extractScaleLayerParams(numWeights: number, mappedPrefix: string): ScaleLayerParams {\n const weights = tf.tensor1d(extractWeights(numWeights));\n const biases = tf.tensor1d(extractWeights(numWeights));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/biases` },\n );\n\n return {\n weights,\n biases,\n };\n }\n\n function extractConvLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvLayerParams {\n const conv = extractConvParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv`);\n const scale = extractScaleLayerParams(numFilters, `${mappedPrefix}/scale`);\n\n return { conv, scale };\n }\n\n function extractResidualLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n isDown: boolean = false,\n ): ResidualLayerParams {\n const conv1 = extractConvLayerParams((isDown ? 0.5 : 1) * numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv1`);\n const conv2 = extractConvLayerParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv2`);\n\n return { conv1, conv2 };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const conv32_down = extractConvLayerParams(4704, 32, 7, 'conv32_down');\n const conv32_1 = extractResidualLayerParams(9216, 32, 3, 'conv32_1');\n const conv32_2 = extractResidualLayerParams(9216, 32, 3, 'conv32_2');\n const conv32_3 = extractResidualLayerParams(9216, 32, 3, 'conv32_3');\n\n const conv64_down = extractResidualLayerParams(36864, 64, 3, 'conv64_down', true);\n const conv64_1 = extractResidualLayerParams(36864, 64, 3, 'conv64_1');\n const conv64_2 = extractResidualLayerParams(36864, 64, 3, 'conv64_2');\n const conv64_3 = extractResidualLayerParams(36864, 64, 3, 'conv64_3');\n\n const conv128_down = extractResidualLayerParams(147456, 128, 3, 'conv128_down', true);\n const conv128_1 = extractResidualLayerParams(147456, 128, 3, 'conv128_1');\n const conv128_2 = extractResidualLayerParams(147456, 128, 3, 'conv128_2');\n\n const conv256_down = extractResidualLayerParams(589824, 256, 3, 'conv256_down', true);\n const conv256_1 = extractResidualLayerParams(589824, 256, 3, 'conv256_1');\n const conv256_2 = extractResidualLayerParams(589824, 256, 3, 'conv256_2');\n const conv256_down_out = extractResidualLayerParams(589824, 256, 3, 'conv256_down_out');\n\n const fc = tf.tidy(\n () => tf.transpose(tf.tensor2d(extractWeights(256 * 128), [128, 256]), [1, 0]),\n );\n paramMappings.push({ paramPath: 'fc' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping } from '../common/index';\nimport { isTensor2D } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractScaleLayerParams(prefix: string): ScaleLayerParams {\n const weights = extractWeightEntry(`${prefix}/scale/weights`, 1);\n const biases = extractWeightEntry(`${prefix}/scale/biases`, 1);\n\n return { weights, biases };\n }\n\n function extractConvLayerParams(prefix: string): ConvLayerParams {\n const filters = extractWeightEntry(`${prefix}/conv/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/conv/bias`, 1);\n const scale = extractScaleLayerParams(prefix);\n\n return { conv: { filters, bias }, scale };\n }\n\n function extractResidualLayerParams(prefix: string): ResidualLayerParams {\n return {\n conv1: extractConvLayerParams(`${prefix}/conv1`),\n conv2: extractConvLayerParams(`${prefix}/conv2`),\n };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const conv32_down = extractConvLayerParams('conv32_down');\n const conv32_1 = extractResidualLayerParams('conv32_1');\n const conv32_2 = extractResidualLayerParams('conv32_2');\n const conv32_3 = extractResidualLayerParams('conv32_3');\n\n const conv64_down = extractResidualLayerParams('conv64_down');\n const conv64_1 = extractResidualLayerParams('conv64_1');\n const conv64_2 = extractResidualLayerParams('conv64_2');\n const conv64_3 = extractResidualLayerParams('conv64_3');\n\n const conv128_down = extractResidualLayerParams('conv128_down');\n const conv128_1 = extractResidualLayerParams('conv128_1');\n const conv128_2 = extractResidualLayerParams('conv128_2');\n\n const conv256_down = extractResidualLayerParams('conv256_down');\n const conv256_1 = extractResidualLayerParams('conv256_1');\n const conv256_2 = extractResidualLayerParams('conv256_2');\n const conv256_down_out = extractResidualLayerParams('conv256_down_out');\n\n const { fc } = weightMap;\n paramMappings.push({ originalPath: 'fc', paramPath: 'fc' });\n\n if (!isTensor2D(fc)) {\n throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${fc}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { conv, convDown, convNoRelu } from './convLayer';\nimport { ResidualLayerParams } from './types';\n\nexport function residual(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = conv(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n out = tf.add(out, x);\n out = tf.relu(out);\n return out;\n}\n\nexport function residualDown(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = convDown(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n\n let pooled = tf.avgPool(x, 2, 2, 'valid') as tf.Tensor4D;\n const zeros = tf.zeros(pooled.shape);\n const isPad = pooled.shape[3] !== out.shape[3];\n const isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2];\n\n if (isAdjustShape) {\n const padShapeX = [...out.shape] as [number, number, number, number];\n padShapeX[1] = 1;\n const zerosW = tf.zeros(padShapeX);\n out = tf.concat([out, zerosW], 1);\n\n const padShapeY = [...out.shape] as [number, number, number, number];\n padShapeY[2] = 1;\n const zerosH = tf.zeros(padShapeY);\n out = tf.concat([out, zerosH], 2);\n }\n\n pooled = isPad ? tf.concat([pooled, zeros], 3) : pooled;\n out = tf.add(pooled, out) as tf.Tensor4D;\n\n out = tf.relu(out);\n return out;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { convDown } from './convLayer';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { residual, residualDown } from './residualLayer';\nimport { NetParams } from './types';\n\nexport class FaceRecognitionNet extends NeuralNetwork {\n constructor() {\n super('FaceRecognitionNet');\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceRecognitionNet - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(150, true).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(150, true), 'float32');\n\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = convDown(normalized, params.conv32_down);\n out = tf.maxPool(out, 3, 2, 'valid');\n\n out = residual(out, params.conv32_1);\n out = residual(out, params.conv32_2);\n out = residual(out, params.conv32_3);\n\n out = residualDown(out, params.conv64_down);\n out = residual(out, params.conv64_1);\n out = residual(out, params.conv64_2);\n out = residual(out, params.conv64_3);\n\n out = residualDown(out, params.conv128_down);\n out = residual(out, params.conv128_1);\n out = residual(out, params.conv128_2);\n\n out = residualDown(out, params.conv256_down);\n out = residual(out, params.conv256_1);\n out = residual(out, params.conv256_2);\n out = residualDown(out, params.conv256_down_out);\n\n const globalAvg = out.mean([1, 2]) as tf.Tensor2D;\n const fullyConnected = tf.matMul(globalAvg, params.fc);\n\n return fullyConnected;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async computeFaceDescriptor(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n\n const faceDescriptorTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const faceDescriptorsForBatch = await Promise.all(faceDescriptorTensors.map(\n (t) => t.data(),\n )) as Float32Array[];\n\n faceDescriptorTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput\n ? faceDescriptorsForBatch\n : faceDescriptorsForBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_recognition_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import { FaceRecognitionNet } from './FaceRecognitionNet';\n\nexport * from './FaceRecognitionNet';\n\nexport function createFaceRecognitionNet(weights: Float32Array) {\n const net = new FaceRecognitionNet();\n net.extractWeights(weights);\n return net;\n}\n", "export type WithFaceDescriptor = TSource & {\n descriptor: Float32Array\n}\n\nexport function extendWithFaceDescriptor<\n TSource\n>(\n sourceObj: TSource,\n descriptor: Float32Array,\n): WithFaceDescriptor {\n const extension = { descriptor };\n return { ...sourceObj, ...extension };\n}\n", "export type WithAge = TSource & {\n age: number\n}\n\nexport function isWithAge(obj: any): obj is WithAge<{}> {\n return typeof obj.age === 'number';\n}\n\nexport function extendWithAge<\n TSource\n>(\n sourceObj: TSource,\n age: number,\n): WithAge {\n const extension = { age };\n return { ...sourceObj, ...extension };\n}\n", "import { Gender } from '../ageGenderNet/types';\nimport { isValidProbablitiy } from '../utils/index';\n\nexport type WithGender = TSource & {\n gender: Gender\n genderProbability: number\n}\n\nexport function isWithGender(obj: any): obj is WithGender<{}> {\n return (obj.gender === Gender.MALE || obj.gender === Gender.FEMALE)\n && isValidProbablitiy(obj.genderProbability);\n}\n\nexport function extendWithGender<\n TSource\n>(\n sourceObj: TSource,\n gender: Gender,\n genderProbability: number,\n): WithGender {\n const extension = { gender, genderProbability };\n return { ...sourceObj, ...extension };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n ExtractWeightsFunction, ParamMapping, ConvParams, extractWeightsFactory,\n} from '../common/index';\nimport {\n MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractDepthwiseConvParams(numChannels: number, mappedPrefix: string): MobileNetV1.DepthwiseConvParams {\n const filters = tf.tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]);\n const batch_norm_scale = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_offset = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_mean = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_variance = tf.tensor1d(extractWeights(numChannels));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/batch_norm_scale` },\n { paramPath: `${mappedPrefix}/batch_norm_offset` },\n { paramPath: `${mappedPrefix}/batch_norm_mean` },\n { paramPath: `${mappedPrefix}/batch_norm_variance` },\n );\n\n return {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n };\n }\n\n function extractConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n isPointwiseConv?: boolean,\n ): ConvParams {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/${isPointwiseConv ? 'batch_norm_offset' : 'bias'}` },\n );\n\n return { filters, bias };\n }\n\n function extractPointwiseConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): PointwiseConvParams {\n const {\n filters,\n bias,\n } = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true);\n\n return {\n filters,\n batch_norm_offset: bias,\n };\n }\n\n function extractConvPairParams(\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): MobileNetV1.ConvPairParams {\n const depthwise_conv = extractDepthwiseConvParams(channelsIn, `${mappedPrefix}/depthwise_conv`);\n const pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/pointwise_conv`);\n\n return { depthwise_conv, pointwise_conv };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n const conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0');\n\n const conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1');\n const conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2');\n const conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3');\n const conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4');\n const conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5');\n const conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6');\n const conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7');\n const conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8');\n const conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9');\n const conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10');\n const conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11');\n const conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12');\n const conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13');\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n conv_8,\n conv_9,\n conv_10,\n conv_11,\n conv_12,\n conv_13,\n };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n const conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0');\n const conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1');\n const conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2');\n const conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3');\n const conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4');\n const conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5');\n const conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6');\n const conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7');\n\n const box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor');\n const class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor');\n const box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor');\n const class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor');\n const box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor');\n const class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor');\n const box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor');\n const class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor');\n const box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor');\n const class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor');\n const box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor');\n const class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor');\n\n const box_predictor_0 = {\n box_encoding_predictor: box_encoding_0_predictor,\n class_predictor: class_predictor_0,\n };\n const box_predictor_1 = {\n box_encoding_predictor: box_encoding_1_predictor,\n class_predictor: class_predictor_1,\n };\n const box_predictor_2 = {\n box_encoding_predictor: box_encoding_2_predictor,\n class_predictor: class_predictor_2,\n };\n const box_predictor_3 = {\n box_encoding_predictor: box_encoding_3_predictor,\n class_predictor: class_predictor_3,\n };\n const box_predictor_4 = {\n box_encoding_predictor: box_encoding_4_predictor,\n class_predictor: class_predictor_4,\n };\n const box_predictor_5 = {\n box_encoding_predictor: box_encoding_5_predictor,\n class_predictor: class_predictor_5,\n };\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n box_predictor_0,\n box_predictor_1,\n box_predictor_2,\n box_predictor_3,\n box_predictor_4,\n box_predictor_5,\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const mobilenetv1 = extractMobilenetV1Params();\n const prediction_layer = extractPredictionLayerParams();\n const extra_dim = tf.tensor3d(\n extractWeights(5118 * 4),\n [1, 5118, 4],\n );\n const output_layer = {\n extra_dim,\n };\n\n paramMappings.push({ paramPath: 'output_layer/extra_dim' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n params: {\n mobilenetv1,\n prediction_layer,\n output_layer,\n },\n paramMappings,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n ConvParams, disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping,\n} from '../common/index';\nimport { isTensor3D } from '../utils/index';\nimport {\n BoxPredictionParams, MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractPointwiseConvParams(prefix: string, idx: number, mappedPrefix: string): PointwiseConvParams {\n const filters = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/weights`, 4, `${mappedPrefix}/filters`);\n const batch_norm_offset = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/convolution_bn_offset`, 1, `${mappedPrefix}/batch_norm_offset`);\n\n return { filters, batch_norm_offset };\n }\n\n function extractConvPairParams(idx: number): MobileNetV1.ConvPairParams {\n const mappedPrefix = `mobilenetv1/conv_${idx}`;\n const prefixDepthwiseConv = `MobilenetV1/Conv2d_${idx}_depthwise`;\n const mappedPrefixDepthwiseConv = `${mappedPrefix}/depthwise_conv`;\n const mappedPrefixPointwiseConv = `${mappedPrefix}/pointwise_conv`;\n\n const filters = extractWeightEntry(`${prefixDepthwiseConv}/depthwise_weights`, 4, `${mappedPrefixDepthwiseConv}/filters`);\n const batch_norm_scale = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/gamma`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_scale`);\n const batch_norm_offset = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/beta`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_offset`);\n const batch_norm_mean = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_mean`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_mean`);\n const batch_norm_variance = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_variance`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_variance`);\n\n return {\n depthwise_conv: {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n },\n pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv),\n };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n return {\n conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'),\n conv_1: extractConvPairParams(1),\n conv_2: extractConvPairParams(2),\n conv_3: extractConvPairParams(3),\n conv_4: extractConvPairParams(4),\n conv_5: extractConvPairParams(5),\n conv_6: extractConvPairParams(6),\n conv_7: extractConvPairParams(7),\n conv_8: extractConvPairParams(8),\n conv_9: extractConvPairParams(9),\n conv_10: extractConvPairParams(10),\n conv_11: extractConvPairParams(11),\n conv_12: extractConvPairParams(12),\n conv_13: extractConvPairParams(13),\n };\n }\n\n function extractConvParams(prefix: string, mappedPrefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/weights`, 4, `${mappedPrefix}/filters`);\n const bias = extractWeightEntry(`${prefix}/biases`, 1, `${mappedPrefix}/bias`);\n\n return { filters, bias };\n }\n\n function extractBoxPredictorParams(idx: number): BoxPredictionParams {\n const box_encoding_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/BoxEncodingPredictor`,\n `prediction_layer/box_predictor_${idx}/box_encoding_predictor`,\n );\n const class_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/ClassPredictor`,\n `prediction_layer/box_predictor_${idx}/class_predictor`,\n );\n\n return { box_encoding_predictor, class_predictor };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n return {\n conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'),\n conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'),\n conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'),\n conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'),\n conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'),\n conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'),\n conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'),\n conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'),\n box_predictor_0: extractBoxPredictorParams(0),\n box_predictor_1: extractBoxPredictorParams(1),\n box_predictor_2: extractBoxPredictorParams(2),\n box_predictor_3: extractBoxPredictorParams(3),\n box_predictor_4: extractBoxPredictorParams(4),\n box_predictor_5: extractBoxPredictorParams(5),\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const extra_dim = weightMap['Output/extra_dim'];\n paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' });\n\n if (!isTensor3D(extra_dim)) {\n throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${extra_dim}`);\n }\n\n const params = {\n mobilenetv1: extractMobilenetV1Params(),\n prediction_layer: extractPredictionLayerParams(),\n output_layer: {\n extra_dim,\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { PointwiseConvParams } from './types';\n\nexport function pointwiseConvLayer(\n x: tf.Tensor4D,\n params: PointwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.conv2d(x, params.filters, strides, 'same');\n out = tf.add(out, params.batch_norm_offset);\n return tf.clipByValue(out, 0, 6);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { MobileNetV1 } from './types';\n\nconst epsilon = 0.0010000000474974513;\n\nfunction depthwiseConvLayer(\n x: tf.Tensor4D,\n params: MobileNetV1.DepthwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.depthwiseConv2d(x, params.filters, strides, 'same');\n out = tf.batchNorm(\n out,\n params.batch_norm_mean,\n params.batch_norm_variance,\n params.batch_norm_offset,\n params.batch_norm_scale,\n epsilon,\n );\n return tf.clipByValue(out, 0, 6);\n });\n}\n\nfunction getStridesForLayerIdx(layerIdx: number): [number, number] {\n return [2, 4, 6, 12].some((idx) => idx === layerIdx) ? [2, 2] : [1, 1];\n}\n\nexport function mobileNetV1(x: tf.Tensor4D, params: MobileNetV1.Params) {\n return tf.tidy(() => {\n let conv11;\n let out = pointwiseConvLayer(x, params.conv_0, [2, 2]);\n\n const convPairParams = [\n params.conv_1,\n params.conv_2,\n params.conv_3,\n params.conv_4,\n params.conv_5,\n params.conv_6,\n params.conv_7,\n params.conv_8,\n params.conv_9,\n params.conv_10,\n params.conv_11,\n params.conv_12,\n params.conv_13,\n ];\n\n convPairParams.forEach((param, i) => {\n const layerIdx = i + 1;\n const depthwiseConvStrides = getStridesForLayerIdx(layerIdx);\n out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides);\n out = pointwiseConvLayer(out, param.pointwise_conv, [1, 1]);\n if (layerIdx === 11) {\n conv11 = out;\n }\n });\n\n if (conv11 === null) {\n throw new Error('mobileNetV1 - output of conv layer 11 is null');\n }\n\n return {\n out,\n conv11: conv11 as any,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nfunction IOU(boxes: tf.Tensor2D, i: number, j: number) {\n const boxesData = boxes.arraySync();\n const yminI = Math.min(boxesData[i][0], boxesData[i][2]);\n const xminI = Math.min(boxesData[i][1], boxesData[i][3]);\n const ymaxI = Math.max(boxesData[i][0], boxesData[i][2]);\n const xmaxI = Math.max(boxesData[i][1], boxesData[i][3]);\n const yminJ = Math.min(boxesData[j][0], boxesData[j][2]);\n const xminJ = Math.min(boxesData[j][1], boxesData[j][3]);\n const ymaxJ = Math.max(boxesData[j][0], boxesData[j][2]);\n const xmaxJ = Math.max(boxesData[j][1], boxesData[j][3]);\n const areaI = (ymaxI - yminI) * (xmaxI - xminI);\n const areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ);\n if (areaI <= 0 || areaJ <= 0) {\n return 0.0;\n }\n const intersectionYmin = Math.max(yminI, yminJ);\n const intersectionXmin = Math.max(xminI, xminJ);\n const intersectionYmax = Math.min(ymaxI, ymaxJ);\n const intersectionXmax = Math.min(xmaxI, xmaxJ);\n const intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0)\n * Math.max(intersectionXmax - intersectionXmin, 0.0);\n return intersectionArea / (areaI + areaJ - intersectionArea);\n}\n\nexport function nonMaxSuppression(\n boxes: tf.Tensor2D,\n scores: number[],\n maxOutputSize: number,\n iouThreshold: number,\n scoreThreshold: number,\n): number[] {\n const numBoxes = boxes.shape[0];\n const outputSize = Math.min(\n maxOutputSize,\n numBoxes,\n );\n\n const candidates = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .filter((c) => c.score > scoreThreshold)\n .sort((c1, c2) => c2.score - c1.score);\n\n const suppressFunc = (x: number) => (x <= iouThreshold ? 1 : 0);\n\n const selected: number[] = [];\n\n candidates.forEach((c) => {\n if (selected.length >= outputSize) {\n return;\n }\n const originalScore = c.score;\n\n for (let j = selected.length - 1; j >= 0; --j) {\n const iou = IOU(boxes, c.boxIndex, selected[j]);\n if (iou === 0.0) continue;\n c.score *= suppressFunc(iou);\n if (c.score <= scoreThreshold) break;\n }\n if (originalScore === c.score) {\n selected.push(c.boxIndex);\n }\n });\n\n return selected;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { OutputLayerParams } from './types';\n\nfunction getCenterCoordinatesAndSizesLayer(x: tf.Tensor2D) {\n const vec = tf.unstack(tf.transpose(x, [1, 0]));\n\n const sizes = [\n tf.sub(vec[2], vec[0]),\n tf.sub(vec[3], vec[1]),\n ];\n\n const centers = [\n tf.add(vec[0], tf.div(sizes[0], tf.scalar(2))),\n tf.add(vec[1], tf.div(sizes[1], tf.scalar(2))),\n ];\n\n return {\n sizes,\n centers,\n };\n}\n\nfunction decodeBoxesLayer(x0: tf.Tensor2D, x1: tf.Tensor2D) {\n const {\n sizes,\n centers,\n } = getCenterCoordinatesAndSizesLayer(x0);\n\n const vec = tf.unstack(tf.transpose(x1, [1, 0]));\n\n const div0_out = tf.div(tf.mul(tf.exp(tf.div(vec[2], tf.scalar(5))), sizes[0]), tf.scalar(2));\n const add0_out = tf.add(tf.mul(tf.div(vec[0], tf.scalar(10)), sizes[0]), centers[0]);\n\n const div1_out = tf.div(tf.mul(tf.exp(tf.div(vec[3], tf.scalar(5))), sizes[1]), tf.scalar(2));\n const add1_out = tf.add(tf.mul(tf.div(vec[1], tf.scalar(10)), sizes[1]), centers[1]);\n\n return tf.transpose(\n tf.stack([\n tf.sub(add0_out, div0_out),\n tf.sub(add1_out, div1_out),\n tf.add(add0_out, div0_out),\n tf.add(add1_out, div1_out),\n ]),\n [1, 0],\n );\n}\n\nexport function outputLayer(\n boxPredictions: tf.Tensor4D,\n classPredictions: tf.Tensor4D,\n params: OutputLayerParams,\n) {\n return tf.tidy(() => {\n const batchSize = boxPredictions.shape[0];\n\n let boxes = decodeBoxesLayer(\n tf.reshape(tf.tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]) as tf.Tensor2D,\n tf.reshape(boxPredictions, [-1, 4]) as tf.Tensor2D,\n );\n boxes = tf.reshape(\n boxes,\n [batchSize, (boxes.shape[0] / batchSize), 4],\n );\n\n const scoresAndClasses = tf.sigmoid(tf.slice(classPredictions, [0, 0, 1], [-1, -1, -1]));\n let scores = tf.slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]) as tf.Tensor;\n\n scores = tf.reshape(\n scores,\n [batchSize, scores.shape[1] as number],\n );\n\n const boxesByBatch = tf.unstack(boxes) as tf.Tensor2D[];\n const scoresByBatch = tf.unstack(scores) as tf.Tensor1D[];\n\n return {\n boxes: boxesByBatch,\n scores: scoresByBatch,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { convLayer } from '../common/index';\nimport { BoxPredictionParams } from './types';\n\nexport function boxPredictionLayer(\n x: tf.Tensor4D,\n params: BoxPredictionParams,\n) {\n return tf.tidy(() => {\n const batchSize = x.shape[0];\n\n const boxPredictionEncoding = tf.reshape(\n convLayer(x, params.box_encoding_predictor),\n [batchSize, -1, 1, 4],\n );\n const classPrediction = tf.reshape(\n convLayer(x, params.class_predictor),\n [batchSize, -1, 3],\n );\n\n return {\n boxPredictionEncoding,\n classPrediction,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { boxPredictionLayer } from './boxPredictionLayer';\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { PredictionLayerParams } from './types';\n\nexport function predictionLayer(\n x: tf.Tensor4D,\n conv11: tf.Tensor4D,\n params: PredictionLayerParams,\n) {\n return tf.tidy(() => {\n const conv0 = pointwiseConvLayer(x, params.conv_0, [1, 1]);\n const conv1 = pointwiseConvLayer(conv0, params.conv_1, [2, 2]);\n const conv2 = pointwiseConvLayer(conv1, params.conv_2, [1, 1]);\n const conv3 = pointwiseConvLayer(conv2, params.conv_3, [2, 2]);\n const conv4 = pointwiseConvLayer(conv3, params.conv_4, [1, 1]);\n const conv5 = pointwiseConvLayer(conv4, params.conv_5, [2, 2]);\n const conv6 = pointwiseConvLayer(conv5, params.conv_6, [1, 1]);\n const conv7 = pointwiseConvLayer(conv6, params.conv_7, [2, 2]);\n\n const boxPrediction0 = boxPredictionLayer(conv11, params.box_predictor_0);\n const boxPrediction1 = boxPredictionLayer(x, params.box_predictor_1);\n const boxPrediction2 = boxPredictionLayer(conv1, params.box_predictor_2);\n const boxPrediction3 = boxPredictionLayer(conv3, params.box_predictor_3);\n const boxPrediction4 = boxPredictionLayer(conv5, params.box_predictor_4);\n const boxPrediction5 = boxPredictionLayer(conv7, params.box_predictor_5);\n\n const boxPredictions = tf.concat([\n boxPrediction0.boxPredictionEncoding,\n boxPrediction1.boxPredictionEncoding,\n boxPrediction2.boxPredictionEncoding,\n boxPrediction3.boxPredictionEncoding,\n boxPrediction4.boxPredictionEncoding,\n boxPrediction5.boxPredictionEncoding,\n ], 1) as tf.Tensor4D;\n\n const classPredictions = tf.concat([\n boxPrediction0.classPrediction,\n boxPrediction1.classPrediction,\n boxPrediction2.classPrediction,\n boxPrediction3.classPrediction,\n boxPrediction4.classPrediction,\n boxPrediction5.classPrediction,\n ], 1) as tf.Tensor4D;\n\n return {\n boxPredictions,\n classPredictions,\n };\n });\n}\n", "export interface ISsdMobilenetv1Options {\n minConfidence?: number\n maxResults?: number\n}\n\nexport class SsdMobilenetv1Options {\n protected _name: string = 'SsdMobilenetv1Options'\n\n private _minConfidence: number\n\n private _maxResults: number\n\n constructor({ minConfidence, maxResults }: ISsdMobilenetv1Options = {}) {\n this._minConfidence = minConfidence || 0.5;\n this._maxResults = maxResults || 100;\n\n if (typeof this._minConfidence !== 'number' || this._minConfidence <= 0 || this._minConfidence >= 1) {\n throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);\n }\n\n if (typeof this._maxResults !== 'number') {\n throw new Error(`${this._name} - expected maxResults to be a number`);\n }\n }\n\n get minConfidence(): number { return this._minConfidence; }\n\n get maxResults(): number { return this._maxResults; }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { mobileNetV1 } from './mobileNetV1';\nimport { nonMaxSuppression } from './nonMaxSuppression';\nimport { outputLayer } from './outputLayer';\nimport { predictionLayer } from './predictionLayer';\nimport { ISsdMobilenetv1Options, SsdMobilenetv1Options } from './SsdMobilenetv1Options';\nimport { NetParams } from './types';\n\nexport class SsdMobilenetv1 extends NeuralNetwork {\n constructor() {\n super('SsdMobilenetv1');\n }\n\n public forwardInput(input: NetInput) {\n const { params } = this;\n\n if (!params) {\n throw new Error('SsdMobilenetv1 - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(512, false).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(512, false), 'float32');\n\n const x = tf.sub(tf.mul(batchTensor, tf.scalar(0.007843137718737125)), tf.scalar(1)) as tf.Tensor4D;\n const features = mobileNetV1(x, params.mobilenetv1);\n\n const {\n boxPredictions,\n classPredictions,\n } = predictionLayer(features.out, features.conv11, params.prediction_layer);\n\n return outputLayer(boxPredictions, classPredictions, params.output_layer);\n });\n }\n\n public async forward(input: TNetInput) {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async locateFaces(\n input: TNetInput,\n options: ISsdMobilenetv1Options = {},\n ): Promise {\n const { maxResults, minConfidence } = new SsdMobilenetv1Options(options);\n\n const netInput = await toNetInput(input);\n\n const {\n boxes: _boxes,\n scores: _scores,\n } = this.forwardInput(netInput);\n\n // TODO batches\n const boxes = _boxes[0];\n const scores = _scores[0];\n for (let i = 1; i < _boxes.length; i++) {\n _boxes[i].dispose();\n _scores[i].dispose();\n }\n\n // TODO find a better way to filter by minConfidence\n const scoresData = Array.from(await scores.data());\n\n const iouThreshold = 0.5;\n const indices = nonMaxSuppression(\n boxes,\n scoresData as number[],\n maxResults,\n iouThreshold,\n minConfidence,\n );\n\n const reshapedDims = netInput.getReshapedInputDimensions(0);\n const inputSize = netInput.inputSize as number;\n const padX = inputSize / reshapedDims.width;\n const padY = inputSize / reshapedDims.height;\n\n const boxesData = boxes.arraySync();\n const results = indices\n .map((idx) => {\n const [top, bottom] = [\n Math.max(0, boxesData[idx][0]),\n Math.min(1.0, boxesData[idx][2]),\n ].map((val) => val * padY);\n const [left, right] = [\n Math.max(0, boxesData[idx][1]),\n Math.min(1.0, boxesData[idx][3]),\n ].map((val) => val * padX);\n return new FaceDetection(\n scoresData[idx] as number,\n new Rect(\n left,\n top,\n right - left,\n bottom - top,\n ),\n {\n height: netInput.getInputHeight(0),\n width: netInput.getInputWidth(0),\n },\n );\n });\n\n boxes.dispose();\n scores.dispose();\n\n return results;\n }\n\n protected getDefaultModelName(): string {\n return 'ssd_mobilenetv1_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import { SsdMobilenetv1 } from './SsdMobilenetv1';\n\nexport * from './SsdMobilenetv1';\nexport * from './SsdMobilenetv1Options';\n\nexport function createSsdMobilenetv1(weights: Float32Array) {\n const net = new SsdMobilenetv1();\n net.extractWeights(weights);\n return net;\n}\n\nexport function createFaceDetectionNet(weights: Float32Array) {\n return createSsdMobilenetv1(weights);\n}\n\n// alias for backward compatibily\nexport class FaceDetectionNet extends SsdMobilenetv1 {}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(0.738768, 0.874946),\n new Point(2.42204, 2.65704),\n new Point(4.30971, 7.04493),\n new Point(10.246, 4.59428),\n new Point(12.6868, 11.8741),\n];\n\nexport const BOX_ANCHORS_SEPARABLE = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB_SEPARABLE: [number, number, number] = [117.001, 114.697, 97.404];\n\nexport const DEFAULT_MODEL_NAME = 'tiny_yolov2_model';\nexport const DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model';\n", "import { Point } from '../classes/Point';\n\nexport type TinyYolov2Config = {\n withSeparableConvs: boolean\n iouThreshold: number\n anchors: Point[]\n classes: string[]\n meanRgb?: [number, number, number]\n withClassScores?: boolean,\n filterSizes?: number[]\n isFirstLayerConv2d?: boolean\n}\n\nconst isNumber = (arg: any) => typeof arg === 'number';\n\nexport function validateConfig(config: any) {\n if (!config) {\n throw new Error(`invalid config: ${config}`);\n }\n\n if (typeof config.withSeparableConvs !== 'boolean') {\n throw new Error(`config.withSeparableConvs has to be a boolean, have: ${config.withSeparableConvs}`);\n }\n\n if (!isNumber(config.iouThreshold) || config.iouThreshold < 0 || config.iouThreshold > 1.0) {\n throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${config.iouThreshold}`);\n }\n\n if (\n !Array.isArray(config.classes)\n || !config.classes.length\n || !config.classes.every((c: any) => typeof c === 'string')\n ) {\n throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(config.classes)}`);\n }\n\n if (\n !Array.isArray(config.anchors)\n || !config.anchors.length\n || !config.anchors.map((a: any) => a || {}).every((a: any) => isNumber(a.x) && isNumber(a.y))\n ) {\n throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(config.anchors)}`);\n }\n\n if (config.meanRgb && (\n !Array.isArray(config.meanRgb)\n || config.meanRgb.length !== 3\n || !config.meanRgb.every(isNumber)\n )) {\n throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(config.meanRgb)}`);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nexport function leaky(x: tf.Tensor4D): tf.Tensor4D {\n return tf.tidy(() => {\n const min = tf.mul(x, tf.scalar(0.10000000149011612));\n return tf.add(tf.relu(tf.sub(x, min)), min);\n // return tf.maximum(x, min)\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { leaky } from './leaky';\nimport { ConvWithBatchNorm } from './types';\n\nexport function convWithBatchNorm(x: tf.Tensor4D, params: ConvWithBatchNorm): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.conv2d(out, params.conv.filters, [1, 1], 'valid');\n out = tf.sub(out, params.bn.sub);\n out = tf.mul(out, params.bn.truediv);\n out = tf.add(out, params.conv.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { SeparableConvParams } from '../common/types';\nimport { leaky } from './leaky';\n\nexport function depthwiseSeparableConv(x: tf.Tensor4D, params: SeparableConvParams): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.separableConv2d(out, params.depthwise_filter, params.pointwise_filter, [1, 1], 'valid');\n out = tf.add(out, params.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { extractConvParamsFactory } from '../common/index';\nimport { extractSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightsFactory } from '../common/extractWeightsFactory';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n\n function extractBatchNormParams(size: number, mappedPrefix: string): BatchNorm {\n const sub = tf.tensor1d(extractWeights(size));\n const truediv = tf.tensor1d(extractWeights(size));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/sub` },\n { paramPath: `${mappedPrefix}/truediv` },\n );\n\n return { sub, truediv };\n }\n\n function extractConvWithBatchNormParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv`);\n const bn = extractBatchNormParams(channelsOut, `${mappedPrefix}/bn`);\n\n return { conv, bn };\n }\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParams(\n weights: Float32Array,\n config: TinyYolov2Config,\n boxEncodingSize: number,\n filterSizes: number[],\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n\n const conv0 = config.isFirstLayerConv2d\n ? extractConvParams(s0, s1, 3, 'conv0')\n : extractSeparableConvParams(s0, s1, 'conv0');\n const conv1 = extractSeparableConvParams(s1, s2, 'conv1');\n const conv2 = extractSeparableConvParams(s2, s3, 'conv2');\n const conv3 = extractSeparableConvParams(s3, s4, 'conv3');\n const conv4 = extractSeparableConvParams(s4, s5, 'conv4');\n const conv5 = extractSeparableConvParams(s5, s6, 'conv5');\n const conv6 = s7 ? extractSeparableConvParams(s6, s7, 'conv6') : undefined;\n const conv7 = s8 ? extractSeparableConvParams(s7, s8, 'conv7') : undefined;\n const conv8 = extractConvParams(s8 || s7 || s6, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n } else {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n const conv0 = extractConvWithBatchNormParams(s0, s1, 'conv0');\n const conv1 = extractConvWithBatchNormParams(s1, s2, 'conv1');\n const conv2 = extractConvWithBatchNormParams(s2, s3, 'conv2');\n const conv3 = extractConvWithBatchNormParams(s3, s4, 'conv3');\n const conv4 = extractConvWithBatchNormParams(s4, s5, 'conv4');\n const conv5 = extractConvWithBatchNormParams(s5, s6, 'conv5');\n const conv6 = extractConvWithBatchNormParams(s6, s7, 'conv6');\n const conv7 = extractConvWithBatchNormParams(s7, s8, 'conv7');\n const conv8 = extractConvParams(s8, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n }\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams } from '../common/index';\nimport { disposeUnusedWeightTensors } from '../common/disposeUnusedWeightTensors';\nimport { loadSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightEntryFactory } from '../common/extractWeightEntryFactory';\nimport { ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractBatchNormParams(prefix: string): BatchNorm {\n const sub = extractWeightEntry(`${prefix}/sub`, 1);\n const truediv = extractWeightEntry(`${prefix}/truediv`, 1);\n return { sub, truediv };\n }\n\n function extractConvParams(prefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { filters, bias };\n }\n\n function extractConvWithBatchNormParams(prefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(`${prefix}/conv`);\n const bn = extractBatchNormParams(`${prefix}/bn`);\n return { conv, bn };\n }\n\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n config: TinyYolov2Config,\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n // eslint-disable-next-line no-mixed-operators\n const numFilters = (config.filterSizes && config.filterSizes.length || 9);\n params = {\n conv0: config.isFirstLayerConv2d ? extractConvParams('conv0') : extractSeparableConvParams('conv0'),\n conv1: extractSeparableConvParams('conv1'),\n conv2: extractSeparableConvParams('conv2'),\n conv3: extractSeparableConvParams('conv3'),\n conv4: extractSeparableConvParams('conv4'),\n conv5: extractSeparableConvParams('conv5'),\n conv6: numFilters > 7 ? extractSeparableConvParams('conv6') : undefined,\n conv7: numFilters > 8 ? extractSeparableConvParams('conv7') : undefined,\n conv8: extractConvParams('conv8'),\n };\n } else {\n params = {\n conv0: extractConvWithBatchNormParams('conv0'),\n conv1: extractConvWithBatchNormParams('conv1'),\n conv2: extractConvWithBatchNormParams('conv2'),\n conv3: extractConvWithBatchNormParams('conv3'),\n conv4: extractConvWithBatchNormParams('conv4'),\n conv5: extractConvWithBatchNormParams('conv5'),\n conv6: extractConvWithBatchNormParams('conv6'),\n conv7: extractConvWithBatchNormParams('conv7'),\n conv8: extractConvParams('conv8'),\n };\n }\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "export interface ITinyYolov2Options {\n inputSize?: number\n scoreThreshold?: number\n}\n\nexport class TinyYolov2Options {\n protected _name: string = 'TinyYolov2Options'\n\n private _inputSize: number\n\n private _scoreThreshold: number\n\n constructor({ inputSize, scoreThreshold }: ITinyYolov2Options = {}) {\n this._inputSize = inputSize || 416;\n this._scoreThreshold = scoreThreshold || 0.5;\n\n if (typeof this._inputSize !== 'number' || this._inputSize % 32 !== 0) {\n throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);\n }\n\n if (typeof this._scoreThreshold !== 'number' || this._scoreThreshold <= 0 || this._scoreThreshold >= 1) {\n throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`);\n }\n }\n\n get inputSize(): number { return this._inputSize; }\n\n get scoreThreshold(): number { return this._scoreThreshold; }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { BoundingBox } from '../classes/BoundingBox';\nimport { Dimensions } from '../classes/Dimensions';\nimport { ObjectDetection } from '../classes/ObjectDetection';\nimport { convLayer } from '../common/index';\nimport { ConvParams, SeparableConvParams } from '../common/types';\nimport { toNetInput } from '../dom/index';\nimport { NetInput } from '../dom/NetInput';\nimport { TNetInput } from '../dom/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { sigmoid } from '../ops/index';\nimport { nonMaxSuppression } from '../ops/nonMaxSuppression';\nimport { normalize } from '../ops/normalize';\nimport { TinyYolov2Config, validateConfig } from './config';\nimport { convWithBatchNorm } from './convWithBatchNorm';\nimport { depthwiseSeparableConv } from './depthwiseSeparableConv';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { leaky } from './leaky';\nimport { ITinyYolov2Options, TinyYolov2Options } from './TinyYolov2Options';\nimport { DefaultTinyYolov2NetParams, MobilenetParams, TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2Base extends NeuralNetwork {\n public static DEFAULT_FILTER_SIZES = [\n 3, 16, 32, 64, 128, 256, 512, 1024, 1024,\n ]\n\n private _config: TinyYolov2Config\n\n constructor(config: TinyYolov2Config) {\n super('TinyYolov2');\n validateConfig(config);\n this._config = config;\n }\n\n public get config(): TinyYolov2Config {\n return this._config;\n }\n\n public get withClassScores(): boolean {\n return this.config.withClassScores || this.config.classes.length > 1;\n }\n\n public get boxEncodingSize(): number {\n return 5 + (this.withClassScores ? this.config.classes.length : 0);\n }\n\n public runTinyYolov2(x: tf.Tensor4D, params: DefaultTinyYolov2NetParams): tf.Tensor4D {\n let out = convWithBatchNorm(x, params.conv0);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = convWithBatchNorm(out, params.conv6);\n out = convWithBatchNorm(out, params.conv7);\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public runMobilenet(x: tf.Tensor4D, params: MobilenetParams): tf.Tensor4D {\n let out = this.config.isFirstLayerConv2d\n ? leaky(convLayer(x, params.conv0 as ConvParams, 'valid', false))\n : depthwiseSeparableConv(x, params.conv0 as SeparableConvParams);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = params.conv6 ? depthwiseSeparableConv(out, params.conv6) : out;\n out = params.conv7 ? depthwiseSeparableConv(out, params.conv7) : out;\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public forwardInput(input: NetInput, inputSize: number): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyYolov2 - load model before inference');\n }\n\n return tf.tidy(() => {\n // let batchTensor = input.toBatchTensor(inputSize, false).toFloat()\n let batchTensor = tf.cast(input.toBatchTensor(inputSize, false), 'float32');\n batchTensor = this.config.meanRgb\n ? normalize(batchTensor, this.config.meanRgb)\n : batchTensor;\n batchTensor = batchTensor.div(tf.scalar(256)) as tf.Tensor4D;\n\n return this.config.withSeparableConvs\n ? this.runMobilenet(batchTensor, params as MobilenetParams)\n : this.runTinyYolov2(batchTensor, params as DefaultTinyYolov2NetParams);\n });\n }\n\n public async forward(input: TNetInput, inputSize: number): Promise {\n return this.forwardInput(await toNetInput(input), inputSize);\n }\n\n public async detect(input: TNetInput, forwardParams: ITinyYolov2Options = {}): Promise {\n const { inputSize, scoreThreshold } = new TinyYolov2Options(forwardParams);\n\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput, inputSize);\n const out0 = tf.tidy(() => tf.unstack(out)[0].expandDims()) as tf.Tensor4D;\n\n const inputDimensions = {\n width: netInput.getInputWidth(0),\n height: netInput.getInputHeight(0),\n };\n\n const results = await this.extractBoxes(out0, netInput.getReshapedInputDimensions(0), scoreThreshold);\n out.dispose();\n out0.dispose();\n\n const boxes = results.map((res) => res.box);\n const scores = results.map((res) => res.score);\n const classScores = results.map((res) => res.classScore);\n const classNames = results.map((res) => this.config.classes[res.label]);\n\n const indices = nonMaxSuppression(\n boxes.map((box) => box.rescale(inputSize)),\n scores,\n this.config.iouThreshold,\n true,\n );\n\n const detections = indices.map((idx) => new ObjectDetection(\n scores[idx],\n classScores[idx],\n classNames[idx],\n boxes[idx],\n inputDimensions,\n ));\n\n return detections;\n }\n\n protected getDefaultModelName(): string {\n return '';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this.config);\n }\n\n protected extractParams(weights: Float32Array) {\n const filterSizes = this.config.filterSizes || TinyYolov2Base.DEFAULT_FILTER_SIZES;\n\n const numFilters = filterSizes ? filterSizes.length : undefined;\n if (numFilters !== 7 && numFilters !== 8 && numFilters !== 9) {\n throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${numFilters} filterSizes in config`);\n }\n return extractParams(weights, this.config, this.boxEncodingSize, filterSizes);\n }\n\n protected async extractBoxes(\n outputTensor: tf.Tensor4D,\n inputBlobDimensions: Dimensions,\n scoreThreshold?: number,\n ) {\n const { width, height } = inputBlobDimensions;\n const inputSize = Math.max(width, height);\n const correctionFactorX = inputSize / width;\n const correctionFactorY = inputSize / height;\n\n const numCells = outputTensor.shape[1];\n const numBoxes = this.config.anchors.length;\n\n const [boxesTensor, scoresTensor, classScoresTensor] = tf.tidy(() => {\n const reshaped = outputTensor.reshape([numCells, numCells, numBoxes, this.boxEncodingSize]);\n\n const boxes = reshaped.slice([0, 0, 0, 0], [numCells, numCells, numBoxes, 4]);\n const scores = reshaped.slice([0, 0, 0, 4], [numCells, numCells, numBoxes, 1]);\n const classScores = this.withClassScores\n ? tf.softmax(reshaped.slice([0, 0, 0, 5], [numCells, numCells, numBoxes, this.config.classes.length]), 3)\n : tf.scalar(0);\n return [boxes, scores, classScores];\n });\n\n const results = [] as any;\n\n const scoresData = await scoresTensor.array();\n const boxesData = await boxesTensor.array();\n for (let row = 0; row < numCells; row++) {\n for (let col = 0; col < numCells; col++) {\n for (let anchor = 0; anchor < numBoxes; anchor++) {\n const score = sigmoid(scoresData[row][col][anchor][0]);\n if (!scoreThreshold || score > scoreThreshold) {\n const ctX = ((col + sigmoid(boxesData[row][col][anchor][0])) / numCells) * correctionFactorX;\n const ctY = ((row + sigmoid(boxesData[row][col][anchor][1])) / numCells) * correctionFactorY;\n const widthLocal = ((Math.exp(boxesData[row][col][anchor][2]) * this.config.anchors[anchor].x) / numCells) * correctionFactorX;\n const heightLocal = ((Math.exp(boxesData[row][col][anchor][3]) * this.config.anchors[anchor].y) / numCells) * correctionFactorY;\n\n const x = (ctX - (widthLocal / 2));\n const y = (ctY - (heightLocal / 2));\n\n const pos = { row, col, anchor };\n const { classScore, label } = this.withClassScores\n ? await this.extractPredictedClass(classScoresTensor as tf.Tensor4D, pos)\n : { classScore: 1, label: 0 };\n\n results.push({\n box: new BoundingBox(x, y, x + widthLocal, y + heightLocal),\n score,\n classScore: score * classScore,\n label,\n ...pos,\n });\n }\n }\n }\n }\n\n boxesTensor.dispose();\n scoresTensor.dispose();\n classScoresTensor.dispose();\n\n return results;\n }\n\n private async extractPredictedClass(classesTensor: tf.Tensor4D, pos: { row: number, col: number, anchor: number }) {\n const { row, col, anchor } = pos;\n const classesData = await classesTensor.array();\n return Array(this.config.classes.length).fill(0)\n .map((_, i) => classesData[row][col][anchor][i])\n .map((classScore, label) => ({\n classScore,\n label,\n }))\n .reduce((max, curr) => (max.classScore > curr.classScore ? max : curr));\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/types';\nimport { TNetInput } from '../dom/types';\nimport {\n BOX_ANCHORS,\n BOX_ANCHORS_SEPARABLE,\n DEFAULT_MODEL_NAME,\n DEFAULT_MODEL_NAME_SEPARABLE_CONV,\n IOU_THRESHOLD,\n MEAN_RGB_SEPARABLE,\n} from './const';\nimport { TinyYolov2Base } from './TinyYolov2Base';\nimport { ITinyYolov2Options } from './TinyYolov2Options';\nimport { TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2 extends TinyYolov2Base {\n constructor(withSeparableConvs: boolean = true) {\n const config = {\n withSeparableConvs,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n ...(withSeparableConvs\n ? {\n anchors: BOX_ANCHORS_SEPARABLE,\n meanRgb: MEAN_RGB_SEPARABLE,\n }\n : {\n anchors: BOX_ANCHORS,\n withClassScores: true,\n }),\n };\n\n super(config);\n }\n\n public get withSeparableConvs(): boolean {\n return this.config.withSeparableConvs;\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME;\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { TinyYolov2 } from './TinyYolov2';\n\nexport * from './TinyYolov2Options';\n\nexport * from './config';\nexport * from './types';\n\nexport { TinyYolov2 };\n\nexport function createTinyYolov2(weights: Float32Array, withSeparableConvs: boolean = true) {\n const net = new TinyYolov2(withSeparableConvs);\n net.extractWeights(weights);\n return net;\n}\n", "import { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\n\nexport interface ITinyFaceDetectorOptions extends ITinyYolov2Options {}\n\nexport class TinyFaceDetectorOptions extends TinyYolov2Options {\n protected _name: string = 'TinyFaceDetectorOptions'\n}\n", "export class ComposableTask {\n public async then(\n // eslint-disable-next-line no-unused-vars\n onfulfilled: (value: T) => T | PromiseLike,\n ): Promise {\n return onfulfilled(await this.run());\n }\n\n public async run(): Promise {\n throw new Error('ComposableTask - run is not implemented');\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\n\nexport async function extractAllFacesAndComputeResults, TResult>(\n parentResults: TSource[],\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResults: (faces: Array) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment: (parentResult: WithFaceLandmarks) => FaceDetection = ({ alignedRect }) => alignedRect,\n) {\n const faceBoxes = parentResults.map((parentResult) => (isWithFaceLandmarks(parentResult)\n ? getRectForAlignment(parentResult)\n : parentResult.detection));\n const faces: Array = extractedFaces || (\n input instanceof tf.Tensor\n ? await extractFaceTensors(input, faceBoxes)\n : await extractFaces(input, faceBoxes)\n );\n\n const results = await computeResults(faces);\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return results;\n}\n\nexport async function extractSingleFaceAndComputeResult, TResult>(\n parentResult: TSource,\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResult: (face: HTMLCanvasElement | tf.Tensor3D) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment?: (parentResultLocal: WithFaceLandmarks) => FaceDetection,\n) {\n return extractAllFacesAndComputeResults(\n [parentResult],\n input,\n async (faces) => computeResult(faces[0]),\n extractedFaces,\n getRectForAlignment,\n );\n}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB: [number, number, number] = [117.001, 114.697, 97.404];\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/index';\nimport { TNetInput } from '../dom/index';\nimport { ITinyYolov2Options } from '../tinyYolov2/index';\nimport { TinyYolov2Base } from '../tinyYolov2/TinyYolov2Base';\nimport { TinyYolov2NetParams } from '../tinyYolov2/types';\nimport { BOX_ANCHORS, IOU_THRESHOLD, MEAN_RGB } from './const';\n\nexport class TinyFaceDetector extends TinyYolov2Base {\n constructor() {\n const config = {\n withSeparableConvs: true,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n anchors: BOX_ANCHORS,\n meanRgb: MEAN_RGB,\n isFirstLayerConv2d: true,\n filterSizes: [3, 16, 32, 64, 128, 256, 512],\n };\n\n super(config);\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_face_detector_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { AgeGenderNet } from '../ageGenderNet/AgeGenderNet';\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet';\nimport { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { ITinyYolov2Options, TinyYolov2 } from '../tinyYolov2/index';\n\nexport const nets = {\n ssdMobilenetv1: new SsdMobilenetv1(),\n tinyFaceDetector: new TinyFaceDetector(),\n tinyYolov2: new TinyYolov2(),\n faceLandmark68Net: new FaceLandmark68Net(),\n faceLandmark68TinyNet: new FaceLandmark68TinyNet(),\n faceRecognitionNet: new FaceRecognitionNet(),\n faceExpressionNet: new FaceExpressionNet(),\n ageGenderNet: new AgeGenderNet(),\n};\n\n/**\n * Attempts to detect all faces in an image using SSD Mobilenetv1 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const ssdMobilenetv1 = (input: TNetInput, options: SsdMobilenetv1Options): Promise => nets.ssdMobilenetv1.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Face Detector.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyFaceDetector = (input: TNetInput, options: TinyFaceDetectorOptions): Promise => nets.tinyFaceDetector.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Yolov2 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyYolov2Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyYolov2 = (input: TNetInput, options: ITinyYolov2Options): Promise => nets.tinyYolov2.locateFaces(input, options);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarks = (input: TNetInput): Promise => nets.faceLandmark68Net.detectLandmarks(input);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image\n * using a tinier version of the 68 point face landmark model, which is slightly\n * faster at inference, but also slightly less accurate.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarksTiny = (input: TNetInput): Promise => nets.faceLandmark68TinyNet.detectLandmarks(input);\n\n/**\n * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image,\n * which uniquely represents the features of that persons face. The computed face descriptor can\n * be used to measure the similarity between faces, by computing the euclidean distance of two\n * face descriptors.\n *\n * @param inputs The face image extracted from the aligned bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Face descriptor with 128 entries or array thereof in case of batch input.\n */\nexport const computeFaceDescriptor = (input: TNetInput): Promise => nets.faceRecognitionNet.computeFaceDescriptor(input);\n\n/**\n * Recognizes the facial expressions from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Facial expressions with corresponding probabilities or array thereof in case of batch input.\n */\nexport const recognizeFaceExpressions = (input: TNetInput): Promise => nets.faceExpressionNet.predictExpressions(input);\n\n/**\n * Predicts age and gender from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Predictions with age, gender and gender probability or array thereof in case of batch input.\n */\nexport const predictAgeAndGender = (input: TNetInput): Promise => nets.ageGenderNet.predictAgeAndGender(input);\n\nexport const loadSsdMobilenetv1Model = (url: string) => nets.ssdMobilenetv1.load(url);\nexport const loadTinyFaceDetectorModel = (url: string) => nets.tinyFaceDetector.load(url);\nexport const loadTinyYolov2Model = (url: string) => nets.tinyYolov2.load(url);\nexport const loadFaceLandmarkModel = (url: string) => nets.faceLandmark68Net.load(url);\nexport const loadFaceLandmarkTinyModel = (url: string) => nets.faceLandmark68TinyNet.load(url);\nexport const loadFaceRecognitionModel = (url: string) => nets.faceRecognitionNet.load(url);\nexport const loadFaceExpressionModel = (url: string) => nets.faceExpressionNet.load(url);\nexport const loadAgeGenderModel = (url: string) => nets.ageGenderNet.load(url);\n\n// backward compatibility\nexport const loadFaceDetectionModel = loadSsdMobilenetv1Model;\nexport const locateFaces = ssdMobilenetv1;\nexport const detectLandmarks = detectFaceLandmarks;\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm';\n\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderTask,\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\n\nexport class PredictFaceExpressionsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const faceExpressionsByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map(\n (parentResult, i) => extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]),\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const faceExpressions = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithFaceExpressions(parentResult, faceExpressions);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictAllFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm';\n\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { TNetInput } from '../dom/index';\nimport { extendWithAge, WithAge } from '../factories/WithAge';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { extendWithGender, WithGender } from '../factories/WithGender';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllFaceExpressionsTask,\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class PredictAgeAndGenderTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase>[], TSource[]> {\n public async run(): Promise>[]> {\n const parentResults = await this.parentTask;\n\n const ageAndGenderByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map((parentResult, i) => {\n const { age, gender, genderProbability } = ageAndGenderByFace[i];\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n });\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase> | undefined, TSource | undefined> {\n public async run(): Promise> | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { age, gender, genderProbability } = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictAllAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDescriptor, WithFaceDescriptor } from '../factories/WithFaceDescriptor';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class ComputeFaceDescriptorsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n ) {\n super();\n }\n}\n\nexport class ComputeAllFaceDescriptorsTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const descriptors = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n (faces) => Promise.all(faces.map((face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise)),\n null,\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return descriptors.map((descriptor, i) => extendWithFaceDescriptor(parentResults[i], descriptor));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n\nexport class ComputeSingleFaceDescriptorTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n const descriptor = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise,\n null,\n // eslint-disable-next-line no-shadow\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return extendWithFaceDescriptor(parentResult, descriptor);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm';\n\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class DetectFaceLandmarksTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected useTinyLandmarkNet: boolean,\n ) {\n super();\n }\n\n protected get landmarkNet(): FaceLandmark68Net | FaceLandmark68TinyNet {\n return this.useTinyLandmarkNet\n ? nets.faceLandmark68TinyNet\n : nets.faceLandmark68Net;\n }\n}\n\nexport class DetectAllFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n const detections = parentResults.map((res) => res.detection);\n\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, detections)\n : await extractFaces(this.input, detections);\n\n const faceLandmarksByFace = await Promise.all(faces.map(\n (face) => this.landmarkNet.detectLandmarks(face),\n )) as FaceLandmarks68[];\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return parentResults.map((parentResult, i) => extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i]));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class DetectSingleFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { detection } = parentResult;\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, [detection])\n : await extractFaces(this.input, [detection]);\n\n const landmarks = await this.landmarkNet.detectLandmarks(faces[0]) as FaceLandmarks68;\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return extendWithFaceLandmarks(parentResult, landmarks);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { TinyYolov2Options } from '../tinyYolov2/index';\nimport { ComposableTask } from './ComposableTask';\nimport { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';\nimport { nets } from './nets';\nimport { PredictAllAgeAndGenderTask, PredictSingleAgeAndGenderTask } from './PredictAgeAndGenderTask';\nimport { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionsTask } from './PredictFaceExpressionsTask';\nimport { FaceDetectionOptions } from './types';\n\nexport class DetectFacesTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n ) {\n super();\n }\n}\n\nexport class DetectAllFacesTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const { input, options } = this;\n\n // eslint-disable-next-line no-nested-ternary\n const faceDetectionFunction = options instanceof TinyFaceDetectorOptions\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyFaceDetector.locateFaces(input, options)\n : (\n // eslint-disable-next-line no-nested-ternary\n options instanceof SsdMobilenetv1Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.ssdMobilenetv1.locateFaces(input, options)\n : (\n options instanceof TinyYolov2Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyYolov2.locateFaces(input, options)\n : null\n )\n );\n\n if (!faceDetectionFunction) {\n throw new Error('detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options');\n }\n\n return faceDetectionFunction(input);\n }\n\n private runAndExtendWithFaceDetections(): Promise[]> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise[]>(async (resolve) => {\n const detections = await this.run();\n resolve(detections.map((detection) => extendWithFaceDetection({}, detection)));\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectAllFaceLandmarksTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n}\n\nexport class DetectSingleFaceTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const faceDetections = await new DetectAllFacesTask(this.input, this.options);\n let faceDetectionWithHighestScore = faceDetections[0];\n faceDetections.forEach((faceDetection) => {\n if (faceDetection.score > faceDetectionWithHighestScore.score) {\n faceDetectionWithHighestScore = faceDetection;\n }\n });\n return faceDetectionWithHighestScore;\n }\n\n private runAndExtendWithFaceDetection(): Promise | undefined> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise | undefined>(async (resolve) => {\n const detection = await this.run();\n resolve(detection ? extendWithFaceDetection<{}>({}, detection) : undefined);\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectSingleFaceLandmarksTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n}\n", "import { TNetInput } from '../dom/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { DetectAllFacesTask, DetectSingleFaceTask } from './DetectFacesTasks';\nimport { FaceDetectionOptions } from './types';\n\nexport function detectSingleFace(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectSingleFaceTask {\n return new DetectSingleFaceTask(input, options);\n}\n\nexport function detectAllFaces(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectAllFacesTask {\n return new DetectAllFacesTask(input, options);\n}\n", "import { TNetInput } from '../dom/index';\nimport { WithFaceDescriptor, WithFaceDetection, WithFaceLandmarks } from '../factories/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/index';\nimport { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\nimport { detectAllFaces } from './detectFaces';\n\n// export allFaces API for backward compatibility\n\nexport async function allFacesSsdMobilenetv1(\n input: TNetInput,\n minConfidence?: number,\n): Promise>>[]> {\n return detectAllFaces(input, new SsdMobilenetv1Options(minConfidence ? { minConfidence } : {}))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport async function allFacesTinyYolov2(\n input: TNetInput,\n forwardParams: ITinyYolov2Options = {},\n): Promise>>[]> {\n return detectAllFaces(input, new TinyYolov2Options(forwardParams))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport const allFaces = allFacesSsdMobilenetv1;\n", "export function euclideanDistance(arr1: number[] | Float32Array, arr2: number[] | Float32Array) {\n if (arr1.length !== arr2.length)\n throw new Error('euclideanDistance: arr1.length !== arr2.length')\n\n const desc1 = Array.from(arr1)\n const desc2 = Array.from(arr2)\n\n return Math.sqrt(\n desc1\n .map((val, i) => val - desc2[i])\n .reduce((res, diff) => res + Math.pow(diff, 2), 0)\n )\n}", "import { FaceMatch } from '../classes/FaceMatch';\nimport { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors';\nimport { euclideanDistance } from '../euclideanDistance';\nimport { WithFaceDescriptor } from '../factories/index';\n\nexport class FaceMatcher {\n private _labeledDescriptors: LabeledFaceDescriptors[]\n\n private _distanceThreshold: number\n\n constructor(\n inputs: LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>,\n distanceThreshold: number = 0.6,\n ) {\n this._distanceThreshold = distanceThreshold;\n\n const inputArray = Array.isArray(inputs) ? inputs : [inputs];\n\n if (!inputArray.length) {\n throw new Error('FaceRecognizer.constructor - expected atleast one input');\n }\n\n let count = 1;\n const createUniqueLabel = () => `person ${count++}`;\n\n this._labeledDescriptors = inputArray.map((desc) => {\n if (desc instanceof LabeledFaceDescriptors) {\n return desc;\n }\n\n if (desc instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc]);\n }\n\n if (desc.descriptor && desc.descriptor instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]);\n }\n\n throw new Error('FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>');\n });\n }\n\n public get labeledDescriptors(): LabeledFaceDescriptors[] { return this._labeledDescriptors; }\n\n public get distanceThreshold(): number { return this._distanceThreshold; }\n\n public computeMeanDistance(queryDescriptor: Float32Array, descriptors: Float32Array[]): number {\n return descriptors\n .map((d) => euclideanDistance(d, queryDescriptor))\n .reduce((d1, d2) => d1 + d2, 0)\n / (descriptors.length || 1);\n }\n\n public matchDescriptor(queryDescriptor: Float32Array): FaceMatch {\n return this.labeledDescriptors\n .map(({ descriptors, label }) => new FaceMatch(\n label,\n this.computeMeanDistance(queryDescriptor, descriptors),\n ))\n .reduce((best, curr) => (best.distance < curr.distance ? best : curr));\n }\n\n public findBestMatch(queryDescriptor: Float32Array): FaceMatch {\n const bestMatch = this.matchDescriptor(queryDescriptor);\n return bestMatch.distance < this.distanceThreshold\n ? bestMatch\n : new FaceMatch('unknown', bestMatch.distance);\n }\n\n public toJSON(): any {\n return {\n distanceThreshold: this.distanceThreshold,\n labeledDescriptors: this.labeledDescriptors.map((ld) => ld.toJSON()),\n };\n }\n\n public static fromJSON(json: any): FaceMatcher {\n const labeledDescriptors = json.labeledDescriptors\n .map((ld: any) => LabeledFaceDescriptors.fromJSON(ld));\n return new FaceMatcher(labeledDescriptors, json.distanceThreshold);\n }\n}\n", "import { TinyFaceDetector } from './TinyFaceDetector';\n\nexport * from './TinyFaceDetector';\nexport * from './TinyFaceDetectorOptions';\n\nexport function createTinyFaceDetector(weights: Float32Array) {\n const net = new TinyFaceDetector();\n net.extractWeights(weights);\n return net;\n}\n", "import { Dimensions, IDimensions } from './classes/index';\nimport { FaceDetection } from './classes/FaceDetection';\nimport { FaceLandmarks } from './classes/FaceLandmarks';\nimport { extendWithFaceDetection, isWithFaceDetection } from './factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, isWithFaceLandmarks } from './factories/WithFaceLandmarks';\n\nexport function resizeResults(results: T, dimensions: IDimensions): T {\n\n const { width, height } = new Dimensions(dimensions.width, dimensions.height)\n\n if (width <= 0 || height <= 0) {\n throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({ width, height })}`)\n }\n\n if (Array.isArray(results)) {\n // return results.map(obj => resizeResults(obj, { width, height })) as any as T\n return (results as Array).map(obj => resizeResults(obj, { width, height } as IDimensions)) as any as T\n }\n\n if (isWithFaceLandmarks(results)) {\n const resizedDetection = results.detection.forSize(width, height)\n const resizedLandmarks = results.unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height)\n return extendWithFaceLandmarks(extendWithFaceDetection(results, resizedDetection), resizedLandmarks)\n }\n\n if (isWithFaceDetection(results)) {\n return extendWithFaceDetection(results, results.detection.forSize(width, height))\n }\n\n if (results instanceof FaceLandmarks || results instanceof FaceDetection) {\n return (results as any).forSize(width, height)\n }\n\n return results\n}", "import * as tf from '../dist/tfjs.esm';\nimport * as draw from './draw/index';\nimport * as utils from './utils/index';\nimport * as pkg from '../package.json';\n\nexport { tf, draw, utils };\n\nexport * from './ageGenderNet/index';\nexport * from './classes/index';\nexport * from './dom/index';\nexport * from './env/index';\nexport * from './faceExpressionNet/index';\nexport * from './faceLandmarkNet/index';\nexport * from './faceRecognitionNet/index';\nexport * from './factories/index';\nexport * from './globalApi/index';\nexport * from './ops/index';\nexport * from './ssdMobilenetv1/index';\nexport * from './tinyFaceDetector/index';\nexport * from './tinyYolov2/index';\nexport * from './euclideanDistance';\nexport * from './NeuralNetwork';\nexport * from './resizeResults';\n\nconst node = (typeof process !== 'undefined');\n// eslint-disable-next-line no-undef\nconst browser = (typeof navigator !== 'undefined') && (typeof navigator.userAgent !== 'undefined');\nexport const version = { faceapi: pkg.version as string, node, browser };\n"], "mappings": "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KAC7D,YAAc,SACd,cAAc,KAAK,UAGrB,UAAa,EAAG,EAAI,YAAa,EAAE,GACjC,gBAAoB,aAAK,kBAAkB,EAAoB,mBAC7C,SAAQ,eAAe,GAAI,QAAS,kBAElD,OAAM,CAAC,OAAQ,CAAC,EAAG,UAAW,EAAG,aAAc,QAAA,sBAE/C,OAAK,CAAC,OAAQ,CAAC,EAAG,MAAO,QAAA,SAAS,MAAO,CAAC,MAAO,mBAEjD,UAAS,CAAC,OAAQ,CAAC,EAAG,WAAY,EAAG,GAAI,QAAA,yBAEzC,MAAI,CAAC,OAAQ,CAAC,EAAG,OAAM,QAAA,SAAS,MAAO,CAAC,KAAM,EAAG,SAAU,MAC/D,IAAI,KAAK,eACT,cAAc,KAAK,WACnB,cAAc,KAAK,MACnB,cAAc,KAAK,YACnB,cAAc,KAAK,OACnB,cAAc,KAAK,eAGrB,WAAe,KAAK,CAAC,OAAQ,IAAK,QAAA,SAAS,MAAO,CAAC,KAAM,KAEzD,MAAA,eAAc,QAAQ,GAAK,SAAQ,8BAA8B,IAE1D,OAGF,6BAA+C,CACpD,WAAY,mBACZ,YAAa,MACb,WAAY,mCC2FwB,CACpC,mBACA,UACA,WACA,YACA,UACA,WACA,UACA,UACA,aACA,aACA,WACA,YACA,WACA,YACA,YACA,cACA,gBACA,qBACA,mBACA,kBACA,gBACA,qBACA,eACA,WACA,WACA,WACA,cACA,iBACA,aACA,2BACA,0BACA,aACA,6BACA,4BACA,aACA,UACA,WACA,oBACA,aACA,oBACA,mBACA,4BACA,0CACA,yCACA,WACA,iBACA,8BACA,+BACA,cACA,UACA,eACA,YACA,UACA,UACA,iBACA,YACA,UACA,WACA,oBACA,YACA,eACA,kBACA,2BACA,eACA,eACA,cACA,mBACA,eACA,WACA,WACA,eACA,YACA,YACA,gBACA,WACA,gBACA,eACA,UACA,YACA,iBACA,iBACA,gBACA,UACA,cACA,cACA,cACA,gBACA,qBACA,mBACA,wBACA,UACA,WACA,UACA,cACA,gBACA,UACA,kBACA,eACA,UACA,0BACA,0BACA,0BACA,eACA,aACA,eACA,WACA,YACA,UACA,YACA,WACA,YACA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AAW,kBACjC,SAAQ,cAAc,QAAS,CAAC,GAAG,aAAa,OAG/D,GAFA,UAAU,KAAK,QAEX,OAAO,MAAM,KAAO,aACtB,MAAO,QAET,cAAkB,OAAM,CACtB,QAAA,SACA,MAAO,CAAC,MAAO,EAAG,KAAM,aAAa,KAAM,EAAG,MAAO,sBAEtC,MAAK,CACpB,OAAQ,CAAC,EAAG,WACZ,QAAA,SACA,MAAO,CAAC,KAAM,CAAC,QAAS,eAG1B,UAAU,KAAK,WACf,UAAU,KAAK,UAEf,YACI,aAAa,OAAQ,UAAW,SAAU,MAAO,cACrD,MAAO,sBAGO,aAChB,IAAK,qBAAsB,WAAY,YAAa,sBAGpD,UAAQ,CAAC,OAAQ,CAAC,EAAG,aAAc,QAAA,SAAS,MAAO,CAAC,MAAO,mBAElD,SACb,GAAI,aAAe,MACjB,UAAU,KAAK,UACf,SAAa,qBAAa,uBAAuB,aACjD,OAAS,YAAU,CAAC,OAAQ,CAAC,EAAG,QAAS,QAAA,SAAS,MAAO,CAAC,QAG5D,MAAA,WAAU,QAAQ,GAAK,SAAQ,8BAA8B,IACtD,OAGF,8BAA+C,CACpD,WAAY,mBACZ,YAAa,QACb,WAAY,oCC4DwB,CACpC,UACA,cACA,oBACA,WACA,YACA,aACA,WACA,YACA,WACA,WACA,cACA,cACA,YACA,aACA,aACA,YACA,aACA,iBACA,eACA,oBACA,mBACA,mBACA,iBACA,sBACA,gBACA,YACA,YACA,kBACA,kBACA,eACA,cACA,4BACA,2BACA,cACA,8BACA,0BACA,cACA,WACA,YACA,qBACA,cACA,qBACA,oBACA,2CACA,0CACA,6BACA,YACA,iBACA,WACA,eACA,aACA,WACA,WACA,kBACA,aACA,WACA,YACA,qBACA,aACA,gBACA,iBACA,mBACA,4BACA,gBACA,gBACA,eACA,oBACA,gBACA,YACA,YACA,gBACA,aACA,aACA,iBACA,YACA,iBACA,gBACA,aACA,WACA,kBACA,kBACA,iBACA,WACA,iBACA,eACA,oBACA,mBACA,yBACA,eACA,YACA,WACA,eACA,iBACA,WACA,mBACA,gBACA,WACA,2BACA,2BACA,2BACA,gBACA,cACA,g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", "names": [] } diff --git a/dist/face-api.esm.json b/dist/face-api.esm.json index 1b4a898..bb5a09f 100644 --- a/dist/face-api.esm.json +++ b/dist/face-api.esm.json @@ -17,7 +17,7 @@ ] }, "src/utils/index.ts": { - "bytes": 1845, + "bytes": 1842, "imports": [ { "path": "dist/tfjs.esm.js" @@ -93,7 +93,7 @@ ] }, "src/ops/normalize.ts": { - "bytes": 486, + "bytes": 483, "imports": [ { "path": "dist/tfjs.esm.js" @@ -101,7 +101,7 @@ ] }, "src/ops/padToSquare.ts": { - "bytes": 1687, + "bytes": 1684, "imports": [ { "path": "dist/tfjs.esm.js" @@ -451,7 +451,7 @@ ] }, "src/dom/imageTensorToCanvas.ts": { - "bytes": 618, + "bytes": 615, "imports": [ { "path": "dist/tfjs.esm.js" @@ -490,7 +490,7 @@ ] }, "src/dom/NetInput.ts": { - "bytes": 5511, + "bytes": 5508, "imports": [ { "path": "dist/tfjs.esm.js" @@ -556,7 +556,7 @@ ] }, "src/dom/extractFaceTensors.ts": { - "bytes": 1733, + "bytes": 1730, "imports": [ { "path": "dist/tfjs.esm.js" @@ -609,7 +609,7 @@ "imports": [] }, "src/dom/loadWeightMap.ts": { - "bytes": 555, + "bytes": 552, "imports": [ { "path": "dist/tfjs.esm.js" @@ -631,7 +631,7 @@ ] }, "src/dom/types.ts": { - "bytes": 386, + "bytes": 383, "imports": [] }, "src/dom/index.ts": { @@ -703,7 +703,7 @@ ] }, "src/NeuralNetwork.ts": { - "bytes": 5113, + "bytes": 5110, "imports": [ { "path": "dist/tfjs.esm.js" @@ -720,7 +720,7 @@ ] }, "src/common/depthwiseSeparableConv.ts": { - "bytes": 417, + "bytes": 414, "imports": [ { "path": "dist/tfjs.esm.js" @@ -728,7 +728,7 @@ ] }, "src/faceFeatureExtractor/denseBlock.ts": { - "bytes": 2041, + "bytes": 2038, "imports": [ { "path": "dist/tfjs.esm.js" @@ -739,7 +739,7 @@ ] }, "src/common/convLayer.ts": { - "bytes": 431, + "bytes": 428, "imports": [ { "path": "dist/tfjs.esm.js" @@ -751,7 +751,7 @@ "imports": [] }, "src/common/extractConvParamsFactory.ts": { - "bytes": 769, + "bytes": 766, "imports": [ { "path": "dist/tfjs.esm.js" @@ -759,7 +759,7 @@ ] }, "src/common/extractFCParamsFactory.ts": { - "bytes": 714, + "bytes": 711, "imports": [ { "path": "dist/tfjs.esm.js" @@ -767,11 +767,11 @@ ] }, "src/common/types.ts": { - "bytes": 800, + "bytes": 797, "imports": [] }, "src/common/extractSeparableConvParamsFactory.ts": { - "bytes": 1536, + "bytes": 1533, "imports": [ { "path": "dist/tfjs.esm.js" @@ -848,7 +848,7 @@ ] }, "src/common/loadConvParamsFactory.ts": { - "bytes": 469, + "bytes": 466, "imports": [] }, "src/faceFeatureExtractor/loadParamsFactory.ts": { @@ -863,7 +863,7 @@ ] }, "src/faceFeatureExtractor/extractParamsFromWeigthMap.ts": { - "bytes": 841, + "bytes": 838, "imports": [ { "path": "src/common/index.ts" @@ -874,7 +874,7 @@ ] }, "src/faceFeatureExtractor/FaceFeatureExtractor.ts": { - "bytes": 1809, + "bytes": 1806, "imports": [ { "path": "dist/tfjs.esm.js" @@ -900,7 +900,7 @@ ] }, "src/common/fullyConnectedLayer.ts": { - "bytes": 266, + "bytes": 263, "imports": [ { "path": "dist/tfjs.esm.js" @@ -916,7 +916,7 @@ ] }, "src/faceProcessor/extractParamsFromWeigthMap.ts": { - "bytes": 826, + "bytes": 823, "imports": [ { "path": "src/common/index.ts" @@ -924,11 +924,11 @@ ] }, "src/faceProcessor/util.ts": { - "bytes": 424, + "bytes": 421, "imports": [] }, "src/faceProcessor/FaceProcessor.ts": { - "bytes": 3037, + "bytes": 3034, "imports": [ { "path": "dist/tfjs.esm.js" @@ -958,7 +958,7 @@ "imports": [] }, "src/faceExpressionNet/FaceExpressionNet.ts": { - "bytes": 1667, + "bytes": 1664, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1092,7 +1092,7 @@ ] }, "src/xception/extractParamsFromWeigthMap.ts": { - "bytes": 3133, + "bytes": 3130, "imports": [ { "path": "src/common/index.ts" @@ -1106,7 +1106,7 @@ ] }, "src/xception/TinyXception.ts": { - "bytes": 3151, + "bytes": 3148, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1143,7 +1143,7 @@ ] }, "src/ageGenderNet/extractParamsFromWeigthMap.ts": { - "bytes": 894, + "bytes": 891, "imports": [ { "path": "src/common/index.ts" @@ -1151,11 +1151,11 @@ ] }, "src/ageGenderNet/types.ts": { - "bytes": 528, + "bytes": 525, "imports": [] }, "src/ageGenderNet/AgeGenderNet.ts": { - "bytes": 4272, + "bytes": 4269, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1198,7 +1198,7 @@ ] }, "src/faceLandmarkNet/FaceLandmark68NetBase.ts": { - "bytes": 3720, + "bytes": 3717, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1232,7 +1232,7 @@ ] }, "src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts": { - "bytes": 805, + "bytes": 802, "imports": [ { "path": "src/common/index.ts" @@ -1254,7 +1254,7 @@ ] }, "src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts": { - "bytes": 1819, + "bytes": 1816, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1305,7 +1305,7 @@ ] }, "src/faceRecognitionNet/scaleLayer.ts": { - "bytes": 232, + "bytes": 229, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1313,7 +1313,7 @@ ] }, "src/faceRecognitionNet/convLayer.ts": { - "bytes": 853, + "bytes": 850, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1324,7 +1324,7 @@ ] }, "src/faceRecognitionNet/extractParams.ts": { - "bytes": 4910, + "bytes": 4907, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1338,7 +1338,7 @@ ] }, "src/faceRecognitionNet/extractParamsFromWeigthMap.ts": { - "bytes": 3104, + "bytes": 3101, "imports": [ { "path": "src/common/index.ts" @@ -1349,7 +1349,7 @@ ] }, "src/faceRecognitionNet/residualLayer.ts": { - "bytes": 1345, + "bytes": 1342, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1360,7 +1360,7 @@ ] }, "src/faceRecognitionNet/FaceRecognitionNet.ts": { - "bytes": 2984, + "bytes": 2981, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1442,7 +1442,7 @@ ] }, "src/ssdMobilenetv1/extractParams.ts": { - "bytes": 8342, + "bytes": 8339, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1453,7 +1453,7 @@ ] }, "src/ssdMobilenetv1/extractParamsFromWeigthMap.ts": { - "bytes": 5785, + "bytes": 5782, "imports": [ { "path": "src/common/index.ts" @@ -1464,7 +1464,7 @@ ] }, "src/ssdMobilenetv1/pointwiseConvLayer.ts": { - "bytes": 394, + "bytes": 391, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1472,7 +1472,7 @@ ] }, "src/ssdMobilenetv1/mobileNetV1.ts": { - "bytes": 1814, + "bytes": 1811, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1483,11 +1483,11 @@ ] }, "src/ssdMobilenetv1/nonMaxSuppression.ts": { - "bytes": 2190, + "bytes": 2187, "imports": [] }, "src/ssdMobilenetv1/outputLayer.ts": { - "bytes": 2190, + "bytes": 2187, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1495,7 +1495,7 @@ ] }, "src/ssdMobilenetv1/boxPredictionLayer.ts": { - "bytes": 620, + "bytes": 617, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1506,7 +1506,7 @@ ] }, "src/ssdMobilenetv1/predictionLayer.ts": { - "bytes": 2058, + "bytes": 2055, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1524,7 +1524,7 @@ "imports": [] }, "src/ssdMobilenetv1/SsdMobilenetv1.ts": { - "bytes": 3829, + "bytes": 3826, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1591,7 +1591,7 @@ "imports": [] }, "src/tinyYolov2/leaky.ts": { - "bytes": 274, + "bytes": 271, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1599,7 +1599,7 @@ ] }, "src/tinyYolov2/convWithBatchNorm.ts": { - "bytes": 535, + "bytes": 532, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1610,7 +1610,7 @@ ] }, "src/tinyYolov2/depthwiseSeparableConv.ts": { - "bytes": 505, + "bytes": 502, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1621,7 +1621,7 @@ ] }, "src/tinyYolov2/extractParams.ts": { - "bytes": 3921, + "bytes": 3918, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1638,7 +1638,7 @@ ] }, "src/tinyYolov2/extractParamsFromWeigthMap.ts": { - "bytes": 3287, + "bytes": 3284, "imports": [ { "path": "src/common/disposeUnusedWeightTensors.ts" @@ -1656,7 +1656,7 @@ "imports": [] }, "src/tinyYolov2/TinyYolov2Base.ts": { - "bytes": 9703, + "bytes": 9700, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1709,7 +1709,7 @@ ] }, "src/tinyYolov2/TinyYolov2.ts": { - "bytes": 1804, + "bytes": 1801, "imports": [ { "path": "src/classes/index.ts" @@ -1723,7 +1723,7 @@ ] }, "src/tinyYolov2/types.ts": { - "bytes": 955, + "bytes": 952, "imports": [] }, "src/tinyYolov2/index.ts": { @@ -1756,7 +1756,7 @@ "imports": [] }, "src/globalApi/extractFacesAndComputeResults.ts": { - "bytes": 2040, + "bytes": 2037, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1778,7 +1778,7 @@ ] }, "src/tinyFaceDetector/TinyFaceDetector.ts": { - "bytes": 1473, + "bytes": 1470, "imports": [ { "path": "src/classes/index.ts" @@ -1821,7 +1821,7 @@ ] }, "src/globalApi/PredictFaceExpressionsTask.ts": { - "bytes": 3830, + "bytes": 3827, "imports": [ { "path": "src/factories/WithFaceExpressions.ts" @@ -1844,7 +1844,7 @@ ] }, "src/globalApi/PredictAgeAndGenderTask.ts": { - "bytes": 4011, + "bytes": 4008, "imports": [ { "path": "src/factories/WithAge.ts" @@ -1893,7 +1893,7 @@ ] }, "src/globalApi/DetectFaceLandmarksTasks.ts": { - "bytes": 4005, + "bytes": 4002, "imports": [ { "path": "dist/tfjs.esm.js" @@ -2067,7 +2067,7 @@ ] }, "src/index.ts": { - "bytes": 1027, + "bytes": 1024, "imports": [ { "path": "dist/tfjs.esm.js" @@ -2136,7 +2136,7 @@ "dist/face-api.esm.js.map": { "imports": [], "inputs": {}, - "bytes": 1350459 + "bytes": 1350282 }, "dist/face-api.esm.js": { "imports": [], diff --git a/dist/face-api.js.map b/dist/face-api.js.map index 41dd118..3f8461e 100644 --- a/dist/face-api.js.map +++ b/dist/face-api.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../src/env/isNodejs.ts", "../src/index.ts", "empty:/home/vlado/dev/face-api/node_modules/node-fetch/browser.js", "../node_modules/seedrandom/lib/alea.js", "../node_modules/seedrandom/lib/xor128.js", "../node_modules/seedrandom/lib/xorwow.js", "../node_modules/seedrandom/lib/xorshift7.js", "../node_modules/seedrandom/lib/xor4096.js", "../node_modules/seedrandom/lib/tychei.js", "empty:crypto", "../node_modules/seedrandom/seedrandom.js", "../node_modules/seedrandom/index.js", "empty:/home/vlado/dev/face-api/node_modules/string_decoder/lib/string_decoder.js", "empty:path", "empty:worker_threads", "empty:perf_hooks", "../node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.js", "../node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm.js", "../node_modules/@tensorflow/tfjs-core/src/backends/backend.ts", "../node_modules/@tensorflow/tfjs-core/src/util_base.ts", "../node_modules/@tensorflow/tfjs-core/src/environment.ts", "../node_modules/@tensorflow/tfjs-core/src/global_util.ts", "../node_modules/@tensorflow/tfjs-core/src/kernel_names.ts", "../node_modules/@tensorflow/tfjs-core/src/kernel_registry.ts", "../node_modules/@tensorflow/tfjs-core/src/util.ts", "../node_modules/@tensorflow/tfjs-core/src/profiler.ts", "../node_modules/@tensorflow/tfjs-core/src/tape.ts", "../node_modules/@tensorflow/tfjs-core/src/tensor_format.ts", "../node_modules/@tensorflow/tfjs-core/src/tensor.ts", "../node_modules/@tensorflow/tfjs-core/src/tensor_util.ts", "../node_modules/@tensorflow/tfjs-core/src/types.ts", "../node_modules/@tensorflow/tfjs-core/src/engine.ts", "../node_modules/@tensorflow/tfjs-core/src/device_util.ts", "../node_modules/@tensorflow/tfjs-core/src/flags.ts", "../node_modules/@tensorflow/tfjs-core/src/tensor_util_env.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/operation.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/complex.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tensor_ops_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tensor.ts", "../node_modules/@tensorflow/tfjs-core/src/io/types.ts", "../node_modules/@tensorflow/tfjs-core/src/io/io_utils.ts", "../node_modules/@tensorflow/tfjs-core/src/io/router_registry.ts", "../node_modules/@tensorflow/tfjs-core/src/io/indexed_db.ts", "../node_modules/@tensorflow/tfjs-core/src/io/local_storage.ts", "../node_modules/@tensorflow/tfjs-core/src/io/model_management.ts", "../node_modules/@tensorflow/tfjs-core/src/platforms/platform_browser.ts", "../node_modules/@tensorflow/tfjs-core/src/platforms/platform_node.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/buffer.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/cast.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/clone.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/print.ts", "../node_modules/@tensorflow/tfjs-core/src/base_side_effects.ts", "../node_modules/@tensorflow/tfjs-core/src/io/io.ts", "../node_modules/@tensorflow/tfjs-core/src/io/browser_files.ts", "../node_modules/@tensorflow/tfjs-core/src/io/progress.ts", "../node_modules/@tensorflow/tfjs-core/src/io/weights_loader.ts", "../node_modules/@tensorflow/tfjs-core/src/io/http.ts", "../node_modules/@tensorflow/tfjs-core/src/io/passthrough.ts", "../node_modules/@tensorflow/tfjs-core/src/math.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/mat_mul.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/one_hot.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/transpose.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/confusion_matrix.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/browser.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tensor3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/gather_nd_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/scatter_nd_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/slice_util.ts", "../node_modules/@tensorflow/tfjs-core/src/serialization.ts", "../node_modules/@tensorflow/tfjs-core/src/test_util.ts", "../node_modules/@tensorflow/tfjs-core/src/version.ts", "../node_modules/@tensorflow/tfjs-core/src/globals.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/add.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/floorDiv.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/div.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/mul.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/abs.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/acos.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/acosh.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/add_n.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/all.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/any.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/arg_max.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/arg_min.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/asin.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/asinh.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/atan.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/atan2.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/atanh.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/reshape.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/avg_pool.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/avg_pool_3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/concat.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sigmoid.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/slice.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tanh.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/basic_lstm_cell.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/batch_to_space_nd.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/batchnorm_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/batchnorm.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/batchnorm2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/batchnorm3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/batchnorm4d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/bincount.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/broadcast_to.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/ceil.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/clip_by_value.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/concat_1d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/concat_2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/concat_3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/concat_4d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv1d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv2d_backprop_input.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv2d_transpose.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv3d_backprop_input.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv3d_transpose.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/cos.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/cosh.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/cumsum.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/dense_bincount.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/depth_to_space.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/depthwise_conv2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/diag.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/dilation2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/broadcast_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/equal.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/where.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/zeros_like.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/div_no_nan.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/dot.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/elu.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/erf.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/exp.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/expand_dims.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/expm1.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tile.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/eye.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/fill.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/floor.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/gather.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/greater.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/greater_equal.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/imag.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/is_finite.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/is_inf.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/is_nan.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/leaky_relu.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/less.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/less_equal.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/linspace.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/local_response_normalization.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/log.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/log1p.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/neg.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/softplus.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/log_sigmoid.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/max.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sub.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sum.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/log_softmax.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/axis_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/log_sum_exp.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/logical_and.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/logical_not.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/logical_or.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/logical_xor.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/max_pool.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/max_pool_3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/max_pool_with_argmax.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/maximum.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/mean.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/min.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/minimum.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/mirror_pad.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/mod.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/square.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/moments.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/multi_rnn_cell.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/multinomial.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/not_equal.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/zeros.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/ones.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/ones_like.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/outer_product.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/pad.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/pad1d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/pad2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/pad3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/pad4d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/space_to_batch_nd.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/pool.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/pow.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/prelu.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/prod.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/rand.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/rand_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/random_gamma.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/random_normal.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/random_uniform.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/range.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/real.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/reciprocal.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/relu.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/relu6.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/reverse.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/reverse_1d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/reverse_2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/reverse_3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/reverse_4d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/round.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/rsqrt.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/scalar.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/selu.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/separable_conv2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/setdiff1d_async.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sign.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sin.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sinh.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/slice1d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/slice2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/slice3d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/slice4d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/softmax.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/spectral/fft.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/spectral/ifft.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/spectral/irfft.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/split.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/spectral/rfft.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sqrt.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/squared_difference.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/squeeze.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/stack.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/step.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/strided_slice.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tan.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tensor1d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tensor2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tensor4d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tensor5d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/tensor6d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/topk.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/truncated_normal.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/unique.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/unsorted_segment_sum.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/unstack.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/variable.ts", "../node_modules/@tensorflow/tfjs-core/src/backends/where_impl.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/where_async.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/boolean_mask.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/compare.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/binary_ops.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/norm.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/moving_average.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/scatter_nd.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sparse_to_dense_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/sparse_to_dense.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/gather_nd.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/dropout_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/dropout.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/signal_ops_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/in_top_k.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/fused_ops.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv2d_backprop_filter.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/fused_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/fused/conv2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/depthwise_conv2d_native_backprop_filter.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/depthwise_conv2d_native_backprop_input.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/fused/depthwise_conv2d.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/fused/mat_mul.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/signal/hamming_window.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/signal/hann_window.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/signal/frame.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/signal/stft.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/crop_and_resize.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/flip_left_right.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/rotate_with_offset.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/nonmax_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/non_max_suppression.ts", "../node_modules/@tensorflow/tfjs-core/src/backends/non_max_suppression_util.ts", "../node_modules/@tensorflow/tfjs-core/src/backends/non_max_suppression_impl.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/non_max_suppression_async.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/non_max_suppression_with_score.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/non_max_suppression_with_score_async.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/non_max_suppression_padded.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/non_max_suppression_padded_async.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/resize_bilinear.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/image/resize_nearest_neighbor.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/linalg/band_part.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/linalg/gram_schmidt.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/linalg/qr.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/loss_ops_utils.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/compute_weighted_loss.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/absolute_difference.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/cosine_distance.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/hinge_loss.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/huber_loss.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/log_loss.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/mean_squared_error.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/sigmoid_cross_entropy.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/losses/softmax_cross_entropy.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/ops.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/optimizer.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/adadelta_optimizer.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/adagrad_optimizer.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/adam_optimizer.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/adamax_optimizer.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/sgd_optimizer.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/momentum_optimizer.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/rmsprop_optimizer.ts", "../node_modules/@tensorflow/tfjs-core/src/optimizers/optimizer_constructors.ts", "../node_modules/@tensorflow/tfjs-core/src/train.ts", "../node_modules/@tensorflow/tfjs-core/src/browser_util.ts", "../node_modules/@tensorflow/tfjs-core/src/backends/backend_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/concat_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/reduce_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/rotate_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/array_ops_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/selu_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/erf_util.ts", "../node_modules/@tensorflow/tfjs-core/src/log.ts", "../node_modules/@tensorflow/tfjs-core/src/backends/complex_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/split_util.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/segment_util.ts", "../node_modules/@tensorflow/tfjs-core/src/backends/kernel_impls.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Abs_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Acos_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Acosh_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Add_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/AddN_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/ArgMax_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/ArgMin_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Asin_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Asinh_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Atan2_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Atan_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Atanh_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/avg_pool_3d_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/AvgPool3D_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/avg_pool_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/AvgPool_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/BatchMatMul_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/BatchToSpaceND_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/BroadcastTo_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Cast_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Ceil_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/ClipByValue_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/ComplexAbs_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Concat_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Conv2D_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Conv2DBackpropInput_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/conv3d_backprop_filter.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Conv3D_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Cos_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Cosh_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Cumsum_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/DepthwiseConv2dNative_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Dilation2D_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Elu_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Erf_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Exp_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/ExpandDims_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Expm1_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Floor_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/FloorDiv_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/FusedBatchNorm_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/GatherV2_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/GreaterEqual_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Identity_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/IsFinite_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/IsInf_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/IsNan_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/LeakyRelu_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Log1p_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Log_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/LogSoftmax_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/local_response_normalization_backprop.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/LRN_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/min_max_grad_util.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Max_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Maximum_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/max_pool_3d_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/MaxPool3D_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/ops/max_pool_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/MaxPool_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Mean_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Min_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Minimum_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/MirrorPad_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Mod_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Multiply_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Neg_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/OneHot_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/OnesLike_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Pack_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/PadV2_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Pow_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Prelu_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/RealDiv_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Reciprocal_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Relu6_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Relu_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Reshape_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/ResizeBilinear_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/ResizeNearestNeighbor_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Reverse_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Round_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Rsqrt_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Select_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Selu_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Sigmoid_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Sign_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Sin_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Sinh_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Slice_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Softmax_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Softplus_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/SpaceToBatchND_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/SplitV_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Sqrt_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Square_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/SquaredDifference_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Step_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Sub_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Sum_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Tan_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Tanh_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Tile_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Transpose_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/Unpack_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/UnsortedSegmentSum_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/gradients/ZerosLike_grad.ts", "../node_modules/@tensorflow/tfjs-core/src/register_all_gradients.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/abs.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/acos.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/acosh.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/add_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/add.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/all.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/any.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/arg_max.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/arg_min.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/as_scalar.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/as_type.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/as1d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/as2d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/as3d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/as4d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/as5d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/asin.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/asinh.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/atan.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/atan2.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/atanh.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/avg_pool.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/batch_to_space_nd.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/batchnorm.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/broadcast_to.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/cast.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/ceil.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/clip_by_value.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/concat.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/conv1d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/conv2d_transpose.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/conv2d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/cos.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/cosh.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/cumsum.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/depth_to_space.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/depthwise_conv2D_deprecated.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/depthwise_conv2d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/dilation2d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/div_no_nan.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/div_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/div.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/dot.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/elu.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/equal_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/equal.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/erf.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/exp.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/expand_dims.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/expm1.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/fft.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/flatten.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/floor.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/floorDiv.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/gather.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/greater_equal_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/greater_equal.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/greater_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/greater.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/ifft.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/irfft.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/is_finite.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/is_inf.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/is_nan.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/leaky_relu.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/less_equal_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/less_equal.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/less_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/less.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/local_response_normalization.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/log_sigmoid.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/log_softmax.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/log_sum_exp.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/log.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/log1p.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/logical_and.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/logical_not.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/logical_or.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/logical_xor.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/mat_mul.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/max_pool.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/max.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/maximum_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/maximum.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/mean.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/min.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/minimum_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/minimum.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/mirror_pad.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/mod_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/mod.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/mul_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/mul.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/neg.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/norm.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/not_equal_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/not_equal.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/one_hot.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/ones_like.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/pad.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/pool.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/pow_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/pow.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/prelu.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/prod.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/reciprocal.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/relu.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/relu6.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/reshape_as.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/reshape.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/resize_bilinear.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/resize_nearest_neighbor.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/reverse.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/rfft.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/round.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/rsqrt.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/selu.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/separable_conv2d.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/sigmoid.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/sign.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/sin.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/sinh.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/slice.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/softmax.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/softplus.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/space_to_batch_nd.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/split.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/sqrt.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/square.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/squared_difference.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/squared_difference_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/squeeze.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/stack.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/step.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/strided_slice.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/sub_strict.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/sub.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/sum.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/tan.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/tanh.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/tile.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/to_bool.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/to_float.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/to_int.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/topk.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/transpose.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/unique.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/unsorted_segment_sum.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/unstack.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/where.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/zeros_like.ts", "../node_modules/@tensorflow/tfjs-core/src/public/chained_ops/register_all_chained_ops.ts", "../node_modules/@tensorflow/tfjs-core/src/index.ts", "../node_modules/@tensorflow/tfjs-layers/src/exports_constraints.ts", "../node_modules/@tensorflow/tfjs-layers/src/backend/common.ts", "../node_modules/@tensorflow/tfjs-layers/src/errors.ts", "../node_modules/@tensorflow/tfjs-layers/src/utils/generic_utils.ts", "../node_modules/@tensorflow/tfjs-layers/src/constraints.ts", "../node_modules/@tensorflow/tfjs-layers/src/exports_initializers.ts", "../node_modules/@tensorflow/tfjs-layers/src/keras_format/common.ts", "../node_modules/@tensorflow/tfjs-layers/src/common.ts", "../node_modules/@tensorflow/tfjs-layers/src/utils/math_utils.ts", "../node_modules/@tensorflow/tfjs-layers/src/backend/tfjs_backend.ts", "../node_modules/@tensorflow/tfjs-layers/src/keras_format/initializer_config.ts", "../node_modules/@tensorflow/tfjs-layers/src/initializers.ts", "../node_modules/@tensorflow/tfjs-layers/src/exports_layers.ts", "../node_modules/@tensorflow/tfjs-layers/src/backend/state.ts", "../node_modules/@tensorflow/tfjs-layers/src/utils/types_utils.ts", "../node_modules/@tensorflow/tfjs-layers/src/utils/variable_utils.ts", "../node_modules/@tensorflow/tfjs-layers/src/variables.ts", "../node_modules/@tensorflow/tfjs-layers/src/engine/topology.ts", "../node_modules/@tensorflow/tfjs-layers/src/engine/input_layer.ts", "../node_modules/@tensorflow/tfjs-layers/src/logs.ts", "../node_modules/@tensorflow/tfjs-layers/src/base_callbacks.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/serialization.ts", "../node_modules/@tensorflow/tfjs-layers/src/losses.ts", "../node_modules/@tensorflow/tfjs-layers/src/metrics.ts", "../node_modules/@tensorflow/tfjs-layers/src/optimizers.ts", "../node_modules/@tensorflow/tfjs-layers/src/user_defined_metadata.ts", "../node_modules/@tensorflow/tfjs-layers/src/utils/layer_utils.ts", "../node_modules/@tensorflow/tfjs-layers/src/utils/serialization_utils.ts", "../node_modules/@tensorflow/tfjs-layers/src/version.ts", "../node_modules/@tensorflow/tfjs-layers/src/engine/executor.ts", "../node_modules/@tensorflow/tfjs-layers/src/engine/container.ts", "../node_modules/@tensorflow/tfjs-layers/src/engine/training_utils.ts", "../node_modules/@tensorflow/tfjs-layers/src/engine/training_dataset.ts", "../node_modules/@tensorflow/tfjs-layers/src/engine/training_tensors.ts", "../node_modules/@tensorflow/tfjs-layers/src/engine/training.ts", "../node_modules/@tensorflow/tfjs-layers/src/models.ts", "../node_modules/@tensorflow/tfjs-layers/src/exports.ts", "../node_modules/@tensorflow/tfjs-layers/src/activations.ts", "../node_modules/@tensorflow/tfjs-layers/src/regularizers.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/advanced_activations.ts", "../node_modules/@tensorflow/tfjs-layers/src/utils/conv_utils.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/convolutional.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/convolutional_depthwise.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/recurrent.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/convolutional_recurrent.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/core.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/embeddings.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/merge.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/noise.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/normalization.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/padding.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/pooling.ts", "../node_modules/@tensorflow/tfjs-layers/src/layers/wrappers.ts", "../node_modules/@tensorflow/tfjs-layers/src/exports_metrics.ts", "../node_modules/@tensorflow/tfjs-layers/src/exports_models.ts", "../node_modules/@tensorflow/tfjs-layers/src/exports_regularizers.ts", "../node_modules/@tensorflow/tfjs-layers/src/callbacks.ts", "../node_modules/@tensorflow/tfjs-layers/src/index.ts", "../node_modules/@tensorflow/tfjs-converter/src/data/compiled_api.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/custom_op/register.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/utils.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/arithmetic.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/basic_math.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/control.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/convolution.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/creation.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/dynamic.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/evaluation.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/graph.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/hash_table.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/image.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/logical.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/matrices.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/normalization.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/reduction.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/slice_join.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/spectral.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/op_list/transformation.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/operation_mapper.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/custom_op/node_value_impl.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/arithmetic_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/basic_math_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/tensor_utils.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/tensor_array.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/tensor_list.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/control_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/convolution_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/creation_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/dynamic_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/evaluation_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/graph_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/hash_table.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/hash_table_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/image_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/logical_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/matrices_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/normalization_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/reduction_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/slice_join_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/spectral_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/executors/transformation_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/operations/operation_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/execution_context.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/model_analysis.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/graph_executor.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/resource_manager.ts", "../node_modules/@tensorflow/tfjs-converter/src/executor/graph_model.ts", "../node_modules/@tensorflow/tfjs-converter/src/version.ts", "../node_modules/@tensorflow/tfjs-converter/src/index.ts", "../node_modules/@tensorflow/tfjs-data/src/index.ts", "../node_modules/@tensorflow/tfjs-data/src/dataset.ts", "../node_modules/@tensorflow/tfjs-data/src/iterators/lazy_iterator.ts", "../node_modules/@tensorflow/tfjs-data/src/util/deep_map.ts", "../node_modules/@tensorflow/tfjs-data/src/util/deep_clone.ts", "../node_modules/@tensorflow/tfjs-data/src/util/ring_buffer.ts", "../node_modules/@tensorflow/tfjs-data/src/util/growing_ring_buffer.ts", "../node_modules/@tensorflow/tfjs-data/src/datasets/text_line_dataset.ts", "../node_modules/@tensorflow/tfjs-data/src/datasets/csv_dataset.ts", "../node_modules/@tensorflow/tfjs-data/src/iterators/microphone_iterator.ts", "../node_modules/@tensorflow/tfjs-data/src/iterators/webcam_iterator.ts", "../node_modules/@tensorflow/tfjs-data/src/datasource.ts", "../node_modules/@tensorflow/tfjs-data/src/iterators/string_iterator.ts", "../node_modules/@tensorflow/tfjs-data/src/iterators/byte_chunk_iterator.ts", "../node_modules/@tensorflow/tfjs-data/src/iterators/file_chunk_iterator.ts", "../node_modules/@tensorflow/tfjs-data/src/iterators/url_chunk_iterator.ts", "../node_modules/@tensorflow/tfjs-data/src/util/source_util.ts", "../node_modules/@tensorflow/tfjs-data/src/sources/file_data_source.ts", "../node_modules/@tensorflow/tfjs-data/src/sources/url_data_source.ts", "../node_modules/@tensorflow/tfjs-data/src/readers.ts", "../node_modules/@tensorflow/tfjs-data/src/version.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/cpu_util.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/backend_cpu.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/shared.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Abs.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/utils/binary_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Complex.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/utils/zeros_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Identity.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Real.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Cast.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/utils/binary_utils.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Add.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Bincount_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/utils/unary_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/utils/unary_utils.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Ceil.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Exp.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Expm1.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Floor.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/GatherV2_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Greater.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Less.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LinSpace_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Log.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Max_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Maximum.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Minimum.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Multiply.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Neg.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/NotEqual.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Transpose_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Transpose.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Prod.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Range_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Rsqrt.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Slice.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/SquaredDifference.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/StridedSlice_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Sub.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Tile_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/TopK_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Unique_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/version.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/base.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Elu.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LeakyRelu.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Prelu.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Relu.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Relu6.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/utils/fused_utils.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Reshape.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/BatchMatMul.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/_FusedMatMul.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Acos.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Acosh.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/AddN.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/All.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Any.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ArgMax.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ArgMin.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Asin.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Asinh.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Atan.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Atan2.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Atanh.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/utils/pool_utils.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/AvgPool.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/AvgPool3D.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/AvgPool3DGrad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/AvgPoolGrad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/BatchNorm.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/BatchToSpaceND.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Bincount.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Clip.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ComplexAbs.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Imag.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Concat.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Conv2D.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Conv2DBackpropFilter.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Conv2DBackpropInput.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Conv3D.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Conv3DBackpropFilterV2.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Conv3DBackpropInputV2.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Cos.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Cosh.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/CropAndResize.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Cumsum.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/DenseBincount.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/DepthToSpace.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/DepthwiseConv2dNative.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/DepthwiseConv2dNativeBackpropFilter.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/DepthwiseConv2dNativeBackpropInput.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Diag.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Dilation2D.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Dilation2DBackpropFilter.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Dilation2DBackpropInput.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/EluGrad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Equal.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Erf.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ExpandDims.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/RealDiv.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/utils/fft_utils.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/FFT.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Fill.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/FlipLeftRight.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/FloorDiv.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/FusedConv2D.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/FusedDepthwiseConv2D.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/GatherNd.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/GatherV2.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/GreaterEqual.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/IFFT.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/IsFinite.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/IsInf.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/IsNaN.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LessEqual.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LinSpace.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Log1p.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LogicalAnd.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LogicalNot.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LogicalOr.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LRN.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/LRNGrad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Max.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/MaxPool.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/MaxPool3D.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/MaxPool3DGrad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/MaxPoolGrad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Sum.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Mean.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Min.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/MirrorPad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Mod.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Multinomial.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Softmax.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/NonMaxSuppressionV3.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/NonMaxSuppressionV4.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/NonMaxSuppressionV5.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/OneHot.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ZerosLike.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/OnesLike.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Pack.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/PadV2.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Pow.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Range.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Reciprocal.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ResizeBilinear.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ResizeBilinearGrad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ResizeNearestNeighbor.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ResizeNearestNeighborGrad.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Reverse.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/RotateWithOffset.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Round.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Scatter_impl.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/ScatterNd.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Select.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Selu.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Sigmoid.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Sign.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Sin.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Sinh.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Softplus.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/SpaceToBatchND.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/SparseToDense.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/SplitV.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Sqrt.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Square.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Step.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/StridedSlice.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Tan.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Tanh.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Tile.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/TopK.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Unique.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/Unpack.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/kernels/UnsortedSegmentSum.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/register_all_kernels.ts", "../node_modules/@tensorflow/tfjs-backend-cpu/src/index.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/canvas_util.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/tex_util.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/webgl_util.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/flags_webgl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/glsl_version.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/shader_compiler_util.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/decode_matrix_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/decode_matrix_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/encode_float_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/encode_float_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/encode_matrix_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/encode_matrix_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/gpgpu_util.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/gpgpu_context.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/shader_compiler.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/gpgpu_math.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernel_utils/shared.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/packing_util.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/pack_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/reshape_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/texture_manager.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/unaryop_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/unaryop_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/unpack_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/backend_webgl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/version.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/base.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/binaryop_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/binaryop_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Identity.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Complex.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/LeakyRelu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Prelu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernel_utils/kernel_funcs_utils.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/mulmat_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/binaryop_complex_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Multiply.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernel_utils/reshape.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Reshape.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/mean_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/reduce_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernel_utils/reduce.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/transpose_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/transpose_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Transpose_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Sum_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Sum.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Transpose.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/BatchMatMul_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/_FusedMatMul.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Abs.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Acos.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Acosh.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Add.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/addn_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/addn_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/AddN.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/All.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Any.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/argminmax_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/argminmax_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernel_utils/arg_min_max.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ArgMax.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ArgMin.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Asin.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Asinh.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Atan.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Atan2.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Atanh.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/pool_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/AvgPool.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/AvgPool3D.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/avg_pool_backprop_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/AvgPool3DGrad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/AvgPoolGrad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/BatchMatMul.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/batchnorm_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/batchnorm_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/BatchNorm.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/slice_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/slice_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Slice.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/BatchToSpaceND.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Bincount.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/NotEqual.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Real.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernel_utils/int.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Cast.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Ceil.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/clip_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/clip_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ClipByValue.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/complex_abs_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ComplexAbs.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/concat_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/concat_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Imag.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Concat_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Concat.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/conv_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/im2col_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Conv2D_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Conv2D.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/conv_backprop_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Conv2DBackpropFilter.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Conv2DBackpropInput.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Conv3D.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Conv3DBackpropFilterV2.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Conv3DBackpropInputV2.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Cos.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Cosh.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/crop_and_resize_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/CropAndResize.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/cumsum_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Cumsum.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/DenseBincount.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/depth_to_space_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/DepthToSpace.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/conv_gpu_depthwise.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/conv_packed_gpu_depthwise.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/DepthwiseConv2dNative.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/conv_backprop_gpu_depthwise.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/DepthwiseConv2dNativeBackpropFilter.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/DepthwiseConv2dNativeBackpropInput.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/diag_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Diag.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/dilation_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Dilation2D.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Elu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/EluGrad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Equal.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Erf.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Exp.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ExpandDims.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Expm1.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/fft_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FFT_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FFT.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/fill_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Fill.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/flip_left_right_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FlipLeftRight.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Floor.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FloorDiv.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FromPixels_utils/from_pixels_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FromPixels_utils/from_pixels_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FromPixels.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FusedConv2D.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/FusedDepthwiseConv2D.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/gather_nd_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/GatherNd.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/gather_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/GatherV2.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Greater.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/GreaterEqual.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/IFFT.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/IsFinite.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/IsInf.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/IsNaN.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Less.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/LessEqual.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/LinSpace.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Log.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Log1p.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/LogicalAnd.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/LogicalNot.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/LogicalOr.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/lrn_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/lrn_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/LRN.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/lrn_grad_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/LRNGrad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Max_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Max.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Maximum.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/MaxPool.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/MaxPool3D.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/max_pool_backprop_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/MaxPool3DGrad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/MaxPoolGrad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/MaxPoolWithArgmax_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/MaxPoolWithArgmax.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Mean_impl.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Mean.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Min.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Minimum.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/mirror_pad_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/mirror_pad_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/MirrorPad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Mod.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/multinomial_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/RealDiv.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Sub.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Softmax.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Multinomial.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Neg.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/NonMaxSuppressionV3.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/NonMaxSuppressionV4.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/NonMaxSuppressionV5.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/onehot_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/OneHot.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ZerosLike.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/OnesLike.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Pack.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/pad_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/pad_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/PadV2.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Pow.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Prod.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Range.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Reciprocal.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Relu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Relu6.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/resize_bilinear_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/resize_bilinear_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ResizeBilinear.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/resize_bilinear_backprop_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ResizeBilinearGrad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/resize_nearest_neighbor_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ResizeNearestNeighbor.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/resize_nearest_neighbor_backprop_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ResizeNearestNeighborGrad.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/reverse_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/reverse_packed_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Reverse.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/rotate_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/RotateWithOffset.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Round.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Rsqrt.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/scatter_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/ScatterNd.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/select_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Select.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Selu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Sigmoid.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Sign.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Sin.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Sinh.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Softplus.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/SpaceToBatchND.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/SparseToDense.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/SplitV.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Sqrt.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Square.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/SquaredDifference.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Step.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/strided_slice_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/StridedSlice.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Tan.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Tanh.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/tile_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Tile.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/TopK.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Unique.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/Unpack.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/segment_gpu.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/kernels/UnsortedSegmentSum.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/register_all_kernels.ts", "../node_modules/@tensorflow/tfjs-backend-webgl/src/index.ts", "../node_modules/@tensorflow/tfjs/src/version.ts", "../node_modules/@tensorflow/tfjs/src/index.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/types.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/_FusedMatMul.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/unary_kernel.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Abs.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/binary_kernel.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Add.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/AddN.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Identity.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Transpose.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/kernel_utils.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/ArgMax.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/AvgPool.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Reshape.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/BatchMatMul.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Cast.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/ClipByValue.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Concat.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Conv2D.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Conv2DBackpropInput.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Cos.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/CropAndResize.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Cumsum.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/DepthToSpace.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/DepthwiseConv2dNative.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Equal.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Exp.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/ExpandDims.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Fill.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/FlipLeftRight.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Floor.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/FloorDiv.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/FusedBatchNorm.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/FusedConv2D.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/FusedDepthwiseConv2D.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/GatherNd.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/GatherV2.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Greater.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/GreaterEqual.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/LeakyRelu.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Less.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/LessEqual.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Log.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/LogicalAnd.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Max.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Maximum.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/MaxPool.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Mean.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Min.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Minimum.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Multiply.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Neg.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/NonMaxSuppression_util.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/NonMaxSuppressionV3.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/NonMaxSuppressionV4.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/NonMaxSuppressionV5.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/NotEqual.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/OneHot.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/OnesLike.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Pack.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/PadV2.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Pow.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Prelu.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Prod.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Range.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/RealDiv.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Relu.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Relu6.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/ResizeBilinear.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Reverse.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/RotateWithOffset.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Rsqrt.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/ScatterNd.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Select.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Sigmoid.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Sin.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Slice.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Softmax.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/SplitV.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Sqrt.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Square.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/SquaredDifference.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/StridedSlice.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Sub.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Sum.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Tanh.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Tile.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/TopK.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/Unpack.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/kernels/ZerosLike.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/register_all_kernels.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/flags_wasm.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/backend_wasm.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.worker.js", "../node_modules/@tensorflow/tfjs-backend-wasm/src/version.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/base.ts", "../node_modules/@tensorflow/tfjs-backend-wasm/src/index.ts", "../src/draw/index.ts", "../src/draw/drawContour.ts", "../src/utils/index.ts", "../src/classes/Dimensions.ts", "../src/classes/Point.ts", "../src/classes/Box.ts", "../src/classes/BoundingBox.ts", "../src/classes/ObjectDetection.ts", "../src/classes/FaceDetection.ts", "../src/ops/iou.ts", "../src/ops/minBbox.ts", "../src/ops/nonMaxSuppression.ts", "../src/ops/normalize.ts", "../src/ops/padToSquare.ts", "../src/ops/shuffleArray.ts", "../src/ops/index.ts", "../src/classes/Rect.ts", "../src/classes/FaceLandmarks.ts", "../src/classes/FaceLandmarks5.ts", "../src/classes/FaceLandmarks68.ts", "../src/classes/FaceMatch.ts", "../src/classes/LabeledBox.ts", "../src/classes/LabeledFaceDescriptors.ts", "../src/classes/PredictedBox.ts", "../src/factories/WithFaceDetection.ts", "../src/env/createBrowserEnv.ts", "../src/env/createFileSystem.ts", "../src/env/createNodejsEnv.ts", "../src/env/isBrowser.ts", "../src/env/index.ts", "../src/dom/resolveInput.ts", "../src/dom/getContext2dOrThrow.ts", "../src/draw/DrawTextField.ts", "../src/draw/DrawBox.ts", "../src/draw/drawDetections.ts", "../src/dom/isMediaLoaded.ts", "../src/dom/awaitMediaLoaded.ts", "../src/dom/bufferToImage.ts", "../src/dom/getMediaDimensions.ts", "../src/dom/createCanvas.ts", "../src/dom/imageTensorToCanvas.ts", "../src/dom/isMediaElement.ts", "../src/dom/imageToSquare.ts", "../src/dom/NetInput.ts", "../src/dom/toNetInput.ts", "../src/dom/extractFaces.ts", "../src/dom/extractFaceTensors.ts", "../src/dom/fetchOrThrow.ts", "../src/dom/fetchImage.ts", "../src/dom/fetchJson.ts", "../src/dom/fetchNetWeights.ts", "../src/common/getModelUris.ts", "../src/dom/loadWeightMap.ts", "../src/dom/matchDimensions.ts", "../src/NeuralNetwork.ts", "../src/common/depthwiseSeparableConv.ts", "../src/faceFeatureExtractor/denseBlock.ts", "../src/common/convLayer.ts", "../src/common/disposeUnusedWeightTensors.ts", "../src/common/extractConvParamsFactory.ts", "../src/common/extractFCParamsFactory.ts", "../src/common/types.ts", "../src/common/extractSeparableConvParamsFactory.ts", "../src/common/extractWeightEntryFactory.ts", "../src/common/extractWeightsFactory.ts", "../src/faceFeatureExtractor/extractorsFactory.ts", "../src/faceFeatureExtractor/extractParams.ts", "../src/common/loadConvParamsFactory.ts", "../src/faceFeatureExtractor/loadParamsFactory.ts", "../src/faceFeatureExtractor/extractParamsFromWeigthMap.ts", "../src/faceFeatureExtractor/FaceFeatureExtractor.ts", "../src/common/fullyConnectedLayer.ts", "../src/faceProcessor/extractParams.ts", "../src/faceProcessor/extractParamsFromWeigthMap.ts", "../src/faceProcessor/util.ts", "../src/faceProcessor/FaceProcessor.ts", "../src/faceExpressionNet/FaceExpressions.ts", "../src/faceExpressionNet/FaceExpressionNet.ts", "../src/factories/WithFaceExpressions.ts", "../src/draw/drawFaceExpressions.ts", "../src/factories/WithFaceLandmarks.ts", "../src/draw/DrawFaceLandmarks.ts", "../src/xception/extractParams.ts", "../src/xception/extractParamsFromWeigthMap.ts", "../src/xception/TinyXception.ts", "../src/ageGenderNet/extractParams.ts", "../src/ageGenderNet/extractParamsFromWeigthMap.ts", "../src/ageGenderNet/types.ts", "../src/ageGenderNet/AgeGenderNet.ts", "../src/faceLandmarkNet/FaceLandmark68NetBase.ts", "../src/faceLandmarkNet/FaceLandmark68Net.ts", "../src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts", "../src/faceFeatureExtractor/extractParamsTiny.ts", "../src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts", "../src/faceLandmarkNet/FaceLandmark68TinyNet.ts", "../src/faceLandmarkNet/index.ts", "../src/faceRecognitionNet/scaleLayer.ts", "../src/faceRecognitionNet/convLayer.ts", "../src/faceRecognitionNet/extractParams.ts", "../src/faceRecognitionNet/extractParamsFromWeigthMap.ts", "../src/faceRecognitionNet/residualLayer.ts", "../src/faceRecognitionNet/FaceRecognitionNet.ts", "../src/faceRecognitionNet/index.ts", "../src/factories/WithFaceDescriptor.ts", "../src/factories/WithAge.ts", "../src/factories/WithGender.ts", "../src/ssdMobilenetv1/extractParams.ts", "../src/ssdMobilenetv1/extractParamsFromWeigthMap.ts", "../src/ssdMobilenetv1/pointwiseConvLayer.ts", "../src/ssdMobilenetv1/mobileNetV1.ts", "../src/ssdMobilenetv1/nonMaxSuppression.ts", "../src/ssdMobilenetv1/outputLayer.ts", "../src/ssdMobilenetv1/boxPredictionLayer.ts", "../src/ssdMobilenetv1/predictionLayer.ts", "../src/ssdMobilenetv1/SsdMobilenetv1Options.ts", "../src/ssdMobilenetv1/SsdMobilenetv1.ts", "../src/ssdMobilenetv1/index.ts", "../src/tinyYolov2/const.ts", "../src/tinyYolov2/config.ts", "../src/tinyYolov2/leaky.ts", "../src/tinyYolov2/convWithBatchNorm.ts", "../src/tinyYolov2/depthwiseSeparableConv.ts", "../src/tinyYolov2/extractParams.ts", "../src/tinyYolov2/extractParamsFromWeigthMap.ts", "../src/tinyYolov2/TinyYolov2Options.ts", "../src/tinyYolov2/TinyYolov2Base.ts", "../src/tinyYolov2/TinyYolov2.ts", "../src/tinyYolov2/index.ts", "../src/tinyFaceDetector/TinyFaceDetectorOptions.ts", "../src/globalApi/ComposableTask.ts", "../src/globalApi/extractFacesAndComputeResults.ts", "../src/tinyFaceDetector/const.ts", "../src/tinyFaceDetector/TinyFaceDetector.ts", "../src/globalApi/nets.ts", "../src/globalApi/PredictFaceExpressionsTask.ts", "../src/globalApi/PredictAgeAndGenderTask.ts", "../src/globalApi/ComputeFaceDescriptorsTasks.ts", "../src/globalApi/DetectFaceLandmarksTasks.ts", "../src/globalApi/DetectFacesTasks.ts", "../src/globalApi/detectFaces.ts", "../src/globalApi/allFaces.ts", "../src/euclideanDistance.ts", "../src/globalApi/FaceMatcher.ts", "../src/tinyFaceDetector/index.ts", "../src/resizeResults.ts"], - "sourcesContent": ["export function isNodejs(): boolean {\n return typeof global === 'object'\n && typeof require === 'function'\n && typeof module !== 'undefined'\n // issues with gatsby.js: module.exports is undefined\n // && !!module.exports\n && typeof process !== 'undefined' && !!process.version;\n}\n", "import * as tf from '../dist/tfjs.esm.js';\nimport * as draw from './draw/index';\nimport * as utils from './utils/index';\nimport * as pkg from '../package.json';\n\nexport { tf, draw, utils };\n\nexport * from './ageGenderNet/index';\nexport * from './classes/index';\nexport * from './dom/index';\nexport * from './env/index';\nexport * from './faceExpressionNet/index';\nexport * from './faceLandmarkNet/index';\nexport * from './faceRecognitionNet/index';\nexport * from './factories/index';\nexport * from './globalApi/index';\nexport * from './ops/index';\nexport * from './ssdMobilenetv1/index';\nexport * from './tinyFaceDetector/index';\nexport * from './tinyYolov2/index';\nexport * from './euclideanDistance';\nexport * from './NeuralNetwork';\nexport * from './resizeResults';\n\nconst node = (typeof process !== 'undefined');\n// eslint-disable-next-line no-undef\nconst browser = (typeof navigator !== 'undefined') && (typeof navigator.userAgent !== 'undefined');\nexport const version = { faceapi: pkg.version as string, node, browser };\n", "", "// A port of an algorithm by Johannes Baag\u00F8e , 2010\n// http://baagoe.com/en/RandomMusings/javascript/\n// https://github.com/nquinlan/better-random-numbers-for-javascript-mirror\n// Original work is under MIT license -\n\n// Copyright (C) 2010 by Johannes Baag\u00F8e \n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// \n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n\n\n(function(global, module, define) {\n\nfunction Alea(seed) {\n var me = this, mash = Mash();\n\n me.next = function() {\n var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32\n me.s0 = me.s1;\n me.s1 = me.s2;\n return me.s2 = t - (me.c = t | 0);\n };\n\n // Apply the seeding algorithm from Baagoe.\n me.c = 1;\n me.s0 = mash(' ');\n me.s1 = mash(' ');\n me.s2 = mash(' ');\n me.s0 -= mash(seed);\n if (me.s0 < 0) { me.s0 += 1; }\n me.s1 -= mash(seed);\n if (me.s1 < 0) { me.s1 += 1; }\n me.s2 -= mash(seed);\n if (me.s2 < 0) { me.s2 += 1; }\n mash = null;\n}\n\nfunction copy(f, t) {\n t.c = f.c;\n t.s0 = f.s0;\n t.s1 = f.s1;\n t.s2 = f.s2;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new Alea(seed),\n state = opts && opts.state,\n prng = xg.next;\n prng.int32 = function() { return (xg.next() * 0x100000000) | 0; }\n prng.double = function() {\n return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53\n };\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nfunction Mash() {\n var n = 0xefc8249d;\n\n var mash = function(data) {\n data = data.toString();\n for (var i = 0; i < data.length; i++) {\n n += data.charCodeAt(i);\n var h = 0.02519603282416938 * n;\n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 0x100000000; // 2^32\n }\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n };\n\n return mash;\n}\n\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.alea = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xor128\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n\n // Set up generator function.\n me.next = function() {\n var t = me.x ^ (me.x << 11);\n me.x = me.y;\n me.y = me.z;\n me.z = me.w;\n return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8);\n };\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor128 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xorwow\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var t = (me.x ^ (me.x >>> 2));\n me.x = me.y; me.y = me.z; me.z = me.w; me.w = me.v;\n return (me.d = (me.d + 362437 | 0)) +\n (me.v = (me.v ^ (me.v << 4)) ^ (t ^ (t << 1))) | 0;\n };\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n me.v = 0;\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n if (k == strseed.length) {\n me.d = me.x << 10 ^ me.x >>> 4;\n }\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n t.v = f.v;\n t.d = f.d;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorwow = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xorshift7\" algorithm by\n// Fran\u00E7ois Panneton and Pierre L'ecuyer:\n// \"On the Xorgshift Random Number Generators\"\n// http://saluc.engr.uconn.edu/refs/crypto/rng/panneton05onthexorshift.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n // Update xor generator.\n var X = me.x, i = me.i, t, v, w;\n t = X[i]; t ^= (t >>> 7); v = t ^ (t << 24);\n t = X[(i + 1) & 7]; v ^= t ^ (t >>> 10);\n t = X[(i + 3) & 7]; v ^= t ^ (t >>> 3);\n t = X[(i + 4) & 7]; v ^= t ^ (t << 7);\n t = X[(i + 7) & 7]; t = t ^ (t << 13); v ^= t ^ (t << 9);\n X[i] = v;\n me.i = (i + 1) & 7;\n return v;\n };\n\n function init(me, seed) {\n var j, w, X = [];\n\n if (seed === (seed | 0)) {\n // Seed state array using a 32-bit integer.\n w = X[0] = seed;\n } else {\n // Seed state using a string.\n seed = '' + seed;\n for (j = 0; j < seed.length; ++j) {\n X[j & 7] = (X[j & 7] << 15) ^\n (seed.charCodeAt(j) + X[(j + 1) & 7] << 13);\n }\n }\n // Enforce an array length of 8, not all zeroes.\n while (X.length < 8) X.push(0);\n for (j = 0; j < 8 && X[j] === 0; ++j);\n if (j == 8) w = X[7] = -1; else w = X[j];\n\n me.x = X;\n me.i = 0;\n\n // Discard an initial 256 values.\n for (j = 256; j > 0; --j) {\n me.next();\n }\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.x = f.x.slice();\n t.i = f.i;\n return t;\n}\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.x) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorshift7 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n", "// A Javascript implementaion of Richard Brent's Xorgens xor4096 algorithm.\n//\n// This fast non-cryptographic random number generator is designed for\n// use in Monte-Carlo algorithms. It combines a long-period xorshift\n// generator with a Weyl generator, and it passes all common batteries\n// of stasticial tests for randomness while consuming only a few nanoseconds\n// for each prng generated. For background on the generator, see Brent's\n// paper: \"Some long-period random number generators using shifts and xors.\"\n// http://arxiv.org/pdf/1004.3115v1.pdf\n//\n// Usage:\n//\n// var xor4096 = require('xor4096');\n// random = xor4096(1); // Seed with int32 or string.\n// assert.equal(random(), 0.1520436450538547); // (0, 1) range, 53 bits.\n// assert.equal(random.int32(), 1806534897); // signed int32, 32 bits.\n//\n// For nonzero numeric keys, this impelementation provides a sequence\n// identical to that by Brent's xorgens 3 implementaion in C. This\n// implementation also provides for initalizing the generator with\n// string seeds, or for saving and restoring the state of the generator.\n//\n// On Chrome, this prng benchmarks about 2.1 times slower than\n// Javascript's built-in Math.random().\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n var w = me.w,\n X = me.X, i = me.i, t, v;\n // Update Weyl generator.\n me.w = w = (w + 0x61c88647) | 0;\n // Update xor generator.\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n // Update Xor generator array state.\n v = X[i] = v ^ t;\n me.i = i;\n // Result is the combination.\n return (v + (w ^ (w >>> 16))) | 0;\n };\n\n function init(me, seed) {\n var t, v, i, j, w, X = [], limit = 128;\n if (seed === (seed | 0)) {\n // Numeric seeds initialize v, which is used to generates X.\n v = seed;\n seed = null;\n } else {\n // String seeds are mixed into v and X one character at a time.\n seed = seed + '\\0';\n v = 0;\n limit = Math.max(limit, seed.length);\n }\n // Initialize circular array and weyl value.\n for (i = 0, j = -32; j < limit; ++j) {\n // Put the unicode characters into the array, and shuffle them.\n if (seed) v ^= seed.charCodeAt((j + 32) % seed.length);\n // After 32 shuffles, take v as the starting w value.\n if (j === 0) w = v;\n v ^= v << 10;\n v ^= v >>> 15;\n v ^= v << 4;\n v ^= v >>> 13;\n if (j >= 0) {\n w = (w + 0x61c88647) | 0; // Weyl.\n t = (X[j & 127] ^= (v + w)); // Combine xor and weyl to init array.\n i = (0 == t) ? i + 1 : 0; // Count zeroes.\n }\n }\n // We have detected all zeroes; make the key nonzero.\n if (i >= 128) {\n X[(seed && seed.length || 0) & 127] = -1;\n }\n // Run the generator 512 times to further mix the state before using it.\n // Factoring this as a function slows the main generator, so it is just\n // unrolled here. The weyl generator is not advanced while warming up.\n i = 127;\n for (j = 4 * 128; j > 0; --j) {\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n X[i] = v ^ t;\n }\n // Storing state as object members is faster than using closure variables.\n me.w = w;\n me.X = X;\n me.i = i;\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.i = f.i;\n t.w = f.w;\n t.X = f.X.slice();\n return t;\n};\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.X) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor4096 = impl;\n}\n\n})(\n this, // window object or global\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n", "// A Javascript implementaion of the \"Tyche-i\" prng algorithm by\n// Samuel Neves and Filipe Araujo.\n// See https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var b = me.b, c = me.c, d = me.d, a = me.a;\n b = (b << 25) ^ (b >>> 7) ^ c;\n c = (c - d) | 0;\n d = (d << 24) ^ (d >>> 8) ^ a;\n a = (a - b) | 0;\n me.b = b = (b << 20) ^ (b >>> 12) ^ c;\n me.c = c = (c - d) | 0;\n me.d = (d << 16) ^ (c >>> 16) ^ a;\n return me.a = (a - b) | 0;\n };\n\n /* The following is non-inverted tyche, which has better internal\n * bit diffusion, but which is about 25% slower than tyche-i in JS.\n me.next = function() {\n var a = me.a, b = me.b, c = me.c, d = me.d;\n a = (me.a + me.b | 0) >>> 0;\n d = me.d ^ a; d = d << 16 ^ d >>> 16;\n c = me.c + d | 0;\n b = me.b ^ c; b = b << 12 ^ d >>> 20;\n me.a = a = a + b | 0;\n d = d ^ a; me.d = d = d << 8 ^ d >>> 24;\n me.c = c = c + d | 0;\n b = b ^ c;\n return me.b = (b << 7 ^ b >>> 25);\n }\n */\n\n me.a = 0;\n me.b = 0;\n me.c = 2654435769 | 0;\n me.d = 1367130551;\n\n if (seed === Math.floor(seed)) {\n // Integer seed.\n me.a = (seed / 0x100000000) | 0;\n me.b = seed | 0;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 20; k++) {\n me.b ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.a = f.a;\n t.b = f.b;\n t.c = f.c;\n t.d = f.d;\n return t;\n};\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.tychei = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "", "/*\nCopyright 2014 David Bau.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\n(function (pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\nvar global = this,\n width = 256, // each RC4 output is 0 <= x < 256\n chunks = 6, // at least six RC4 outputs for each double\n digits = 52, // there are 52 significant digits in a double\n rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\nfunction seedrandom(seed, options, callback) {\n var key = [];\n options = (options == true) ? { entropy: true } : (options || {});\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(\n options.entropy ? [seed, tostring(pool)] :\n (seed == null) ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n var prng = function() {\n var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\n d = startdenom, // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n while (n < significance) { // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\n x = arc4.g(1); // new least-significant-byte.\n }\n while (n >= overflow) { // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n d /= 2; // right using integer math until\n x >>>= 1; // we have exactly the desired bits.\n }\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function() { return arc4.g(4) | 0; }\n prng.quick = function() { return arc4.g(4) / 0x100000000; }\n prng.double = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\n return (options.pass || callback ||\n function(prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) { copy(state, arc4); }\n // Only provide the .state method if requested via options.state.\n prng.state = function() { return copy(arc4, {}); }\n }\n\n // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n if (is_math_call) { math[rngname] = prng; return seed; }\n\n // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(\n prng,\n shortseed,\n 'global' in options ? options.global : (this == math),\n options.state);\n}\nmath['seed' + rngname] = seedrandom;\n\n//\n// ARC4\n//\n// An ARC4 implementation. The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4. Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\nfunction ARC4(key) {\n var t, keylen = key.length,\n me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) { key = [keylen++]; }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\n }\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n s[j] = t;\n }\n\n // The \"g\" method returns the next (count) outputs as one number.\n (me.g = function(count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t, r = 0,\n i = me.i, j = me.j, s = me.S;\n while (count--) {\n t = s[i = mask & (i + 1)];\n r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n }\n me.i = i; me.j = j;\n return r;\n // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n })(width);\n}\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\nfunction copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n};\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\nfunction flatten(obj, depth) {\n var result = [], typ = (typeof obj), prop;\n if (depth && typ == 'object') {\n for (prop in obj) {\n try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n }\n }\n return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n}\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\nfunction mixkey(seed, key) {\n var stringseed = seed + '', smear, j = 0;\n while (j < stringseed.length) {\n key[mask & j] =\n mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n }\n return tostring(key);\n}\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\nfunction autoseed() {\n try {\n var out;\n if (nodecrypto && (out = nodecrypto.randomBytes)) {\n // The use of 'out' to remember randomBytes makes tight minified code.\n out = out(width);\n } else {\n out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n }\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date, global, plugins, global.screen, tostring(pool)];\n }\n}\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\nfunction tostring(a) {\n return String.fromCharCode.apply(0, a);\n}\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool. Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\nmixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\nif ((typeof module) == 'object' && module.exports) {\n module.exports = seedrandom;\n // When in node.js, try using crypto package for autoseeding.\n try {\n nodecrypto = require('crypto');\n } catch (ex) {}\n} else if ((typeof define) == 'function' && define.amd) {\n define(function() { return seedrandom; });\n}\n\n// End anonymous scope, and pass initial values.\n})(\n [], // pool: entropy pool starts empty\n Math // math: package containing random, pow, and seedrandom\n);\n", "// A library of seedable RNGs implemented in Javascript.\n//\n// Usage:\n//\n// var seedrandom = require('seedrandom');\n// var random = seedrandom(1); // or any seed.\n// var x = random(); // 0 <= x < 1. Every bit is random.\n// var x = random.quick(); // 0 <= x < 1. 32 bits of randomness.\n\n// alea, a 53-bit multiply-with-carry generator by Johannes Baag\u00F8e.\n// Period: ~2^116\n// Reported to pass all BigCrush tests.\nvar alea = require('./lib/alea');\n\n// xor128, a pure xor-shift generator by George Marsaglia.\n// Period: 2^128-1.\n// Reported to fail: MatrixRank and LinearComp.\nvar xor128 = require('./lib/xor128');\n\n// xorwow, George Marsaglia's 160-bit xor-shift combined plus weyl.\n// Period: 2^192-2^32\n// Reported to fail: CollisionOver, SimpPoker, and LinearComp.\nvar xorwow = require('./lib/xorwow');\n\n// xorshift7, by Fran\u00E7ois Panneton and Pierre L'ecuyer, takes\n// a different approach: it adds robustness by allowing more shifts\n// than Marsaglia's original three. It is a 7-shift generator\n// with 256 bits, that passes BigCrush with no systmatic failures.\n// Period 2^256-1.\n// No systematic BigCrush failures reported.\nvar xorshift7 = require('./lib/xorshift7');\n\n// xor4096, by Richard Brent, is a 4096-bit xor-shift with a\n// very long period that also adds a Weyl generator. It also passes\n// BigCrush with no systematic failures. Its long period may\n// be useful if you have many generators and need to avoid\n// collisions.\n// Period: 2^4128-2^32.\n// No systematic BigCrush failures reported.\nvar xor4096 = require('./lib/xor4096');\n\n// Tyche-i, by Samuel Neves and Filipe Araujo, is a bit-shifting random\n// number generator derived from ChaCha, a modern stream cipher.\n// https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n// Period: ~2^127\n// No systematic BigCrush failures reported.\nvar tychei = require('./lib/tychei');\n\n// The original ARC4-based prng included in this library.\n// Period: ~2^1600\nvar sr = require('./seedrandom');\n\nsr.alea = alea;\nsr.xor128 = xor128;\nsr.xorwow = xorwow;\nsr.xorshift7 = xorshift7;\nsr.xor4096 = xor4096;\nsr.tychei = tychei;\n\nmodule.exports = sr;\n", "", "", "", "", "\nvar WasmBackendModuleThreadedSimd = (function() {\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n return (\nfunction(WasmBackendModuleThreadedSimd) {\n WasmBackendModuleThreadedSimd = WasmBackendModuleThreadedSimd || {};\n\nfunction GROWABLE_HEAP_I8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP8}function GROWABLE_HEAP_U8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU8}function GROWABLE_HEAP_I32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP32}function GROWABLE_HEAP_U32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU32}function GROWABLE_HEAP_F64(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPF64}var Module=typeof WasmBackendModuleThreadedSimd!==\"undefined\"?WasmBackendModuleThreadedSimd:{};var _scriptDir=undefined;var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram=\"./this.program\";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_PTHREAD=Module[\"ENVIRONMENT_IS_PTHREAD\"]||false;if(ENVIRONMENT_IS_PTHREAD){buffer=Module[\"buffer\"];DYNAMIC_BASE=Module[\"DYNAMIC_BASE\"];DYNAMICTOP_PTR=Module[\"DYNAMICTOP_PTR\"]}var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require(\"path\").dirname(scriptDirectory)+\"/\"}else{scriptDirectory=__dirname+\"/\"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);return nodeFS[\"readFileSync\"](filename,binary?null:\"utf8\")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process[\"argv\"].length>1){thisProgram=process[\"argv\"][1].replace(/\\\\/g,\"/\")}arguments_=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process[\"on\"](\"unhandledRejection\",abort);quit_=function(status){process[\"exit\"](status)};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\"};var nodeWorkerThreads;try{nodeWorkerThreads=require(\"worker_threads\")}catch(e){console.error('The \"worker_threads\" module is not supported in this node.js build - perhaps a newer version is needed?');throw e}Worker=nodeWorkerThreads.Worker}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){arguments_=scriptArgs}else if(typeof arguments!=\"undefined\"){arguments_=arguments}if(typeof quit===\"function\"){quit_=function(status){quit(status)}}if(typeof print!==\"undefined\"){if(typeof console===\"undefined\")console={};console.log=print;console.warn=console.error=typeof printErr!==\"undefined\"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}if(ENVIRONMENT_IS_NODE){read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);return nodeFS[\"readFileSync\"](filename,binary?null:\"utf8\")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret}}else{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}if(ENVIRONMENT_IS_NODE){if(typeof performance===\"undefined\"){performance=require(\"perf_hooks\").performance}}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var Atomics_load=Atomics.load;var Atomics_store=Atomics.store;var Atomics_compareExchange=Atomics.compareExchange;var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];var noExitRuntime;if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(typeof WebAssembly!==\"object\"){err(\"no native wasm support detected\")}var wasmMemory;var wasmTable=new WebAssembly.Table({\"initial\":167,\"maximum\":167+0,\"element\":\"anyfunc\"});var wasmModule;var threadInfoStruct=0;var selfThreadId=0;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={\"string\":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},\"array\":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\")return UTF8ToString(ret);if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx)){var u0=heap[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(GROWABLE_HEAP_U8(),ptr,maxBytesToRead):\"\"}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,GROWABLE_HEAP_U8(),outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function writeArrayToMemory(array,buffer){GROWABLE_HEAP_I8().set(array,buffer)}var WASM_PAGE_SIZE=65536;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var STACK_BASE=5256464,STACKTOP=STACK_BASE,STACK_MAX=13584,DYNAMIC_BASE=5256464,DYNAMICTOP_PTR=12656;if(ENVIRONMENT_IS_PTHREAD){}var INITIAL_INITIAL_MEMORY=Module[\"INITIAL_MEMORY\"]||16777216;if(ENVIRONMENT_IS_PTHREAD){wasmMemory=Module[\"wasmMemory\"];buffer=Module[\"buffer\"]}else{if(Module[\"wasmMemory\"]){wasmMemory=Module[\"wasmMemory\"]}else{wasmMemory=new WebAssembly.Memory({\"initial\":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,\"maximum\":2147483648/WASM_PAGE_SIZE,\"shared\":true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err(\"requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag\");if(ENVIRONMENT_IS_NODE){console.log(\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)\")}throw Error(\"bad memory\")}}}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);if(!ENVIRONMENT_IS_PTHREAD){GROWABLE_HEAP_I32()[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback(Module);continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func)}else{Module[\"dynCall_vi\"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;if(ENVIRONMENT_IS_PTHREAD)runtimeInitialized=true;function preRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){if(ENVIRONMENT_IS_PTHREAD)return;callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_ceil=Math.ceil;var Math_floor=Math.floor;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){assert(!ENVIRONMENT_IS_PTHREAD,\"addRunDependency cannot be used in a pthread worker\");runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}if(ENVIRONMENT_IS_PTHREAD)console.error(\"Pthread aborting at \"+(new Error).stack);what+=\"\";out(what);err(what);ABORT=true;EXITSTATUS=1;what=\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix=\"file://\";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile=\"tfjs-backend-wasm-threaded-simd.wasm\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw\"both async and sync fetching of the wasm failed\"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch===\"function\"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\"}return response[\"arrayBuffer\"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={\"a\":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module[\"asm\"]=exports;wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD){var numWorkersToLoad=PThread.unusedWorkers.length;PThread.unusedWorkers.forEach(function(w){PThread.loadWasmModuleToWorker(w,function(){if(!--numWorkersToLoad)removeRunDependency(\"wasm-instantiate\")})})}}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency(\"wasm-instantiate\")}function receiveInstantiatedSource(output){receiveInstance(output[\"instance\"],output[\"module\"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming===\"function\"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch===\"function\"){fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module[\"instantiateWasm\"]){try{var exports=Module[\"instantiateWasm\"](info,receiveInstance);return exports}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);return false}}instantiateAsync();return{}}var ASM_CONSTS={};function initPthreadsJS(){PThread.initRuntime()}if(!ENVIRONMENT_IS_PTHREAD)__ATINIT__.push({func:function(){___wasm_call_ctors()}});var __pthread_ptr=0;var __pthread_is_main_runtime_thread=0;var __pthread_is_main_browser_thread=0;function __register_pthread_ptr(pthreadPtr,isMainBrowserThread,isMainRuntimeThread){pthreadPtr=pthreadPtr|0;isMainBrowserThread=isMainBrowserThread|0;isMainRuntimeThread=isMainRuntimeThread|0;__pthread_ptr=pthreadPtr;__pthread_is_main_browser_thread=isMainBrowserThread;__pthread_is_main_runtime_thread=isMainRuntimeThread}Module[\"__register_pthread_ptr\"]=__register_pthread_ptr;var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var __main_thread_futex_wait_address=13568;function _emscripten_futex_wake(addr,count){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0||count<0)return-28;if(count==0)return 0;if(count>=2147483647)count=Infinity;var mainThreadWaitAddress=Atomics.load(GROWABLE_HEAP_I32(),__main_thread_futex_wait_address>>2);var mainThreadWoken=0;if(mainThreadWaitAddress==addr){var loadedAddr=Atomics.compareExchange(GROWABLE_HEAP_I32(),__main_thread_futex_wait_address>>2,mainThreadWaitAddress,0);if(loadedAddr==mainThreadWaitAddress){--count;mainThreadWoken=1;if(count<=0)return 1}}var ret=Atomics.notify(GROWABLE_HEAP_I32(),addr>>2,count);if(ret>=0)return ret+mainThreadWoken;throw\"Atomics.notify returned an unexpected value \"+ret}Module[\"_emscripten_futex_wake\"]=_emscripten_futex_wake;function __kill_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw\"Internal Error! _kill_thread() can only ever be called from main application thread!\";if(!pthread_ptr)throw\"Internal Error! Null pthread_ptr in _kill_thread!\";GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];pthread.worker.terminate();PThread.freeThreadData(pthread);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(pthread.worker),1);pthread.worker.pthread=undefined}function __cancel_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw\"Internal Error! _cancel_thread() can only ever be called from main application thread!\";if(!pthread_ptr)throw\"Internal Error! Null pthread_ptr in _cancel_thread!\";var pthread=PThread.pthreads[pthread_ptr];pthread.worker.postMessage({\"cmd\":\"cancel\"})}function __cleanup_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw\"Internal Error! _cleanup_thread() can only ever be called from main application thread!\";if(!pthread_ptr)throw\"Internal Error! Null pthread_ptr in _cleanup_thread!\";GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];if(pthread){var worker=pthread.worker;PThread.returnWorkerToPool(worker)}}var PThread={MAIN_THREAD_ID:1,mainThreadInfo:{schedPolicy:0,schedPrio:0},unusedWorkers:[],runningWorkers:[],initRuntime:function(){__register_pthread_ptr(PThread.mainThreadBlock,!ENVIRONMENT_IS_WORKER,1);_emscripten_register_main_browser_thread_id(PThread.mainThreadBlock)},initMainThreadBlock:function(){var pthreadPoolSize=8;for(var i=0;i>2]=PThread.mainThreadBlock;var headPtr=PThread.mainThreadBlock+156;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var tlsMemory=13056;for(var i=0;i<128;++i)GROWABLE_HEAP_U32()[tlsMemory/4+i]=0;Atomics.store(GROWABLE_HEAP_U32(),PThread.mainThreadBlock+104>>2,tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),PThread.mainThreadBlock+40>>2,PThread.mainThreadBlock);Atomics.store(GROWABLE_HEAP_U32(),PThread.mainThreadBlock+44>>2,42)},initWorker:function(){},pthreads:{},exitHandlers:null,setThreadStatus:function(){},runExitHandlers:function(){if(PThread.exitHandlers!==null){while(PThread.exitHandlers.length>0){PThread.exitHandlers.pop()()}PThread.exitHandlers=null}if(ENVIRONMENT_IS_PTHREAD&&threadInfoStruct)___pthread_tsd_run_dtors()},threadExit:function(exitCode){var tb=_pthread_self();if(tb){Atomics.store(GROWABLE_HEAP_U32(),tb+4>>2,exitCode);Atomics.store(GROWABLE_HEAP_U32(),tb+0>>2,1);Atomics.store(GROWABLE_HEAP_U32(),tb+60>>2,1);Atomics.store(GROWABLE_HEAP_U32(),tb+64>>2,0);PThread.runExitHandlers();_emscripten_futex_wake(tb+0,2147483647);__register_pthread_ptr(0,0,0);threadInfoStruct=0;if(ENVIRONMENT_IS_PTHREAD){postMessage({\"cmd\":\"exit\"})}}},threadCancel:function(){PThread.runExitHandlers();Atomics.store(GROWABLE_HEAP_U32(),threadInfoStruct+4>>2,-1);Atomics.store(GROWABLE_HEAP_U32(),threadInfoStruct+0>>2,1);_emscripten_futex_wake(threadInfoStruct+0,2147483647);threadInfoStruct=selfThreadId=0;__register_pthread_ptr(0,0,0);postMessage({\"cmd\":\"cancelDone\"})},terminateAllThreads:function(){for(var t in PThread.pthreads){var pthread=PThread.pthreads[t];if(pthread&&pthread.worker){PThread.returnWorkerToPool(pthread.worker)}}PThread.pthreads={};for(var i=0;i>2];GROWABLE_HEAP_I32()[pthread.threadInfoStruct+104>>2]=0;_free(tlsMemory);_free(pthread.threadInfoStruct)}pthread.threadInfoStruct=0;if(pthread.allocatedOwnStack&&pthread.stackBase)_free(pthread.stackBase);pthread.stackBase=0;if(pthread.worker)pthread.worker.pthread=null},returnWorkerToPool:function(worker){delete PThread.pthreads[worker.pthread.thread];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);PThread.freeThreadData(worker.pthread);worker.pthread=undefined},receiveObjectTransfer:function(data){},loadWasmModuleToWorker:function(worker,onFinishedLoading){worker.onmessage=function(e){var d=e[\"data\"];var cmd=d[\"cmd\"];if(worker.pthread)PThread.currentProxiedOperationCallerThread=worker.pthread.threadInfoStruct;if(d[\"targetThread\"]&&d[\"targetThread\"]!=_pthread_self()){var thread=PThread.pthreads[d.targetThread];if(thread){thread.worker.postMessage(e.data,d[\"transferList\"])}else{console.error('Internal error! Worker sent a message \"'+cmd+'\" to target pthread '+d[\"targetThread\"]+\", but that thread no longer exists!\")}PThread.currentProxiedOperationCallerThread=undefined;return}if(cmd===\"processQueuedMainThreadWork\"){_emscripten_main_thread_process_queued_calls()}else if(cmd===\"spawnThread\"){__spawn_thread(e.data)}else if(cmd===\"cleanupThread\"){__cleanup_thread(d[\"thread\"])}else if(cmd===\"killThread\"){__kill_thread(d[\"thread\"])}else if(cmd===\"cancelThread\"){__cancel_thread(d[\"thread\"])}else if(cmd===\"loaded\"){worker.loaded=true;if(onFinishedLoading)onFinishedLoading(worker);if(worker.runPthread){worker.runPthread();delete worker.runPthread}}else if(cmd===\"print\"){out(\"Thread \"+d[\"threadId\"]+\": \"+d[\"text\"])}else if(cmd===\"printErr\"){err(\"Thread \"+d[\"threadId\"]+\": \"+d[\"text\"])}else if(cmd===\"alert\"){alert(\"Thread \"+d[\"threadId\"]+\": \"+d[\"text\"])}else if(cmd===\"exit\"){var detached=worker.pthread&&Atomics.load(GROWABLE_HEAP_U32(),worker.pthread.thread+68>>2);if(detached){PThread.returnWorkerToPool(worker)}}else if(cmd===\"cancelDone\"){PThread.returnWorkerToPool(worker)}else if(cmd===\"objectTransfer\"){PThread.receiveObjectTransfer(e.data)}else if(e.data.target===\"setimmediate\"){worker.postMessage(e.data)}else{err(\"worker sent an unknown command \"+cmd)}PThread.currentProxiedOperationCallerThread=undefined};worker.onerror=function(e){err(\"pthread sent an error! \"+e.filename+\":\"+e.lineno+\": \"+e.message)};if(ENVIRONMENT_IS_NODE){worker.on(\"message\",function(data){worker.onmessage({data:data})});worker.on(\"error\",function(data){worker.onerror(data)});worker.on(\"exit\",function(data){console.log(\"worker exited - TODO: update the worker queue?\")})}worker.postMessage({\"cmd\":\"load\",\"urlOrBlob\":Module[\"mainScriptUrlOrBlob\"]||_scriptDir,\"wasmMemory\":wasmMemory,\"wasmModule\":wasmModule,\"DYNAMIC_BASE\":DYNAMIC_BASE,\"DYNAMICTOP_PTR\":DYNAMICTOP_PTR})},allocateUnusedWorker:function(){var pthreadMainJs=locateFile(\"tfjs-backend-wasm-threaded-simd.worker.js\");PThread.unusedWorkers.push(new Worker(pthreadMainJs))},getNewWorker:function(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}if(PThread.unusedWorkers.length>0)return PThread.unusedWorkers.pop();else return null},busySpinWait:function(msecs){var t=performance.now()+msecs;while(performance.now()>2]=value;return value}function _atexit(func,arg){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,func,arg);__ATEXIT__.unshift({func:func,arg:arg})}function __emscripten_notify_thread_queue(targetThreadId,mainThreadId){if(targetThreadId==mainThreadId){postMessage({\"cmd\":\"processQueuedMainThreadWork\"})}else if(ENVIRONMENT_IS_PTHREAD){postMessage({\"targetThread\":targetThreadId,\"cmd\":\"processThreadQueue\"})}else{var pthread=PThread.pthreads[targetThreadId];var worker=pthread&&pthread.worker;if(!worker){return}worker.postMessage({\"cmd\":\"processThreadQueue\"})}return 1}function _abort(){abort()}function _emscripten_conditional_set_current_thread_status(expectedStatus,newStatus){expectedStatus=expectedStatus|0;newStatus=newStatus|0}function _emscripten_futex_wait(addr,val,timeout){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0)return-28;if(ENVIRONMENT_IS_WORKER){var ret=Atomics.wait(GROWABLE_HEAP_I32(),addr>>2,val,timeout);if(ret===\"timed-out\")return-73;if(ret===\"not-equal\")return-6;if(ret===\"ok\")return 0;throw\"Atomics.wait returned an unexpected value \"+ret}else{var loadedVal=Atomics.load(GROWABLE_HEAP_I32(),addr>>2);if(val!=loadedVal)return-6;var tNow=performance.now();var tEnd=tNow+timeout;Atomics.store(GROWABLE_HEAP_I32(),__main_thread_futex_wait_address>>2,addr);var ourWaitAddress=addr;while(addr==ourWaitAddress){tNow=performance.now();if(tNow>tEnd){return-73}_emscripten_main_thread_process_queued_calls();addr=Atomics.load(GROWABLE_HEAP_I32(),__main_thread_futex_wait_address>>2)}return 0}}function _emscripten_is_main_browser_thread(){return __pthread_is_main_browser_thread|0}function _emscripten_is_main_runtime_thread(){return __pthread_is_main_runtime_thread|0}function _emscripten_memcpy_big(dest,src,num){GROWABLE_HEAP_U8().copyWithin(dest,src,src+num)}function _emscripten_num_logical_cores(){return navigator[\"hardwareConcurrency\"]}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var stack=stackSave();var args=stackAlloc(numCallArgs*8);var b=args>>3;for(var i=0;i>3]);buf+=8}else{buf=buf+3&~3;args.push(GROWABLE_HEAP_I32()[buf>>2]);buf+=4}}return args}function _emscripten_receive_on_main_thread_js(index,numCallArgs,args){_emscripten_receive_on_main_thread_js_callArgs.length=numCallArgs;var b=args>>3;for(var i=0;i>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();if(requestedSize<=oldSize){return false}var PAGE_MULTIPLE=65536;var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),PAGE_MULTIPLE));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence>2]=eventTypeId;GROWABLE_HEAP_I32()[varargs+4>>2]=eventData;GROWABLE_HEAP_I32()[varargs+8>>2]=userData;_emscripten_async_queue_on_thread_(targetThread,637534208,eventHandlerFunc,eventData,varargs);stackRestore(stackTop)},getTargetThreadForEventCallback:function(targetThread){switch(targetThread){case 1:return 0;case 2:return PThread.currentProxiedOperationCallerThread;default:return targetThread}},getNodeNameForTarget:function(target){if(!target)return\"\";if(target==window)return\"#window\";if(target==screen)return\"#screen\";return target&&target.nodeName?target.nodeName:\"\"},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height){var stackTop=stackSave();var varargs=stackAlloc(12);var targetCanvasPtr=0;if(targetCanvas){targetCanvasPtr=stringToNewUTF8(targetCanvas)}GROWABLE_HEAP_I32()[varargs>>2]=targetCanvasPtr;GROWABLE_HEAP_I32()[varargs+4>>2]=width;GROWABLE_HEAP_I32()[varargs+8>>2]=height;_emscripten_async_queue_on_thread_(targetThread,657457152,0,targetCanvasPtr,varargs);stackRestore(stackTop)}function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread,targetCanvas,width,height){targetCanvas=targetCanvas?UTF8ToString(targetCanvas):\"\";_emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height)}function __maybeCStringToJsString(cString){return cString>2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!==\"undefined\"?document:0,typeof window!==\"undefined\"?window:0];function __findEventTarget(target){target=__maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!==\"undefined\"?document.querySelector(target):undefined);return domElement}function __findCanvasEventTarget(target){return __findEventTarget(target)}function _emscripten_set_canvas_element_size_calling_thread(target,width,height){var canvas=__findCanvasEventTarget(target);if(!canvas)return-4;if(canvas.canvasSharedPtr){GROWABLE_HEAP_I32()[canvas.canvasSharedPtr>>2]=width;GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+4>>2]=height}if(canvas.offscreenCanvas||!canvas.controlTransferredOffscreen){if(canvas.offscreenCanvas)canvas=canvas.offscreenCanvas;var autoResizeViewport=false;if(canvas.GLctxObject&&canvas.GLctxObject.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(2978);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else if(canvas.canvasSharedPtr){var targetThread=GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+8>>2];_emscripten_set_offscreencanvas_size_on_target_thread(targetThread,target,width,height);return 1}else{return-4}return 0}function _emscripten_set_canvas_element_size_main_thread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(2,1,target,width,height);return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=__findCanvasEventTarget(target);if(canvas){return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}else{return _emscripten_set_canvas_element_size_main_thread(target,width,height)}}function _emscripten_set_current_thread_status(newStatus){newStatus=newStatus|0}function _emscripten_set_thread_name(threadId,name){threadId=threadId|0;name=name|0}function __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension(\"ANGLE_instanced_arrays\");if(ext){ctx[\"vertexAttribDivisor\"]=function(index,divisor){ext[\"vertexAttribDivisorANGLE\"](index,divisor)};ctx[\"drawArraysInstanced\"]=function(mode,first,count,primcount){ext[\"drawArraysInstancedANGLE\"](mode,first,count,primcount)};ctx[\"drawElementsInstanced\"]=function(mode,count,type,indices,primcount){ext[\"drawElementsInstancedANGLE\"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension(\"OES_vertex_array_object\");if(ext){ctx[\"createVertexArray\"]=function(){return ext[\"createVertexArrayOES\"]()};ctx[\"deleteVertexArray\"]=function(vao){ext[\"deleteVertexArrayOES\"](vao)};ctx[\"bindVertexArray\"]=function(vao){ext[\"bindVertexArrayOES\"](vao)};ctx[\"isVertexArray\"]=function(vao){return ext[\"isVertexArrayOES\"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension(\"WEBGL_draw_buffers\");if(ext){ctx[\"drawBuffers\"]=function(n,bufs){ext[\"drawBuffersWEBGL\"](n,bufs)};return 1}}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){var miniTempFloatBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(GROWABLE_HEAP_I32()[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext(\"webgl\",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);GROWABLE_HEAP_I32()[handle+4>>2]=_pthread_self();var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault===\"undefined\"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents===\"object\")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle].handle);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;__webgl_enable_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension(\"EXT_disjoint_timer_query\");var automaticallyEnabledExtensions=[\"OES_texture_float\",\"OES_texture_half_float\",\"OES_standard_derivatives\",\"OES_vertex_array_object\",\"WEBGL_compressed_texture_s3tc\",\"WEBGL_depth_texture\",\"OES_element_index_uint\",\"EXT_texture_filter_anisotropic\",\"EXT_frag_depth\",\"WEBGL_draw_buffers\",\"ANGLE_instanced_arrays\",\"OES_texture_float_linear\",\"OES_texture_half_float_linear\",\"EXT_blend_minmax\",\"EXT_shader_texture_lod\",\"EXT_texture_norm16\",\"WEBGL_compressed_texture_pvrtc\",\"EXT_color_buffer_half_float\",\"WEBGL_color_buffer_float\",\"EXT_sRGB\",\"WEBGL_compressed_texture_etc1\",\"EXT_disjoint_timer_query\",\"WEBGL_compressed_texture_etc\",\"WEBGL_compressed_texture_astc\",\"EXT_color_buffer_float\",\"WEBGL_compressed_texture_s3tc_srgb\",\"EXT_disjoint_timer_query_webgl2\",\"WEBKIT_WEBGL_compressed_texture_pvrtc\"];var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2;contextAttributes[\"alpha\"]=!!GROWABLE_HEAP_I32()[a+(0>>2)];contextAttributes[\"depth\"]=!!GROWABLE_HEAP_I32()[a+(4>>2)];contextAttributes[\"stencil\"]=!!GROWABLE_HEAP_I32()[a+(8>>2)];contextAttributes[\"antialias\"]=!!GROWABLE_HEAP_I32()[a+(12>>2)];contextAttributes[\"premultipliedAlpha\"]=!!GROWABLE_HEAP_I32()[a+(16>>2)];contextAttributes[\"preserveDrawingBuffer\"]=!!GROWABLE_HEAP_I32()[a+(20>>2)];var powerPreference=GROWABLE_HEAP_I32()[a+(24>>2)];contextAttributes[\"powerPreference\"]=__emscripten_webgl_power_preferences[powerPreference];contextAttributes[\"failIfMajorPerformanceCaveat\"]=!!GROWABLE_HEAP_I32()[a+(28>>2)];contextAttributes.majorVersion=GROWABLE_HEAP_I32()[a+(32>>2)];contextAttributes.minorVersion=GROWABLE_HEAP_I32()[a+(36>>2)];contextAttributes.enableExtensionsByDefault=GROWABLE_HEAP_I32()[a+(40>>2)];contextAttributes.explicitSwapControl=GROWABLE_HEAP_I32()[a+(44>>2)];contextAttributes.proxyContextToMainThread=GROWABLE_HEAP_I32()[a+(48>>2)];contextAttributes.renderViaOffscreenBackBuffer=GROWABLE_HEAP_I32()[a+(52>>2)];var canvas=__findCanvasEventTarget(target);if(!canvas){return-4}if(contextAttributes.explicitSwapControl){return-1}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _emscripten_webgl_create_context(a0,a1){return _emscripten_webgl_do_create_context(a0,a1)}var PATH={splitPath:function(filename){var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1)}else if(last===\"..\"){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)===\"/\",trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p}),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\"}if(path&&trailingSlash){path+=\"/\"}return(isAbsolute?\"/\":\"\")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\"}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path===\"/\")return\"/\";var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join(\"/\"))},join2:function(l,r){return PATH.normalize(l+\"/\"+r)}};var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=GROWABLE_HEAP_I32()[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(3,1,fd);return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(4,1,fd,offset_low,offset_high,whence,newOffset)}function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(5,1,fd,iov,iovcnt,pnum);var num=0;for(var i=0;i>2];var len=GROWABLE_HEAP_I32()[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _pthread_cleanup_pop(execute){var routine=PThread.exitHandlers.pop();if(execute)routine()}function _pthread_cleanup_push(routine,arg){if(PThread.exitHandlers===null){PThread.exitHandlers=[]}PThread.exitHandlers.push(function(){dynCall_vi(routine,arg)})}function __spawn_thread(threadParams){if(ENVIRONMENT_IS_PTHREAD)throw\"Internal Error! _spawn_thread() can only ever be called from main application thread!\";var worker=PThread.getNewWorker();if(worker.pthread!==undefined)throw\"Internal error!\";if(!threadParams.pthread_ptr)throw\"Internal error, no pthread ptr!\";PThread.runningWorkers.push(worker);var tlsMemory=_malloc(128*4);for(var i=0;i<128;++i){GROWABLE_HEAP_I32()[tlsMemory+i*4>>2]=0}var stackHigh=threadParams.stackBase+threadParams.stackSize;var pthread=PThread.pthreads[threadParams.pthread_ptr]={worker:worker,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize,allocatedOwnStack:threadParams.allocatedOwnStack,thread:threadParams.pthread_ptr,threadInfoStruct:threadParams.pthread_ptr};var tis=pthread.threadInfoStruct>>2;Atomics.store(GROWABLE_HEAP_U32(),tis+(0>>2),0);Atomics.store(GROWABLE_HEAP_U32(),tis+(4>>2),0);Atomics.store(GROWABLE_HEAP_U32(),tis+(8>>2),0);Atomics.store(GROWABLE_HEAP_U32(),tis+(68>>2),threadParams.detached);Atomics.store(GROWABLE_HEAP_U32(),tis+(104>>2),tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),tis+(48>>2),0);Atomics.store(GROWABLE_HEAP_U32(),tis+(40>>2),pthread.threadInfoStruct);Atomics.store(GROWABLE_HEAP_U32(),tis+(44>>2),42);Atomics.store(GROWABLE_HEAP_U32(),tis+(108>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(84>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(80>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(108+8>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(108+12>>2),threadParams.detached);Atomics.store(GROWABLE_HEAP_U32(),tis+(108+20>>2),threadParams.schedPolicy);Atomics.store(GROWABLE_HEAP_U32(),tis+(108+24>>2),threadParams.schedPrio);var global_libc=_emscripten_get_global_libc();var global_locale=global_libc+40;Atomics.store(GROWABLE_HEAP_U32(),tis+(176>>2),global_locale);worker.pthread=pthread;var msg={\"cmd\":\"run\",\"start_routine\":threadParams.startRoutine,\"arg\":threadParams.arg,\"threadInfoStruct\":threadParams.pthread_ptr,\"selfThreadId\":threadParams.pthread_ptr,\"parentThreadId\":threadParams.parent_pthread_ptr,\"stackBase\":threadParams.stackBase,\"stackSize\":threadParams.stackSize};worker.runPthread=function(){msg.time=performance.now();worker.postMessage(msg,threadParams.transferList)};if(worker.loaded){worker.runPthread();delete worker.runPthread}}function _pthread_getschedparam(thread,policy,schedparam){if(!policy&&!schedparam)return ERRNO_CODES.EINVAL;if(!thread){err(\"pthread_getschedparam called with a null thread pointer!\");return ERRNO_CODES.ESRCH}var self=GROWABLE_HEAP_I32()[thread+12>>2];if(self!==thread){err(\"pthread_getschedparam attempted on thread \"+thread+\", which does not point to a valid thread, or does not exist anymore!\");return ERRNO_CODES.ESRCH}var schedPolicy=Atomics.load(GROWABLE_HEAP_U32(),thread+108+20>>2);var schedPrio=Atomics.load(GROWABLE_HEAP_U32(),thread+108+24>>2);if(policy)GROWABLE_HEAP_I32()[policy>>2]=schedPolicy;if(schedparam)GROWABLE_HEAP_I32()[schedparam>>2]=schedPrio;return 0}function _pthread_self(){return __pthread_ptr|0}Module[\"_pthread_self\"]=_pthread_self;function _pthread_create(pthread_ptr,attr,start_routine,arg){if(typeof SharedArrayBuffer===\"undefined\"){err(\"Current environment does not support SharedArrayBuffer, pthreads are not available!\");return 6}if(!pthread_ptr){err(\"pthread_create called with a null thread pointer!\");return 28}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return _emscripten_sync_run_in_main_thread_4(687865856,pthread_ptr,attr,start_routine,arg)}if(error)return error;var stackSize=0;var stackBase=0;var detached=0;var schedPolicy=0;var schedPrio=0;if(attr){stackSize=GROWABLE_HEAP_I32()[attr>>2];stackSize+=81920;stackBase=GROWABLE_HEAP_I32()[attr+8>>2];detached=GROWABLE_HEAP_I32()[attr+12>>2]!==0;var inheritSched=GROWABLE_HEAP_I32()[attr+16>>2]===0;if(inheritSched){var prevSchedPolicy=GROWABLE_HEAP_I32()[attr+20>>2];var prevSchedPrio=GROWABLE_HEAP_I32()[attr+24>>2];var parentThreadPtr=PThread.currentProxiedOperationCallerThread?PThread.currentProxiedOperationCallerThread:_pthread_self();_pthread_getschedparam(parentThreadPtr,attr+20,attr+24);schedPolicy=GROWABLE_HEAP_I32()[attr+20>>2];schedPrio=GROWABLE_HEAP_I32()[attr+24>>2];GROWABLE_HEAP_I32()[attr+20>>2]=prevSchedPolicy;GROWABLE_HEAP_I32()[attr+24>>2]=prevSchedPrio}else{schedPolicy=GROWABLE_HEAP_I32()[attr+20>>2];schedPrio=GROWABLE_HEAP_I32()[attr+24>>2]}}else{stackSize=2097152}var allocatedOwnStack=stackBase==0;if(allocatedOwnStack){stackBase=_memalign(16,stackSize)}else{stackBase-=stackSize;assert(stackBase>0)}var threadInfoStruct=_malloc(232);for(var i=0;i<232>>2;++i)GROWABLE_HEAP_U32()[(threadInfoStruct>>2)+i]=0;GROWABLE_HEAP_I32()[pthread_ptr>>2]=threadInfoStruct;GROWABLE_HEAP_I32()[threadInfoStruct+12>>2]=threadInfoStruct;var headPtr=threadInfoStruct+156;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var threadParams={stackBase:stackBase,stackSize:stackSize,allocatedOwnStack:allocatedOwnStack,schedPolicy:schedPolicy,schedPrio:schedPrio,detached:detached,startRoutine:start_routine,pthread_ptr:threadInfoStruct,parent_pthread_ptr:_pthread_self(),arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd=\"spawnThread\";postMessage(threadParams,transferList)}else{__spawn_thread(threadParams)}return 0}function _roundf(d){d=+d;return d>=+0?+Math_floor(d+ +.5):+Math_ceil(d-+.5)}function _sysconf(name){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(6,1,name);switch(name){case 30:return 16384;case 85:var maxHeapSize=2147483648;return maxHeapSize/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:case 79:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator===\"object\")return navigator[\"hardwareConcurrency\"]||1;return 1}}setErrNo(28);return-1}if(!ENVIRONMENT_IS_PTHREAD)PThread.initMainThreadBlock();else PThread.initWorker();var GLctx;GL.init();var proxiedFunctionTable=[null,_atexit,_emscripten_set_canvas_element_size_main_thread,_fd_close,_fd_seek,_fd_write,_sysconf];var asmLibraryArg={\"e\":___assert_fail,\"r\":___call_main,\"w\":__emscripten_notify_thread_queue,\"a\":_abort,\"l\":_emscripten_conditional_set_current_thread_status,\"d\":_emscripten_futex_wait,\"c\":_emscripten_futex_wake,\"h\":_emscripten_get_now,\"g\":_emscripten_is_main_browser_thread,\"x\":_emscripten_is_main_runtime_thread,\"q\":_emscripten_memcpy_big,\"B\":_emscripten_num_logical_cores,\"t\":_emscripten_receive_on_main_thread_js,\"A\":_emscripten_resize_heap,\"u\":_emscripten_set_canvas_element_size,\"k\":_emscripten_set_current_thread_status,\"s\":_emscripten_set_thread_name,\"v\":_emscripten_webgl_create_context,\"m\":_fd_close,\"o\":_fd_seek,\"i\":_fd_write,\"p\":initPthreadsJS,\"memory\":wasmMemory||Module[\"wasmMemory\"],\"y\":_pthread_cleanup_pop,\"z\":_pthread_cleanup_push,\"j\":_pthread_create,\"b\":_pthread_self,\"f\":_roundf,\"n\":_sysconf,\"table\":wasmTable};var asm=createWasm();Module[\"asm\"]=asm;var ___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=function(){return(___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=Module[\"asm\"][\"C\"]).apply(null,arguments)};var _init=Module[\"_init\"]=function(){return(_init=Module[\"_init\"]=Module[\"asm\"][\"D\"]).apply(null,arguments)};var _register_tensor=Module[\"_register_tensor\"]=function(){return(_register_tensor=Module[\"_register_tensor\"]=Module[\"asm\"][\"E\"]).apply(null,arguments)};var _dispose_data=Module[\"_dispose_data\"]=function(){return(_dispose_data=Module[\"_dispose_data\"]=Module[\"asm\"][\"F\"]).apply(null,arguments)};var _dispose=Module[\"_dispose\"]=function(){return(_dispose=Module[\"_dispose\"]=Module[\"asm\"][\"G\"]).apply(null,arguments)};var _Abs=Module[\"_Abs\"]=function(){return(_Abs=Module[\"_Abs\"]=Module[\"asm\"][\"H\"]).apply(null,arguments)};var _Add=Module[\"_Add\"]=function(){return(_Add=Module[\"_Add\"]=Module[\"asm\"][\"I\"]).apply(null,arguments)};var _AddN=Module[\"_AddN\"]=function(){return(_AddN=Module[\"_AddN\"]=Module[\"asm\"][\"J\"]).apply(null,arguments)};var _ArgMax=Module[\"_ArgMax\"]=function(){return(_ArgMax=Module[\"_ArgMax\"]=Module[\"asm\"][\"K\"]).apply(null,arguments)};var _AvgPool=Module[\"_AvgPool\"]=function(){return(_AvgPool=Module[\"_AvgPool\"]=Module[\"asm\"][\"L\"]).apply(null,arguments)};var _BatchMatMul=Module[\"_BatchMatMul\"]=function(){return(_BatchMatMul=Module[\"_BatchMatMul\"]=Module[\"asm\"][\"M\"]).apply(null,arguments)};var _ClipByValue=Module[\"_ClipByValue\"]=function(){return(_ClipByValue=Module[\"_ClipByValue\"]=Module[\"asm\"][\"N\"]).apply(null,arguments)};var _Conv2D=Module[\"_Conv2D\"]=function(){return(_Conv2D=Module[\"_Conv2D\"]=Module[\"asm\"][\"O\"]).apply(null,arguments)};var _Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=function(){return(_Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=Module[\"asm\"][\"P\"]).apply(null,arguments)};var _Cos=Module[\"_Cos\"]=function(){return(_Cos=Module[\"_Cos\"]=Module[\"asm\"][\"Q\"]).apply(null,arguments)};var _CropAndResize=Module[\"_CropAndResize\"]=function(){return(_CropAndResize=Module[\"_CropAndResize\"]=Module[\"asm\"][\"R\"]).apply(null,arguments)};var _Cumsum=Module[\"_Cumsum\"]=function(){return(_Cumsum=Module[\"_Cumsum\"]=Module[\"asm\"][\"S\"]).apply(null,arguments)};var _DepthToSpace=Module[\"_DepthToSpace\"]=function(){return(_DepthToSpace=Module[\"_DepthToSpace\"]=Module[\"asm\"][\"T\"]).apply(null,arguments)};var _DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=function(){return(_DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=Module[\"asm\"][\"U\"]).apply(null,arguments)};var _Equal=Module[\"_Equal\"]=function(){return(_Equal=Module[\"_Equal\"]=Module[\"asm\"][\"V\"]).apply(null,arguments)};var _Exp=Module[\"_Exp\"]=function(){return(_Exp=Module[\"_Exp\"]=Module[\"asm\"][\"W\"]).apply(null,arguments)};var _FlipLeftRight=Module[\"_FlipLeftRight\"]=function(){return(_FlipLeftRight=Module[\"_FlipLeftRight\"]=Module[\"asm\"][\"X\"]).apply(null,arguments)};var _Floor=Module[\"_Floor\"]=function(){return(_Floor=Module[\"_Floor\"]=Module[\"asm\"][\"Y\"]).apply(null,arguments)};var _FloorDiv=Module[\"_FloorDiv\"]=function(){return(_FloorDiv=Module[\"_FloorDiv\"]=Module[\"asm\"][\"Z\"]).apply(null,arguments)};var _FusedBatchNorm=Module[\"_FusedBatchNorm\"]=function(){return(_FusedBatchNorm=Module[\"_FusedBatchNorm\"]=Module[\"asm\"][\"_\"]).apply(null,arguments)};var _FusedConv2D=Module[\"_FusedConv2D\"]=function(){return(_FusedConv2D=Module[\"_FusedConv2D\"]=Module[\"asm\"][\"$\"]).apply(null,arguments)};var _FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=function(){return(_FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=Module[\"asm\"][\"aa\"]).apply(null,arguments)};var _Gather=Module[\"_Gather\"]=function(){return(_Gather=Module[\"_Gather\"]=Module[\"asm\"][\"ba\"]).apply(null,arguments)};var _GatherNd=Module[\"_GatherNd\"]=function(){return(_GatherNd=Module[\"_GatherNd\"]=Module[\"asm\"][\"ca\"]).apply(null,arguments)};var _Greater=Module[\"_Greater\"]=function(){return(_Greater=Module[\"_Greater\"]=Module[\"asm\"][\"da\"]).apply(null,arguments)};var _GreaterEqual=Module[\"_GreaterEqual\"]=function(){return(_GreaterEqual=Module[\"_GreaterEqual\"]=Module[\"asm\"][\"ea\"]).apply(null,arguments)};var _LeakyRelu=Module[\"_LeakyRelu\"]=function(){return(_LeakyRelu=Module[\"_LeakyRelu\"]=Module[\"asm\"][\"fa\"]).apply(null,arguments)};var _Less=Module[\"_Less\"]=function(){return(_Less=Module[\"_Less\"]=Module[\"asm\"][\"ga\"]).apply(null,arguments)};var _LessEqual=Module[\"_LessEqual\"]=function(){return(_LessEqual=Module[\"_LessEqual\"]=Module[\"asm\"][\"ha\"]).apply(null,arguments)};var _Log=Module[\"_Log\"]=function(){return(_Log=Module[\"_Log\"]=Module[\"asm\"][\"ia\"]).apply(null,arguments)};var _LogicalAnd=Module[\"_LogicalAnd\"]=function(){return(_LogicalAnd=Module[\"_LogicalAnd\"]=Module[\"asm\"][\"ja\"]).apply(null,arguments)};var _Max=Module[\"_Max\"]=function(){return(_Max=Module[\"_Max\"]=Module[\"asm\"][\"ka\"]).apply(null,arguments)};var _MaxPool=Module[\"_MaxPool\"]=function(){return(_MaxPool=Module[\"_MaxPool\"]=Module[\"asm\"][\"la\"]).apply(null,arguments)};var _Maximum=Module[\"_Maximum\"]=function(){return(_Maximum=Module[\"_Maximum\"]=Module[\"asm\"][\"ma\"]).apply(null,arguments)};var _Mean=Module[\"_Mean\"]=function(){return(_Mean=Module[\"_Mean\"]=Module[\"asm\"][\"na\"]).apply(null,arguments)};var _Min=Module[\"_Min\"]=function(){return(_Min=Module[\"_Min\"]=Module[\"asm\"][\"oa\"]).apply(null,arguments)};var _Minimum=Module[\"_Minimum\"]=function(){return(_Minimum=Module[\"_Minimum\"]=Module[\"asm\"][\"pa\"]).apply(null,arguments)};var _Multiply=Module[\"_Multiply\"]=function(){return(_Multiply=Module[\"_Multiply\"]=Module[\"asm\"][\"qa\"]).apply(null,arguments)};var _Neg=Module[\"_Neg\"]=function(){return(_Neg=Module[\"_Neg\"]=Module[\"asm\"][\"ra\"]).apply(null,arguments)};var _NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=function(){return(_NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=Module[\"asm\"][\"sa\"]).apply(null,arguments)};var _NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=function(){return(_NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=Module[\"asm\"][\"ta\"]).apply(null,arguments)};var _NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=function(){return(_NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=Module[\"asm\"][\"ua\"]).apply(null,arguments)};var _NotEqual=Module[\"_NotEqual\"]=function(){return(_NotEqual=Module[\"_NotEqual\"]=Module[\"asm\"][\"va\"]).apply(null,arguments)};var _OneHot=Module[\"_OneHot\"]=function(){return(_OneHot=Module[\"_OneHot\"]=Module[\"asm\"][\"wa\"]).apply(null,arguments)};var _PadV2=Module[\"_PadV2\"]=function(){return(_PadV2=Module[\"_PadV2\"]=Module[\"asm\"][\"xa\"]).apply(null,arguments)};var _Pow=Module[\"_Pow\"]=function(){return(_Pow=Module[\"_Pow\"]=Module[\"asm\"][\"ya\"]).apply(null,arguments)};var _Prelu=Module[\"_Prelu\"]=function(){return(_Prelu=Module[\"_Prelu\"]=Module[\"asm\"][\"za\"]).apply(null,arguments)};var _Prod=Module[\"_Prod\"]=function(){return(_Prod=Module[\"_Prod\"]=Module[\"asm\"][\"Aa\"]).apply(null,arguments)};var _RealDiv=Module[\"_RealDiv\"]=function(){return(_RealDiv=Module[\"_RealDiv\"]=Module[\"asm\"][\"Ba\"]).apply(null,arguments)};var _Relu=Module[\"_Relu\"]=function(){return(_Relu=Module[\"_Relu\"]=Module[\"asm\"][\"Ca\"]).apply(null,arguments)};var _Relu6=Module[\"_Relu6\"]=function(){return(_Relu6=Module[\"_Relu6\"]=Module[\"asm\"][\"Da\"]).apply(null,arguments)};var _ResizeBilinear=Module[\"_ResizeBilinear\"]=function(){return(_ResizeBilinear=Module[\"_ResizeBilinear\"]=Module[\"asm\"][\"Ea\"]).apply(null,arguments)};var _Reverse=Module[\"_Reverse\"]=function(){return(_Reverse=Module[\"_Reverse\"]=Module[\"asm\"][\"Fa\"]).apply(null,arguments)};var _RotateWithOffset=Module[\"_RotateWithOffset\"]=function(){return(_RotateWithOffset=Module[\"_RotateWithOffset\"]=Module[\"asm\"][\"Ga\"]).apply(null,arguments)};var _Rsqrt=Module[\"_Rsqrt\"]=function(){return(_Rsqrt=Module[\"_Rsqrt\"]=Module[\"asm\"][\"Ha\"]).apply(null,arguments)};var _ScatterNd=Module[\"_ScatterNd\"]=function(){return(_ScatterNd=Module[\"_ScatterNd\"]=Module[\"asm\"][\"Ia\"]).apply(null,arguments)};var _SelectV2=Module[\"_SelectV2\"]=function(){return(_SelectV2=Module[\"_SelectV2\"]=Module[\"asm\"][\"Ja\"]).apply(null,arguments)};var _Sigmoid=Module[\"_Sigmoid\"]=function(){return(_Sigmoid=Module[\"_Sigmoid\"]=Module[\"asm\"][\"Ka\"]).apply(null,arguments)};var _Sin=Module[\"_Sin\"]=function(){return(_Sin=Module[\"_Sin\"]=Module[\"asm\"][\"La\"]).apply(null,arguments)};var _Softmax=Module[\"_Softmax\"]=function(){return(_Softmax=Module[\"_Softmax\"]=Module[\"asm\"][\"Ma\"]).apply(null,arguments)};var _Sqrt=Module[\"_Sqrt\"]=function(){return(_Sqrt=Module[\"_Sqrt\"]=Module[\"asm\"][\"Na\"]).apply(null,arguments)};var _Square=Module[\"_Square\"]=function(){return(_Square=Module[\"_Square\"]=Module[\"asm\"][\"Oa\"]).apply(null,arguments)};var _SquaredDifference=Module[\"_SquaredDifference\"]=function(){return(_SquaredDifference=Module[\"_SquaredDifference\"]=Module[\"asm\"][\"Pa\"]).apply(null,arguments)};var _StridedSlice=Module[\"_StridedSlice\"]=function(){return(_StridedSlice=Module[\"_StridedSlice\"]=Module[\"asm\"][\"Qa\"]).apply(null,arguments)};var _Sub=Module[\"_Sub\"]=function(){return(_Sub=Module[\"_Sub\"]=Module[\"asm\"][\"Ra\"]).apply(null,arguments)};var _Sum=Module[\"_Sum\"]=function(){return(_Sum=Module[\"_Sum\"]=Module[\"asm\"][\"Sa\"]).apply(null,arguments)};var _Tanh=Module[\"_Tanh\"]=function(){return(_Tanh=Module[\"_Tanh\"]=Module[\"asm\"][\"Ta\"]).apply(null,arguments)};var _Tile=Module[\"_Tile\"]=function(){return(_Tile=Module[\"_Tile\"]=Module[\"asm\"][\"Ua\"]).apply(null,arguments)};var _TopK=Module[\"_TopK\"]=function(){return(_TopK=Module[\"_TopK\"]=Module[\"asm\"][\"Va\"]).apply(null,arguments)};var _Transpose=Module[\"_Transpose\"]=function(){return(_Transpose=Module[\"_Transpose\"]=Module[\"asm\"][\"Wa\"]).apply(null,arguments)};var __FusedMatMul=Module[\"__FusedMatMul\"]=function(){return(__FusedMatMul=Module[\"__FusedMatMul\"]=Module[\"asm\"][\"Xa\"]).apply(null,arguments)};var _malloc=Module[\"_malloc\"]=function(){return(_malloc=Module[\"_malloc\"]=Module[\"asm\"][\"Ya\"]).apply(null,arguments)};var _free=Module[\"_free\"]=function(){return(_free=Module[\"_free\"]=Module[\"asm\"][\"Za\"]).apply(null,arguments)};var ___errno_location=Module[\"___errno_location\"]=function(){return(___errno_location=Module[\"___errno_location\"]=Module[\"asm\"][\"_a\"]).apply(null,arguments)};var _emscripten_get_global_libc=Module[\"_emscripten_get_global_libc\"]=function(){return(_emscripten_get_global_libc=Module[\"_emscripten_get_global_libc\"]=Module[\"asm\"][\"$a\"]).apply(null,arguments)};var ___em_js__initPthreadsJS=Module[\"___em_js__initPthreadsJS\"]=function(){return(___em_js__initPthreadsJS=Module[\"___em_js__initPthreadsJS\"]=Module[\"asm\"][\"ab\"]).apply(null,arguments)};var _memalign=Module[\"_memalign\"]=function(){return(_memalign=Module[\"_memalign\"]=Module[\"asm\"][\"bb\"]).apply(null,arguments)};var ___pthread_tsd_run_dtors=Module[\"___pthread_tsd_run_dtors\"]=function(){return(___pthread_tsd_run_dtors=Module[\"___pthread_tsd_run_dtors\"]=Module[\"asm\"][\"cb\"]).apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module[\"_emscripten_main_thread_process_queued_calls\"]=function(){return(_emscripten_main_thread_process_queued_calls=Module[\"_emscripten_main_thread_process_queued_calls\"]=Module[\"asm\"][\"db\"]).apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module[\"_emscripten_current_thread_process_queued_calls\"]=function(){return(_emscripten_current_thread_process_queued_calls=Module[\"_emscripten_current_thread_process_queued_calls\"]=Module[\"asm\"][\"eb\"]).apply(null,arguments)};var _emscripten_register_main_browser_thread_id=Module[\"_emscripten_register_main_browser_thread_id\"]=function(){return(_emscripten_register_main_browser_thread_id=Module[\"_emscripten_register_main_browser_thread_id\"]=Module[\"asm\"][\"fb\"]).apply(null,arguments)};var _emscripten_main_browser_thread_id=Module[\"_emscripten_main_browser_thread_id\"]=function(){return(_emscripten_main_browser_thread_id=Module[\"_emscripten_main_browser_thread_id\"]=Module[\"asm\"][\"gb\"]).apply(null,arguments)};var _emscripten_async_run_in_main_thread=Module[\"_emscripten_async_run_in_main_thread\"]=function(){return(_emscripten_async_run_in_main_thread=Module[\"_emscripten_async_run_in_main_thread\"]=Module[\"asm\"][\"hb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread=Module[\"_emscripten_sync_run_in_main_thread\"]=function(){return(_emscripten_sync_run_in_main_thread=Module[\"_emscripten_sync_run_in_main_thread\"]=Module[\"asm\"][\"ib\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_0=Module[\"_emscripten_sync_run_in_main_thread_0\"]=function(){return(_emscripten_sync_run_in_main_thread_0=Module[\"_emscripten_sync_run_in_main_thread_0\"]=Module[\"asm\"][\"jb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_1=Module[\"_emscripten_sync_run_in_main_thread_1\"]=function(){return(_emscripten_sync_run_in_main_thread_1=Module[\"_emscripten_sync_run_in_main_thread_1\"]=Module[\"asm\"][\"kb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_2=Module[\"_emscripten_sync_run_in_main_thread_2\"]=function(){return(_emscripten_sync_run_in_main_thread_2=Module[\"_emscripten_sync_run_in_main_thread_2\"]=Module[\"asm\"][\"lb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_xprintf_varargs=Module[\"_emscripten_sync_run_in_main_thread_xprintf_varargs\"]=function(){return(_emscripten_sync_run_in_main_thread_xprintf_varargs=Module[\"_emscripten_sync_run_in_main_thread_xprintf_varargs\"]=Module[\"asm\"][\"mb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_3=Module[\"_emscripten_sync_run_in_main_thread_3\"]=function(){return(_emscripten_sync_run_in_main_thread_3=Module[\"_emscripten_sync_run_in_main_thread_3\"]=Module[\"asm\"][\"nb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_4=Module[\"_emscripten_sync_run_in_main_thread_4\"]=function(){return(_emscripten_sync_run_in_main_thread_4=Module[\"_emscripten_sync_run_in_main_thread_4\"]=Module[\"asm\"][\"ob\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_5=Module[\"_emscripten_sync_run_in_main_thread_5\"]=function(){return(_emscripten_sync_run_in_main_thread_5=Module[\"_emscripten_sync_run_in_main_thread_5\"]=Module[\"asm\"][\"pb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_6=Module[\"_emscripten_sync_run_in_main_thread_6\"]=function(){return(_emscripten_sync_run_in_main_thread_6=Module[\"_emscripten_sync_run_in_main_thread_6\"]=Module[\"asm\"][\"qb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_7=Module[\"_emscripten_sync_run_in_main_thread_7\"]=function(){return(_emscripten_sync_run_in_main_thread_7=Module[\"_emscripten_sync_run_in_main_thread_7\"]=Module[\"asm\"][\"rb\"]).apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module[\"_emscripten_run_in_main_runtime_thread_js\"]=function(){return(_emscripten_run_in_main_runtime_thread_js=Module[\"_emscripten_run_in_main_runtime_thread_js\"]=Module[\"asm\"][\"sb\"]).apply(null,arguments)};var _emscripten_async_queue_on_thread_=Module[\"_emscripten_async_queue_on_thread_\"]=function(){return(_emscripten_async_queue_on_thread_=Module[\"_emscripten_async_queue_on_thread_\"]=Module[\"asm\"][\"tb\"]).apply(null,arguments)};var _emscripten_tls_init=Module[\"_emscripten_tls_init\"]=function(){return(_emscripten_tls_init=Module[\"_emscripten_tls_init\"]=Module[\"asm\"][\"ub\"]).apply(null,arguments)};var stackSave=Module[\"stackSave\"]=function(){return(stackSave=Module[\"stackSave\"]=Module[\"asm\"][\"vb\"]).apply(null,arguments)};var stackAlloc=Module[\"stackAlloc\"]=function(){return(stackAlloc=Module[\"stackAlloc\"]=Module[\"asm\"][\"wb\"]).apply(null,arguments)};var stackRestore=Module[\"stackRestore\"]=function(){return(stackRestore=Module[\"stackRestore\"]=Module[\"asm\"][\"xb\"]).apply(null,arguments)};var dynCall_vi=Module[\"dynCall_vi\"]=function(){return(dynCall_vi=Module[\"dynCall_vi\"]=Module[\"asm\"][\"yb\"]).apply(null,arguments)};var dynCall_v=Module[\"dynCall_v\"]=function(){return(dynCall_v=Module[\"dynCall_v\"]=Module[\"asm\"][\"zb\"]).apply(null,arguments)};var dynCall_ii=Module[\"dynCall_ii\"]=function(){return(dynCall_ii=Module[\"dynCall_ii\"]=Module[\"asm\"][\"Ab\"]).apply(null,arguments)};Module[\"asm\"]=asm;Module[\"cwrap\"]=cwrap;Module[\"PThread\"]=PThread;Module[\"PThread\"]=PThread;Module[\"_pthread_self\"]=_pthread_self;Module[\"wasmMemory\"]=wasmMemory;Module[\"ExitStatus\"]=ExitStatus;var calledRun;Module[\"then\"]=function(func){if(calledRun){func(Module)}else{var old=Module[\"onRuntimeInitialized\"];Module[\"onRuntimeInitialized\"]=function(){if(old)old();func(Module)}}return Module};function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}Module[\"run\"]=run;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}if(!ENVIRONMENT_IS_PTHREAD)noExitRuntime=true;if(!ENVIRONMENT_IS_PTHREAD)run();\n\n\n return WasmBackendModuleThreadedSimd\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n module.exports = WasmBackendModuleThreadedSimd;\n else if (typeof define === 'function' && define['amd'])\n define([], function() { return WasmBackendModuleThreadedSimd; });\n else if (typeof exports === 'object')\n exports[\"WasmBackendModuleThreadedSimd\"] = WasmBackendModuleThreadedSimd;\n ", "\nvar WasmBackendModule = (function() {\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n return (\nfunction(WasmBackendModule) {\n WasmBackendModule = WasmBackendModule || {};\n\nvar Module=typeof WasmBackendModule!==\"undefined\"?WasmBackendModule:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram=\"./this.program\";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require(\"path\").dirname(scriptDirectory)+\"/\"}else{scriptDirectory=__dirname+\"/\"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);return nodeFS[\"readFileSync\"](filename,binary?null:\"utf8\")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process[\"argv\"].length>1){thisProgram=process[\"argv\"][1].replace(/\\\\/g,\"/\")}arguments_=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process[\"on\"](\"unhandledRejection\",abort);quit_=function(status){process[\"exit\"](status)};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){arguments_=scriptArgs}else if(typeof arguments!=\"undefined\"){arguments_=arguments}if(typeof quit===\"function\"){quit_=function(status){quit(status)}}if(typeof print!==\"undefined\"){if(typeof console===\"undefined\")console={};console.log=print;console.warn=console.error=typeof printErr!==\"undefined\"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];var noExitRuntime;if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(typeof WebAssembly!==\"object\"){err(\"no native wasm support detected\")}var wasmMemory;var wasmTable=new WebAssembly.Table({\"initial\":149,\"maximum\":149+0,\"element\":\"anyfunc\"});var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={\"string\":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},\"array\":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\")return UTF8ToString(ret);if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str=\"\";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\"}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var INITIAL_INITIAL_MEMORY=Module[\"INITIAL_MEMORY\"]||16777216;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback(Module);continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func)}else{Module[\"dynCall_vi\"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_ceil=Math.ceil;var Math_floor=Math.floor;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}what+=\"\";out(what);err(what);ABORT=true;EXITSTATUS=1;what=\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix=\"file://\";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile=\"tfjs-backend-wasm.wasm\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw\"both async and sync fetching of the wasm failed\"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch===\"function\"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\"}return response[\"arrayBuffer\"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={\"env\":asmLibraryArg,\"wasi_snapshot_preview1\":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module[\"asm\"]=exports;wasmMemory=exports[\"memory\"];updateGlobalBufferAndViews(wasmMemory.buffer);removeRunDependency(\"wasm-instantiate\")}addRunDependency(\"wasm-instantiate\");function receiveInstantiatedSource(output){receiveInstance(output[\"instance\"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming===\"function\"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch===\"function\"){fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module[\"instantiateWasm\"]){try{var exports=Module[\"instantiateWasm\"](info,receiveInstance);return exports}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);return false}}instantiateAsync();return{}}__ATINIT__.push();function _emscripten_notify_memory_growth(memoryIndex){updateGlobalBufferAndViews(wasmMemory.buffer)}var PATH={splitPath:function(filename){var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1)}else if(last===\"..\"){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)===\"/\",trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p}),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\"}if(path&&trailingSlash){path+=\"/\"}return(isAbsolute?\"/\":\"\")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\"}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path===\"/\")return\"/\";var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join(\"/\"))},join2:function(l,r){return PATH.normalize(l+\"/\"+r)}};var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _exit(status){exit(status)}function _proc_exit(code){_exit(code)}function _roundf(d){d=+d;return d>=+0?+Math_floor(d+ +.5):+Math_ceil(d-+.5)}var asmLibraryArg={\"emscripten_notify_memory_growth\":_emscripten_notify_memory_growth,\"fd_close\":_fd_close,\"fd_seek\":_fd_seek,\"fd_write\":_fd_write,\"proc_exit\":_proc_exit,\"roundf\":_roundf};var asm=createWasm();Module[\"asm\"]=asm;var _init=Module[\"_init\"]=function(){return(_init=Module[\"_init\"]=Module[\"asm\"][\"init\"]).apply(null,arguments)};var _register_tensor=Module[\"_register_tensor\"]=function(){return(_register_tensor=Module[\"_register_tensor\"]=Module[\"asm\"][\"register_tensor\"]).apply(null,arguments)};var _dispose_data=Module[\"_dispose_data\"]=function(){return(_dispose_data=Module[\"_dispose_data\"]=Module[\"asm\"][\"dispose_data\"]).apply(null,arguments)};var _dispose=Module[\"_dispose\"]=function(){return(_dispose=Module[\"_dispose\"]=Module[\"asm\"][\"dispose\"]).apply(null,arguments)};var _Abs=Module[\"_Abs\"]=function(){return(_Abs=Module[\"_Abs\"]=Module[\"asm\"][\"Abs\"]).apply(null,arguments)};var _Add=Module[\"_Add\"]=function(){return(_Add=Module[\"_Add\"]=Module[\"asm\"][\"Add\"]).apply(null,arguments)};var _AddN=Module[\"_AddN\"]=function(){return(_AddN=Module[\"_AddN\"]=Module[\"asm\"][\"AddN\"]).apply(null,arguments)};var _ArgMax=Module[\"_ArgMax\"]=function(){return(_ArgMax=Module[\"_ArgMax\"]=Module[\"asm\"][\"ArgMax\"]).apply(null,arguments)};var _AvgPool=Module[\"_AvgPool\"]=function(){return(_AvgPool=Module[\"_AvgPool\"]=Module[\"asm\"][\"AvgPool\"]).apply(null,arguments)};var _BatchMatMul=Module[\"_BatchMatMul\"]=function(){return(_BatchMatMul=Module[\"_BatchMatMul\"]=Module[\"asm\"][\"BatchMatMul\"]).apply(null,arguments)};var _ClipByValue=Module[\"_ClipByValue\"]=function(){return(_ClipByValue=Module[\"_ClipByValue\"]=Module[\"asm\"][\"ClipByValue\"]).apply(null,arguments)};var _Conv2D=Module[\"_Conv2D\"]=function(){return(_Conv2D=Module[\"_Conv2D\"]=Module[\"asm\"][\"Conv2D\"]).apply(null,arguments)};var _Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=function(){return(_Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=Module[\"asm\"][\"Conv2DBackpropInput\"]).apply(null,arguments)};var _Cos=Module[\"_Cos\"]=function(){return(_Cos=Module[\"_Cos\"]=Module[\"asm\"][\"Cos\"]).apply(null,arguments)};var _CropAndResize=Module[\"_CropAndResize\"]=function(){return(_CropAndResize=Module[\"_CropAndResize\"]=Module[\"asm\"][\"CropAndResize\"]).apply(null,arguments)};var _Cumsum=Module[\"_Cumsum\"]=function(){return(_Cumsum=Module[\"_Cumsum\"]=Module[\"asm\"][\"Cumsum\"]).apply(null,arguments)};var _DepthToSpace=Module[\"_DepthToSpace\"]=function(){return(_DepthToSpace=Module[\"_DepthToSpace\"]=Module[\"asm\"][\"DepthToSpace\"]).apply(null,arguments)};var _DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=function(){return(_DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=Module[\"asm\"][\"DepthwiseConv2dNative\"]).apply(null,arguments)};var _Equal=Module[\"_Equal\"]=function(){return(_Equal=Module[\"_Equal\"]=Module[\"asm\"][\"Equal\"]).apply(null,arguments)};var _Exp=Module[\"_Exp\"]=function(){return(_Exp=Module[\"_Exp\"]=Module[\"asm\"][\"Exp\"]).apply(null,arguments)};var _FlipLeftRight=Module[\"_FlipLeftRight\"]=function(){return(_FlipLeftRight=Module[\"_FlipLeftRight\"]=Module[\"asm\"][\"FlipLeftRight\"]).apply(null,arguments)};var _Floor=Module[\"_Floor\"]=function(){return(_Floor=Module[\"_Floor\"]=Module[\"asm\"][\"Floor\"]).apply(null,arguments)};var _FloorDiv=Module[\"_FloorDiv\"]=function(){return(_FloorDiv=Module[\"_FloorDiv\"]=Module[\"asm\"][\"FloorDiv\"]).apply(null,arguments)};var _FusedBatchNorm=Module[\"_FusedBatchNorm\"]=function(){return(_FusedBatchNorm=Module[\"_FusedBatchNorm\"]=Module[\"asm\"][\"FusedBatchNorm\"]).apply(null,arguments)};var _FusedConv2D=Module[\"_FusedConv2D\"]=function(){return(_FusedConv2D=Module[\"_FusedConv2D\"]=Module[\"asm\"][\"FusedConv2D\"]).apply(null,arguments)};var _FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=function(){return(_FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=Module[\"asm\"][\"FusedDepthwiseConv2D\"]).apply(null,arguments)};var _Gather=Module[\"_Gather\"]=function(){return(_Gather=Module[\"_Gather\"]=Module[\"asm\"][\"Gather\"]).apply(null,arguments)};var _GatherNd=Module[\"_GatherNd\"]=function(){return(_GatherNd=Module[\"_GatherNd\"]=Module[\"asm\"][\"GatherNd\"]).apply(null,arguments)};var _Greater=Module[\"_Greater\"]=function(){return(_Greater=Module[\"_Greater\"]=Module[\"asm\"][\"Greater\"]).apply(null,arguments)};var _GreaterEqual=Module[\"_GreaterEqual\"]=function(){return(_GreaterEqual=Module[\"_GreaterEqual\"]=Module[\"asm\"][\"GreaterEqual\"]).apply(null,arguments)};var _LeakyRelu=Module[\"_LeakyRelu\"]=function(){return(_LeakyRelu=Module[\"_LeakyRelu\"]=Module[\"asm\"][\"LeakyRelu\"]).apply(null,arguments)};var _Less=Module[\"_Less\"]=function(){return(_Less=Module[\"_Less\"]=Module[\"asm\"][\"Less\"]).apply(null,arguments)};var _LessEqual=Module[\"_LessEqual\"]=function(){return(_LessEqual=Module[\"_LessEqual\"]=Module[\"asm\"][\"LessEqual\"]).apply(null,arguments)};var _Log=Module[\"_Log\"]=function(){return(_Log=Module[\"_Log\"]=Module[\"asm\"][\"Log\"]).apply(null,arguments)};var _LogicalAnd=Module[\"_LogicalAnd\"]=function(){return(_LogicalAnd=Module[\"_LogicalAnd\"]=Module[\"asm\"][\"LogicalAnd\"]).apply(null,arguments)};var _Max=Module[\"_Max\"]=function(){return(_Max=Module[\"_Max\"]=Module[\"asm\"][\"Max\"]).apply(null,arguments)};var _MaxPool=Module[\"_MaxPool\"]=function(){return(_MaxPool=Module[\"_MaxPool\"]=Module[\"asm\"][\"MaxPool\"]).apply(null,arguments)};var _Maximum=Module[\"_Maximum\"]=function(){return(_Maximum=Module[\"_Maximum\"]=Module[\"asm\"][\"Maximum\"]).apply(null,arguments)};var _Mean=Module[\"_Mean\"]=function(){return(_Mean=Module[\"_Mean\"]=Module[\"asm\"][\"Mean\"]).apply(null,arguments)};var _Min=Module[\"_Min\"]=function(){return(_Min=Module[\"_Min\"]=Module[\"asm\"][\"Min\"]).apply(null,arguments)};var _Minimum=Module[\"_Minimum\"]=function(){return(_Minimum=Module[\"_Minimum\"]=Module[\"asm\"][\"Minimum\"]).apply(null,arguments)};var _Multiply=Module[\"_Multiply\"]=function(){return(_Multiply=Module[\"_Multiply\"]=Module[\"asm\"][\"Multiply\"]).apply(null,arguments)};var _Neg=Module[\"_Neg\"]=function(){return(_Neg=Module[\"_Neg\"]=Module[\"asm\"][\"Neg\"]).apply(null,arguments)};var _NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=function(){return(_NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=Module[\"asm\"][\"NonMaxSuppressionV3\"]).apply(null,arguments)};var _NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=function(){return(_NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=Module[\"asm\"][\"NonMaxSuppressionV4\"]).apply(null,arguments)};var _NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=function(){return(_NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=Module[\"asm\"][\"NonMaxSuppressionV5\"]).apply(null,arguments)};var _NotEqual=Module[\"_NotEqual\"]=function(){return(_NotEqual=Module[\"_NotEqual\"]=Module[\"asm\"][\"NotEqual\"]).apply(null,arguments)};var _OneHot=Module[\"_OneHot\"]=function(){return(_OneHot=Module[\"_OneHot\"]=Module[\"asm\"][\"OneHot\"]).apply(null,arguments)};var _PadV2=Module[\"_PadV2\"]=function(){return(_PadV2=Module[\"_PadV2\"]=Module[\"asm\"][\"PadV2\"]).apply(null,arguments)};var _Pow=Module[\"_Pow\"]=function(){return(_Pow=Module[\"_Pow\"]=Module[\"asm\"][\"Pow\"]).apply(null,arguments)};var _Prelu=Module[\"_Prelu\"]=function(){return(_Prelu=Module[\"_Prelu\"]=Module[\"asm\"][\"Prelu\"]).apply(null,arguments)};var _Prod=Module[\"_Prod\"]=function(){return(_Prod=Module[\"_Prod\"]=Module[\"asm\"][\"Prod\"]).apply(null,arguments)};var _RealDiv=Module[\"_RealDiv\"]=function(){return(_RealDiv=Module[\"_RealDiv\"]=Module[\"asm\"][\"RealDiv\"]).apply(null,arguments)};var _Relu=Module[\"_Relu\"]=function(){return(_Relu=Module[\"_Relu\"]=Module[\"asm\"][\"Relu\"]).apply(null,arguments)};var _Relu6=Module[\"_Relu6\"]=function(){return(_Relu6=Module[\"_Relu6\"]=Module[\"asm\"][\"Relu6\"]).apply(null,arguments)};var _ResizeBilinear=Module[\"_ResizeBilinear\"]=function(){return(_ResizeBilinear=Module[\"_ResizeBilinear\"]=Module[\"asm\"][\"ResizeBilinear\"]).apply(null,arguments)};var _Reverse=Module[\"_Reverse\"]=function(){return(_Reverse=Module[\"_Reverse\"]=Module[\"asm\"][\"Reverse\"]).apply(null,arguments)};var _RotateWithOffset=Module[\"_RotateWithOffset\"]=function(){return(_RotateWithOffset=Module[\"_RotateWithOffset\"]=Module[\"asm\"][\"RotateWithOffset\"]).apply(null,arguments)};var _Rsqrt=Module[\"_Rsqrt\"]=function(){return(_Rsqrt=Module[\"_Rsqrt\"]=Module[\"asm\"][\"Rsqrt\"]).apply(null,arguments)};var _ScatterNd=Module[\"_ScatterNd\"]=function(){return(_ScatterNd=Module[\"_ScatterNd\"]=Module[\"asm\"][\"ScatterNd\"]).apply(null,arguments)};var _SelectV2=Module[\"_SelectV2\"]=function(){return(_SelectV2=Module[\"_SelectV2\"]=Module[\"asm\"][\"SelectV2\"]).apply(null,arguments)};var _Sigmoid=Module[\"_Sigmoid\"]=function(){return(_Sigmoid=Module[\"_Sigmoid\"]=Module[\"asm\"][\"Sigmoid\"]).apply(null,arguments)};var _Sin=Module[\"_Sin\"]=function(){return(_Sin=Module[\"_Sin\"]=Module[\"asm\"][\"Sin\"]).apply(null,arguments)};var _Softmax=Module[\"_Softmax\"]=function(){return(_Softmax=Module[\"_Softmax\"]=Module[\"asm\"][\"Softmax\"]).apply(null,arguments)};var _Sqrt=Module[\"_Sqrt\"]=function(){return(_Sqrt=Module[\"_Sqrt\"]=Module[\"asm\"][\"Sqrt\"]).apply(null,arguments)};var _Square=Module[\"_Square\"]=function(){return(_Square=Module[\"_Square\"]=Module[\"asm\"][\"Square\"]).apply(null,arguments)};var _SquaredDifference=Module[\"_SquaredDifference\"]=function(){return(_SquaredDifference=Module[\"_SquaredDifference\"]=Module[\"asm\"][\"SquaredDifference\"]).apply(null,arguments)};var _StridedSlice=Module[\"_StridedSlice\"]=function(){return(_StridedSlice=Module[\"_StridedSlice\"]=Module[\"asm\"][\"StridedSlice\"]).apply(null,arguments)};var _Sub=Module[\"_Sub\"]=function(){return(_Sub=Module[\"_Sub\"]=Module[\"asm\"][\"Sub\"]).apply(null,arguments)};var _Sum=Module[\"_Sum\"]=function(){return(_Sum=Module[\"_Sum\"]=Module[\"asm\"][\"Sum\"]).apply(null,arguments)};var _Tanh=Module[\"_Tanh\"]=function(){return(_Tanh=Module[\"_Tanh\"]=Module[\"asm\"][\"Tanh\"]).apply(null,arguments)};var _Tile=Module[\"_Tile\"]=function(){return(_Tile=Module[\"_Tile\"]=Module[\"asm\"][\"Tile\"]).apply(null,arguments)};var _TopK=Module[\"_TopK\"]=function(){return(_TopK=Module[\"_TopK\"]=Module[\"asm\"][\"TopK\"]).apply(null,arguments)};var _Transpose=Module[\"_Transpose\"]=function(){return(_Transpose=Module[\"_Transpose\"]=Module[\"asm\"][\"Transpose\"]).apply(null,arguments)};var __FusedMatMul=Module[\"__FusedMatMul\"]=function(){return(__FusedMatMul=Module[\"__FusedMatMul\"]=Module[\"asm\"][\"_FusedMatMul\"]).apply(null,arguments)};var _malloc=Module[\"_malloc\"]=function(){return(_malloc=Module[\"_malloc\"]=Module[\"asm\"][\"malloc\"]).apply(null,arguments)};var _free=Module[\"_free\"]=function(){return(_free=Module[\"_free\"]=Module[\"asm\"][\"free\"]).apply(null,arguments)};var __start=Module[\"__start\"]=function(){return(__start=Module[\"__start\"]=Module[\"asm\"][\"_start\"]).apply(null,arguments)};var stackSave=Module[\"stackSave\"]=function(){return(stackSave=Module[\"stackSave\"]=Module[\"asm\"][\"stackSave\"]).apply(null,arguments)};var stackAlloc=Module[\"stackAlloc\"]=function(){return(stackAlloc=Module[\"stackAlloc\"]=Module[\"asm\"][\"stackAlloc\"]).apply(null,arguments)};var stackRestore=Module[\"stackRestore\"]=function(){return(stackRestore=Module[\"stackRestore\"]=Module[\"asm\"][\"stackRestore\"]).apply(null,arguments)};Module[\"asm\"]=asm;Module[\"cwrap\"]=cwrap;var calledRun;Module[\"then\"]=function(func){if(calledRun){func(Module)}else{var old=Module[\"onRuntimeInitialized\"];Module[\"onRuntimeInitialized\"]=function(){if(old)old();func(Module)}}return Module};function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module[\"__start\"];try{entryFunction();var ret=0;exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e==\"unwind\"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e===\"object\"&&e.stack){toLog=[e,e.stack]}err(\"exception thrown: \"+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();if(shouldRunNow)callMain(args);postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}Module[\"run\"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module[\"onExit\"])Module[\"onExit\"](status)}quit_(status,new ExitStatus(status))}if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}var shouldRunNow=true;if(Module[\"noInitialRun\"])shouldRunNow=false;noExitRuntime=true;run();\n\n\n return WasmBackendModule\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n module.exports = WasmBackendModule;\n else if (typeof define === 'function' && define['amd'])\n define([], function() { return WasmBackendModule; });\n else if (typeof exports === 'object')\n exports[\"WasmBackendModule\"] = WasmBackendModule;\n ", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "export const wasmWorkerContents = 'var threadInfoStruct=0;var selfThreadId=0;var parentThreadId=0;var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(\" \");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(\" \");postMessage({cmd:\"alert\",text:text,threadId:selfThreadId})}var err=threadPrintErr;this.alert=threadAlert;Module[\"instantiateWasm\"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module[\"wasmModule\"],info);Module[\"wasmModule\"]=null;receiveInstance(instance);return instance.exports};this.onmessage=function(e){try{if(e.data.cmd===\"load\"){Module[\"DYNAMIC_BASE\"]=e.data.DYNAMIC_BASE;Module[\"DYNAMICTOP_PTR\"]=e.data.DYNAMICTOP_PTR;Module[\"wasmModule\"]=e.data.wasmModule;Module[\"wasmMemory\"]=e.data.wasmMemory;Module[\"buffer\"]=Module[\"wasmMemory\"].buffer;Module[\"ENVIRONMENT_IS_PTHREAD\"]=true;if(typeof e.data.urlOrBlob===\"string\"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}Module=WasmBackendModuleThreadedSimd(Module);postMessage({\"cmd\":\"loaded\"})}else if(e.data.cmd===\"objectTransfer\"){Module[\"PThread\"].receiveObjectTransfer(e.data)}else if(e.data.cmd===\"run\"){Module[\"__performance_now_clock_drift\"]=performance.now()-e.data.time;threadInfoStruct=e.data.threadInfoStruct;Module[\"__register_pthread_ptr\"](threadInfoStruct,0,0);selfThreadId=e.data.selfThreadId;parentThreadId=e.data.parentThreadId;var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module[\"establishStackSpace\"](top,max);Module[\"_emscripten_tls_init\"]();Module[\"PThread\"].receiveObjectTransfer(e.data);Module[\"PThread\"].setThreadStatus(Module[\"_pthread_self\"](),1);try{var result=Module[\"dynCall_ii\"](e.data.start_routine,e.data.arg);if(!Module[\"getNoExitRuntime\"]())Module[\"PThread\"].threadExit(result)}catch(ex){if(ex===\"Canceled!\"){Module[\"PThread\"].threadCancel()}else if(ex!=\"unwind\"){Atomics.store(Module[\"HEAPU32\"],threadInfoStruct+4>>2,ex instanceof Module[\"ExitStatus\"]?ex.status:-2);Atomics.store(Module[\"HEAPU32\"],threadInfoStruct+0>>2,1);Module[\"_emscripten_futex_wake\"](threadInfoStruct+0,2147483647);if(!(ex instanceof Module[\"ExitStatus\"]))throw ex}}}else if(e.data.cmd===\"cancel\"){if(threadInfoStruct){Module[\"PThread\"].threadCancel()}}else if(e.data.target===\"setimmediate\"){}else if(e.data.cmd===\"processThreadQueue\"){if(threadInfoStruct){Module[\"_emscripten_current_thread_process_queued_calls\"]()}}else{err(\"worker.js received unknown command \"+e.data.cmd);err(e.data)}}catch(ex){err(\"worker.js onmessage() captured an uncaught exception: \"+ex);if(ex.stack)err(ex.stack);throw ex}};if(typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\"){self={location:{href:__filename}};var onmessage=this.onmessage;var nodeWorkerThreads=require(\"worker_threads\");Worker=nodeWorkerThreads.Worker;var parentPort=nodeWorkerThreads.parentPort;parentPort.on(\"message\",function(data){onmessage({data:data})});var nodeFS=require(\"fs\");var nodeRead=function(filename){return nodeFS.readFileSync(filename,\"utf8\")};function globalEval(x){global.require=require;global.Module=Module;eval.call(null,x)}importScripts=function(f){globalEval(nodeRead(f))};postMessage=function(msg){parentPort.postMessage(msg)};if(typeof performance===\"undefined\"){performance={now:function(){return Date.now()}}}}';", null, null, null, "export * from './drawContour';\nexport * from './drawDetections';\nexport * from './drawFaceExpressions';\nexport * from './DrawBox';\nexport * from './DrawFaceLandmarks';\nexport * from './DrawTextField';\n", "import { Point } from '../classes/index';\n\nexport function drawContour(\n ctx: CanvasRenderingContext2D,\n points: Point[],\n isClosed: boolean = false,\n) {\n ctx.beginPath();\n\n points.slice(1).forEach(({ x, y }, prevIdx) => {\n const from = points[prevIdx];\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(x, y);\n });\n\n if (isClosed) {\n const from = points[points.length - 1];\n const to = points[0];\n if (!from || !to) {\n return;\n }\n\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n }\n\n ctx.stroke();\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Point } from '../classes/index';\nimport { Dimensions, IDimensions } from '../classes/Dimensions';\n\nexport function isTensor(tensor: any, dim: number) {\n return tensor instanceof tf.Tensor && tensor.shape.length === dim;\n}\n\nexport function isTensor1D(tensor: any): tensor is tf.Tensor1D {\n return isTensor(tensor, 1);\n}\n\nexport function isTensor2D(tensor: any): tensor is tf.Tensor2D {\n return isTensor(tensor, 2);\n}\n\nexport function isTensor3D(tensor: any): tensor is tf.Tensor3D {\n return isTensor(tensor, 3);\n}\n\nexport function isTensor4D(tensor: any): tensor is tf.Tensor4D {\n return isTensor(tensor, 4);\n}\n\nexport function isFloat(num: number) {\n return num % 1 !== 0;\n}\n\nexport function isEven(num: number) {\n return num % 2 === 0;\n}\n\nexport function round(num: number, prec: number = 2) {\n const f = 10 ** prec;\n return Math.floor(num * f) / f;\n}\n\nexport function isDimensions(obj: any): boolean {\n return obj && obj.width && obj.height;\n}\n\nexport function computeReshapedDimensions({ width, height }: IDimensions, inputSize: number) {\n const scale = inputSize / Math.max(height, width);\n return new Dimensions(Math.round(width * scale), Math.round(height * scale));\n}\n\nexport function getCenterPoint(pts: Point[]): Point {\n return pts.reduce((sum, pt) => sum.add(pt), new Point(0, 0))\n .div(new Point(pts.length, pts.length));\n}\n\nexport function range(num: number, start: number, step: number): number[] {\n return Array(num).fill(0).map((_, i) => start + (i * step));\n}\n\nexport function isValidNumber(num: any) {\n // eslint-disable-next-line no-mixed-operators\n return !!num && (num !== Infinity) && (num !== -Infinity) && !Number.isNaN(num) || num === 0;\n}\n\nexport function isValidProbablitiy(num: any) {\n return isValidNumber(num) && num >= 0 && num <= 1.0;\n}\n", "import { isValidNumber } from '../utils/index';\n\nexport interface IDimensions {\n width: number\n height: number\n}\n\nexport class Dimensions implements IDimensions {\n private _width: number\n\n private _height: number\n\n constructor(width: number, height: number) {\n if (!isValidNumber(width) || !isValidNumber(height)) {\n throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({ width, height })}`);\n }\n\n this._width = width;\n this._height = height;\n }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public reverse(): Dimensions {\n return new Dimensions(1 / this.width, 1 / this.height);\n }\n}\n", "export interface IPoint {\n x: number\n y: number\n}\n\nexport class Point implements IPoint {\n private _x: number\n\n private _y: number\n\n constructor(x: number, y: number) {\n this._x = x;\n this._y = y;\n }\n\n get x(): number { return this._x; }\n\n get y(): number { return this._y; }\n\n public add(pt: IPoint): Point {\n return new Point(this.x + pt.x, this.y + pt.y);\n }\n\n public sub(pt: IPoint): Point {\n return new Point(this.x - pt.x, this.y - pt.y);\n }\n\n public mul(pt: IPoint): Point {\n return new Point(this.x * pt.x, this.y * pt.y);\n }\n\n public div(pt: IPoint): Point {\n return new Point(this.x / pt.x, this.y / pt.y);\n }\n\n public abs(): Point {\n return new Point(Math.abs(this.x), Math.abs(this.y));\n }\n\n public magnitude(): number {\n return Math.sqrt((this.x ** 2) + (this.y ** 2));\n }\n\n public floor(): Point {\n return new Point(Math.floor(this.x), Math.floor(this.y));\n }\n}\n", "import { isDimensions, isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { IDimensions } from './Dimensions';\nimport { Point } from './Point';\nimport { IRect } from './Rect';\n\nexport class Box implements IBoundingBox, IRect {\n public static isRect(rect: any): boolean {\n return !!rect && [rect.x, rect.y, rect.width, rect.height].every(isValidNumber);\n }\n\n public static assertIsValidBox(box: any, callee: string, allowNegativeDimensions: boolean = false) {\n if (!Box.isRect(box)) {\n throw new Error(`${callee} - invalid box: ${JSON.stringify(box)}, expected object with properties x, y, width, height`);\n }\n\n if (!allowNegativeDimensions && (box.width < 0 || box.height < 0)) {\n throw new Error(`${callee} - width (${box.width}) and height (${box.height}) must be positive numbers`);\n }\n }\n\n private _x: number\n\n private _y: number\n\n private _width: number\n\n private _height: number\n\n constructor(_box: IBoundingBox | IRect, allowNegativeDimensions: boolean = true) {\n const box = (_box || {}) as any;\n\n const isBbox = [box.left, box.top, box.right, box.bottom].every(isValidNumber);\n const isRect = [box.x, box.y, box.width, box.height].every(isValidNumber);\n\n if (!isRect && !isBbox) {\n throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(box)}`);\n }\n\n const [x, y, width, height] = isRect\n ? [box.x, box.y, box.width, box.height]\n : [box.left, box.top, box.right - box.left, box.bottom - box.top];\n\n Box.assertIsValidBox({\n x, y, width, height,\n }, 'Box.constructor', allowNegativeDimensions);\n\n this._x = x;\n this._y = y;\n this._width = width;\n this._height = height;\n }\n\n public get x(): number { return this._x; }\n\n public get y(): number { return this._y; }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public get left(): number { return this.x; }\n\n public get top(): number { return this.y; }\n\n public get right(): number { return this.x + this.width; }\n\n public get bottom(): number { return this.y + this.height; }\n\n public get area(): number { return this.width * this.height; }\n\n public get topLeft(): Point { return new Point(this.left, this.top); }\n\n public get topRight(): Point { return new Point(this.right, this.top); }\n\n public get bottomLeft(): Point { return new Point(this.left, this.bottom); }\n\n public get bottomRight(): Point { return new Point(this.right, this.bottom); }\n\n public round(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.round(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public floor(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.floor(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public toSquare(): Box {\n let {\n x, y, width, height,\n } = this;\n const diff = Math.abs(width - height);\n if (width < height) {\n x -= (diff / 2);\n width += diff;\n }\n if (height < width) {\n y -= (diff / 2);\n height += diff;\n }\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public rescale(s: IDimensions | number): Box {\n const scaleX = isDimensions(s) ? (s as IDimensions).width : s as number;\n const scaleY = isDimensions(s) ? (s as IDimensions).height : s as number;\n return new Box({\n x: this.x * scaleX,\n y: this.y * scaleY,\n width: this.width * scaleX,\n height: this.height * scaleY,\n });\n }\n\n public pad(padX: number, padY: number): Box {\n const [x, y, width, height] = [\n this.x - (padX / 2),\n this.y - (padY / 2),\n this.width + padX,\n this.height + padY,\n ];\n return new Box({\n x, y, width, height,\n });\n }\n\n public clipAtImageBorders(imgWidth: number, imgHeight: number): Box {\n const {\n x, y, right, bottom,\n } = this;\n const clippedX = Math.max(x, 0);\n const clippedY = Math.max(y, 0);\n\n const newWidth = right - clippedX;\n const newHeight = bottom - clippedY;\n const clippedWidth = Math.min(newWidth, imgWidth - clippedX);\n const clippedHeight = Math.min(newHeight, imgHeight - clippedY);\n\n return (new Box({\n x: clippedX, y: clippedY, width: clippedWidth, height: clippedHeight,\n })).floor();\n }\n\n public shift(sx: number, sy: number): Box {\n const { width, height } = this;\n const x = this.x + sx;\n const y = this.y + sy;\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public padAtBorders(imageHeight: number, imageWidth: number) {\n const w = this.width + 1;\n const h = this.height + 1;\n\n const dx = 1;\n const dy = 1;\n let edx = w;\n let edy = h;\n\n let x = this.left;\n let y = this.top;\n let ex = this.right;\n let ey = this.bottom;\n\n if (ex > imageWidth) {\n edx = -ex + imageWidth + w;\n ex = imageWidth;\n }\n if (ey > imageHeight) {\n edy = -ey + imageHeight + h;\n ey = imageHeight;\n }\n if (x < 1) {\n edy = 2 - x;\n x = 1;\n }\n if (y < 1) {\n edy = 2 - y;\n y = 1;\n }\n\n return {\n dy, edy, dx, edx, y, ey, x, ex, w, h,\n };\n }\n\n public calibrate(region: Box) {\n return new Box({\n left: this.left + (region.left * this.width),\n top: this.top + (region.top * this.height),\n right: this.right + (region.right * this.width),\n bottom: this.bottom + (region.bottom * this.height),\n }).toSquare().round();\n }\n}\n", "import { Box } from './Box';\n\nexport interface IBoundingBox {\n left: number\n top: number\n right: number\n bottom: number\n}\n\nexport class BoundingBox extends Box implements IBoundingBox {\n constructor(left: number, top: number, right: number, bottom: number, allowNegativeDimensions: boolean = false) {\n super({\n left, top, right, bottom,\n }, allowNegativeDimensions);\n }\n}\n", "import { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { IRect, Rect } from './Rect';\n\nexport class ObjectDetection {\n private _score: number\n\n private _classScore: number\n\n private _className: string\n\n private _box: Rect\n\n private _imageDims: Dimensions\n\n constructor(\n score: number,\n classScore: number,\n className: string,\n relativeBox: IRect,\n imageDims: IDimensions,\n ) {\n this._imageDims = new Dimensions(imageDims.width, imageDims.height);\n this._score = score;\n this._classScore = classScore;\n this._className = className;\n this._box = new Box(relativeBox).rescale(this._imageDims);\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n\n public get className(): string { return this._className; }\n\n public get box(): Box { return this._box; }\n\n public get imageDims(): Dimensions { return this._imageDims; }\n\n public get imageWidth(): number { return this.imageDims.width; }\n\n public get imageHeight(): number { return this.imageDims.height; }\n\n public get relativeBox(): Box { return new Box(this._box).rescale(this.imageDims.reverse()); }\n\n public forSize(width: number, height: number): ObjectDetection {\n return new ObjectDetection(\n this.score,\n this.classScore,\n this.className,\n this.relativeBox,\n { width, height },\n );\n }\n}\n", "import { Box } from './Box';\nimport { IDimensions } from './Dimensions';\nimport { ObjectDetection } from './ObjectDetection';\nimport { Rect } from './Rect';\n\nexport interface IFaceDetecion {\n score: number\n box: Box\n}\n\nexport class FaceDetection extends ObjectDetection implements IFaceDetecion {\n constructor(\n score: number,\n relativeBox: Rect,\n imageDims: IDimensions,\n ) {\n super(score, score, '', relativeBox, imageDims);\n }\n\n public forSize(width: number, height: number): FaceDetection {\n const { score, relativeBox, imageDims } = super.forSize(width, height);\n return new FaceDetection(score, relativeBox, imageDims);\n }\n}\n", "import { Box } from '../classes/Box';\n\nexport function iou(box1: Box, box2: Box, isIOU: boolean = true) {\n const width = Math.max(0.0, Math.min(box1.right, box2.right) - Math.max(box1.left, box2.left));\n const height = Math.max(0.0, Math.min(box1.bottom, box2.bottom) - Math.max(box1.top, box2.top));\n const interSection = width * height;\n\n return isIOU\n ? interSection / (box1.area + box2.area - interSection)\n : interSection / Math.min(box1.area, box2.area);\n}\n", "import { BoundingBox, IPoint } from '../classes/index';\n\nexport function minBbox(pts: IPoint[]): BoundingBox {\n const xs = pts.map((pt) => pt.x);\n const ys = pts.map((pt) => pt.y);\n const minX = xs.reduce((min, x) => (x < min ? x : min), Infinity);\n const minY = ys.reduce((min, y) => (y < min ? y : min), Infinity);\n const maxX = xs.reduce((max, x) => (max < x ? x : max), 0);\n const maxY = ys.reduce((max, y) => (max < y ? y : max), 0);\n\n return new BoundingBox(minX, minY, maxX, maxY);\n}\n", "import { Box } from '../classes/Box';\nimport { iou } from './iou';\n\nexport function nonMaxSuppression(\n boxes: Box[],\n scores: number[],\n iouThreshold: number,\n isIOU: boolean = true,\n): number[] {\n let indicesSortedByScore = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .sort((c1, c2) => c1.score - c2.score)\n .map((c) => c.boxIndex);\n\n const pick: number[] = [];\n\n while (indicesSortedByScore.length > 0) {\n const curr = indicesSortedByScore.pop() as number;\n pick.push(curr);\n\n const indices = indicesSortedByScore;\n\n const outputs: number[] = [];\n for (let i = 0; i < indices.length; i++) {\n const idx = indices[i];\n\n const currBox = boxes[curr];\n const idxBox = boxes[idx];\n\n outputs.push(iou(currBox, idxBox, isIOU));\n }\n\n indicesSortedByScore = indicesSortedByScore.filter(\n (_, j) => outputs[j] <= iouThreshold,\n );\n }\n\n return pick;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nexport function normalize(x: tf.Tensor4D, meanRgb: number[]): tf.Tensor4D {\n return tf.tidy(() => {\n const [r, g, b] = meanRgb;\n const avg_r = tf.fill([...x.shape.slice(0, 3), 1], r, 'float32');\n const avg_g = tf.fill([...x.shape.slice(0, 3), 1], g, 'float32');\n const avg_b = tf.fill([...x.shape.slice(0, 3), 1], b, 'float32');\n const avg_rgb = tf.concat([avg_r, avg_g, avg_b], 3);\n\n return tf.sub(x, avg_rgb);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\n/**\n * Pads the smaller dimension of an image tensor with zeros, such that width === height.\n *\n * @param imgTensor The image tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The padded tensor with width === height.\n */\nexport function padToSquare(\n imgTensor: tf.Tensor4D,\n isCenterImage: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const [height, width] = imgTensor.shape.slice(1);\n if (height === width) {\n return imgTensor;\n }\n\n const dimDiff = Math.abs(height - width);\n const paddingAmount = Math.round(dimDiff * (isCenterImage ? 0.5 : 1));\n const paddingAxis = height > width ? 2 : 1;\n\n const createPaddingTensor = (paddingAmountLocal: number): tf.Tensor => {\n const paddingTensorShape = imgTensor.shape.slice();\n paddingTensorShape[paddingAxis] = paddingAmountLocal;\n return tf.fill(paddingTensorShape, 0, 'float32');\n };\n\n const paddingTensorAppend = createPaddingTensor(paddingAmount);\n const remainingPaddingAmount = dimDiff - (paddingTensorAppend.shape[paddingAxis] as number);\n\n const paddingTensorPrepend = isCenterImage && remainingPaddingAmount\n ? createPaddingTensor(remainingPaddingAmount)\n : null;\n\n const tensorsToStack = [\n paddingTensorPrepend,\n imgTensor,\n paddingTensorAppend,\n ]\n .filter((t) => !!t)\n // .map((t: tf.Tensor) => t.toFloat()) as tf.Tensor4D[]\n .map((t: tf.Tensor) => tf.cast(t, 'float32')) as tf.Tensor4D[];\n return tf.concat(tensorsToStack, paddingAxis);\n });\n}\n", "export function shuffleArray(inputArray: any[]) {\n const array = inputArray.slice();\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const x = array[i];\n array[i] = array[j];\n array[j] = x;\n }\n return array;\n}\n", "export * from './iou';\nexport * from './minBbox';\nexport * from './nonMaxSuppression';\nexport * from './normalize';\nexport * from './padToSquare';\nexport * from './shuffleArray';\n\nexport function sigmoid(x: number) {\n return 1 / (1 + Math.exp(-x));\n}\n\nexport function inverseSigmoid(x: number) {\n return Math.log(x / (1 - x));\n}\n", "import { Box } from './Box';\n\nexport interface IRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport class Rect extends Box implements IRect {\n constructor(x: number, y: number, width: number, height: number, allowNegativeDimensions: boolean = false) {\n super({\n x, y, width, height,\n }, allowNegativeDimensions);\n }\n}\n", "import { minBbox } from '../ops/index';\nimport { getCenterPoint } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { FaceDetection } from './FaceDetection';\nimport { Point } from './Point';\nimport { IRect, Rect } from './Rect';\n\n// face alignment constants\nconst relX = 0.5;\nconst relY = 0.43;\nconst relScale = 0.45;\n\nexport interface IFaceLandmarks {\n positions: Point[]\n shift: Point\n}\n\nexport class FaceLandmarks implements IFaceLandmarks {\n protected _shift: Point\n\n protected _positions: Point[]\n\n protected _imgDims: Dimensions\n\n constructor(\n relativeFaceLandmarkPositions: Point[],\n imgDims: IDimensions,\n shift: Point = new Point(0, 0),\n ) {\n const { width, height } = imgDims;\n this._imgDims = new Dimensions(width, height);\n this._shift = shift;\n this._positions = relativeFaceLandmarkPositions.map(\n (pt) => pt.mul(new Point(width, height)).add(shift),\n );\n }\n\n public get shift(): Point { return new Point(this._shift.x, this._shift.y); }\n\n public get imageWidth(): number { return this._imgDims.width; }\n\n public get imageHeight(): number { return this._imgDims.height; }\n\n public get positions(): Point[] { return this._positions; }\n\n public get relativePositions(): Point[] {\n return this._positions.map(\n (pt) => pt.sub(this._shift).div(new Point(this.imageWidth, this.imageHeight)),\n );\n }\n\n public forSize(width: number, height: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n { width, height },\n );\n }\n\n public shiftBy(x: number, y: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n this._imgDims,\n new Point(x, y),\n );\n }\n\n public shiftByPoint(pt: Point): T {\n return this.shiftBy(pt.x, pt.y);\n }\n\n /**\n * Aligns the face landmarks after face detection from the relative positions of the faces\n * bounding box, or it's current shift. This function should be used to align the face images\n * after face detection has been performed, before they are passed to the face recognition net.\n * This will make the computed face descriptor more accurate.\n *\n * @param detection (optional) The bounding box of the face or the face detection result. If\n * no argument was passed the position of the face landmarks are assumed to be relative to\n * it's current shift.\n * @returns The bounding box of the aligned face.\n */\n public align(\n detection?: FaceDetection | IRect | IBoundingBox | null,\n options: { useDlibAlignment?: boolean, minBoxPadding?: number } = { },\n ): Box {\n if (detection) {\n const box = detection instanceof FaceDetection\n ? detection.box.floor()\n : new Box(detection);\n\n return this.shiftBy(box.x, box.y).align(null, options);\n }\n\n const { useDlibAlignment, minBoxPadding } = { useDlibAlignment: false, minBoxPadding: 0.2, ...options };\n\n if (useDlibAlignment) {\n return this.alignDlib();\n }\n\n return this.alignMinBbox(minBoxPadding);\n }\n\n private alignDlib(): Box {\n const centers = this.getRefPointsForAlignment();\n\n const [leftEyeCenter, rightEyeCenter, mouthCenter] = centers;\n const distToMouth = (pt: Point) => mouthCenter.sub(pt).magnitude();\n const eyeToMouthDist = (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2;\n\n const size = Math.floor(eyeToMouthDist / relScale);\n\n const refPoint = getCenterPoint(centers);\n // TODO: pad in case rectangle is out of image bounds\n const x = Math.floor(Math.max(0, refPoint.x - (relX * size)));\n const y = Math.floor(Math.max(0, refPoint.y - (relY * size)));\n\n return new Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y));\n }\n\n private alignMinBbox(padding: number): Box {\n const box = minBbox(this.positions);\n return box.pad(box.width * padding, box.height * padding);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n throw new Error('getRefPointsForAlignment not implemented by base class');\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks5 extends FaceLandmarks {\n protected getRefPointsForAlignment(): Point[] {\n const pts = this.positions;\n return [\n pts[0],\n pts[1],\n getCenterPoint([pts[3], pts[4]]),\n ];\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks68 extends FaceLandmarks {\n public getJawOutline(): Point[] {\n return this.positions.slice(0, 17);\n }\n\n public getLeftEyeBrow(): Point[] {\n return this.positions.slice(17, 22);\n }\n\n public getRightEyeBrow(): Point[] {\n return this.positions.slice(22, 27);\n }\n\n public getNose(): Point[] {\n return this.positions.slice(27, 36);\n }\n\n public getLeftEye(): Point[] {\n return this.positions.slice(36, 42);\n }\n\n public getRightEye(): Point[] {\n return this.positions.slice(42, 48);\n }\n\n public getMouth(): Point[] {\n return this.positions.slice(48, 68);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n return [\n this.getLeftEye(),\n this.getRightEye(),\n this.getMouth(),\n ].map(getCenterPoint);\n }\n}\n", "import { round } from '../utils/index';\n\nexport interface IFaceMatch {\n label: string\n distance: number\n}\n\nexport class FaceMatch implements IFaceMatch {\n private _label: string\n\n private _distance: number\n\n constructor(label: string, distance: number) {\n this._label = label;\n this._distance = distance;\n }\n\n public get label(): string { return this._label; }\n\n public get distance(): number { return this._distance; }\n\n public toString(withDistance: boolean = true): string {\n return `${this.label}${withDistance ? ` (${round(this.distance)})` : ''}`;\n }\n}\n", "import { isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { IRect } from './Rect';\n\nexport class LabeledBox extends Box {\n public static assertIsValidLabeledBox(box: any, callee: string) {\n Box.assertIsValidBox(box, callee);\n\n if (!isValidNumber(box.label)) {\n throw new Error(`${callee} - expected property label (${box.label}) to be a number`);\n }\n }\n\n private _label: number\n\n constructor(box: IBoundingBox | IRect | any, label: number) {\n super(box);\n this._label = label;\n }\n\n public get label(): number { return this._label; }\n}\n", "export class LabeledFaceDescriptors {\n private _label: string\n\n private _descriptors: Float32Array[]\n\n constructor(label: string, descriptors: Float32Array[]) {\n if (!(typeof label === 'string')) {\n throw new Error('LabeledFaceDescriptors - constructor expected label to be a string');\n }\n\n if (!Array.isArray(descriptors) || descriptors.some((desc) => !(desc instanceof Float32Array))) {\n throw new Error('LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array');\n }\n\n this._label = label;\n this._descriptors = descriptors;\n }\n\n public get label(): string { return this._label; }\n\n public get descriptors(): Float32Array[] { return this._descriptors; }\n\n public toJSON(): any {\n return {\n label: this.label,\n descriptors: this.descriptors.map((d) => Array.from(d)),\n };\n }\n\n public static fromJSON(json: any): LabeledFaceDescriptors {\n const descriptors = json.descriptors.map((d: any) => new Float32Array(d));\n return new LabeledFaceDescriptors(json.label, descriptors);\n }\n}\n", "import { isValidProbablitiy } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { LabeledBox } from './LabeledBox';\nimport { IRect } from './Rect';\n\nexport class PredictedBox extends LabeledBox {\n public static assertIsValidPredictedBox(box: any, callee: string) {\n LabeledBox.assertIsValidLabeledBox(box, callee);\n\n if (\n !isValidProbablitiy(box.score)\n || !isValidProbablitiy(box.classScore)\n ) {\n throw new Error(`${callee} - expected properties score (${box.score}) and (${box.classScore}) to be a number between [0, 1]`);\n }\n }\n\n private _score: number\n\n private _classScore: number\n\n constructor(box: IBoundingBox | IRect | any, label: number, score: number, classScore: number) {\n super(box, label);\n this._score = score;\n this._classScore = classScore;\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\n\nexport type WithFaceDetection = TSource & {\n detection: FaceDetection\n}\n\nexport function isWithFaceDetection(obj: any): obj is WithFaceDetection<{}> {\n return obj.detection instanceof FaceDetection;\n}\n\nexport function extendWithFaceDetection<\n TSource\n>(\n sourceObj: TSource,\n detection: FaceDetection,\n): WithFaceDetection {\n const extension = { detection };\n return { ...sourceObj, ...extension };\n}\n", "import { Environment } from './types';\n\nexport function createBrowserEnv(): Environment {\n const fetch = window.fetch;\n if (!fetch) throw new Error('fetch - missing fetch implementation for browser environment');\n\n const readFile = () => {\n throw new Error('readFile - filesystem not available for browser environment');\n };\n\n return {\n Canvas: HTMLCanvasElement,\n CanvasRenderingContext2D,\n Image: HTMLImageElement,\n ImageData,\n Video: HTMLVideoElement,\n createCanvasElement: () => document.createElement('canvas'),\n createImageElement: () => document.createElement('img'),\n fetch,\n readFile,\n };\n}\n", "import { FileSystem } from './types';\n\nexport function createFileSystem(fs?: any): FileSystem {\n let requireFsError = '';\n\n if (!fs) {\n try {\n // eslint-disable-next-line global-require\n fs = require('fs');\n } catch (err) {\n requireFsError = err.toString();\n }\n }\n\n const readFile = fs\n ? (filePath: string) => new Promise((resolve, reject) => {\n fs.readFile(filePath, (err: any, buffer: Buffer) => (err ? reject(err) : resolve(buffer)));\n })\n : () => {\n throw new Error(`readFile - failed to require fs in nodejs environment with error: ${requireFsError}`);\n };\n\n return {\n readFile,\n };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { createFileSystem } from './createFileSystem';\nimport { Environment } from './types';\n\nexport function createNodejsEnv(): Environment {\n // eslint-disable-next-line dot-notation\n const Canvas = global['Canvas'] || global.HTMLCanvasElement;\n const Image = global.Image || global.HTMLImageElement;\n\n const createCanvasElement = () => {\n if (Canvas) return new Canvas();\n throw new Error('createCanvasElement - missing Canvas implementation for nodejs environment');\n };\n\n const createImageElement = () => {\n if (Image) return new Image();\n throw new Error('createImageElement - missing Image implementation for nodejs environment');\n };\n\n const fetch = global.fetch;\n // if (!fetch) throw new Error('fetch - missing fetch implementation for nodejs environment');\n\n const fileSystem = createFileSystem();\n\n return {\n Canvas: Canvas || class {},\n CanvasRenderingContext2D: global.CanvasRenderingContext2D || class {},\n Image: Image || class {},\n ImageData: global.ImageData || class {},\n Video: global.HTMLVideoElement || class {},\n createCanvasElement,\n createImageElement,\n fetch,\n ...fileSystem,\n };\n}\n", "export function isBrowser(): boolean {\n return typeof window === 'object'\n && typeof document !== 'undefined'\n && typeof HTMLImageElement !== 'undefined'\n && typeof HTMLCanvasElement !== 'undefined'\n && typeof HTMLVideoElement !== 'undefined'\n && typeof ImageData !== 'undefined'\n && typeof CanvasRenderingContext2D !== 'undefined';\n}\n", "import { createBrowserEnv } from './createBrowserEnv';\nimport { createFileSystem } from './createFileSystem';\nimport { createNodejsEnv } from './createNodejsEnv';\nimport { isBrowser } from './isBrowser';\nimport { isNodejs } from './isNodejs';\nimport { Environment } from './types';\n\nlet environment: Environment | null;\n\nfunction getEnv(): Environment {\n if (!environment) {\n throw new Error('getEnv - environment is not defined, check isNodejs() and isBrowser()');\n }\n return environment;\n}\n\nfunction setEnv(env: Environment) {\n environment = env;\n}\n\nfunction initialize() {\n // check for isBrowser() first to prevent electron renderer process\n // to be initialized with wrong environment due to isNodejs() returning true\n if (isBrowser()) return setEnv(createBrowserEnv());\n if (isNodejs()) return setEnv(createNodejsEnv());\n return null;\n}\n\nfunction monkeyPatch(env: Partial) {\n if (!environment) {\n initialize();\n }\n\n if (!environment) {\n throw new Error('monkeyPatch - environment is not defined, check isNodejs() and isBrowser()');\n }\n\n const { Canvas = environment.Canvas, Image = environment.Image } = env;\n environment.Canvas = Canvas;\n environment.Image = Image;\n environment.createCanvasElement = env.createCanvasElement || (() => new Canvas());\n environment.createImageElement = env.createImageElement || (() => new Image());\n\n environment.ImageData = env.ImageData || environment.ImageData;\n environment.Video = env.Video || environment.Video;\n environment.fetch = env.fetch || environment.fetch;\n environment.readFile = env.readFile || environment.readFile;\n}\n\nexport const env = {\n getEnv,\n setEnv,\n initialize,\n createBrowserEnv,\n createFileSystem,\n createNodejsEnv,\n monkeyPatch,\n isBrowser,\n isNodejs,\n};\n\ninitialize();\n\nexport * from './types';\n", "import { env } from '../env/index';\n\nexport function resolveInput(arg: string | any) {\n if (!env.isNodejs() && typeof arg === 'string') {\n return document.getElementById(arg);\n }\n return arg;\n}\n", "import { env } from '../env/index';\nimport { resolveInput } from './resolveInput';\n\nexport function getContext2dOrThrow(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D): CanvasRenderingContext2D {\n const { Canvas, CanvasRenderingContext2D } = env.getEnv();\n\n if (canvasArg instanceof CanvasRenderingContext2D) {\n return canvasArg;\n }\n\n const canvas = resolveInput(canvasArg);\n\n if (!(canvas instanceof Canvas)) {\n throw new Error('resolveContext2d - expected canvas to be of instance of Canvas');\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('resolveContext2d - canvas 2d context is null');\n }\n\n return ctx;\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IDimensions, IPoint } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { resolveInput } from '../dom/resolveInput';\n\n// eslint-disable-next-line no-shadow\nexport enum AnchorPosition {\n // eslint-disable-next-line no-unused-vars\n TOP_LEFT = 'TOP_LEFT',\n // eslint-disable-next-line no-unused-vars\n TOP_RIGHT = 'TOP_RIGHT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_LEFT = 'BOTTOM_LEFT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_RIGHT = 'BOTTOM_RIGHT'\n}\n\nexport interface IDrawTextFieldOptions {\n anchorPosition?: AnchorPosition\n backgroundColor?: string\n fontColor?: string\n fontSize?: number\n fontStyle?: string\n padding?: number\n}\n\nexport class DrawTextFieldOptions implements IDrawTextFieldOptions {\n public anchorPosition: AnchorPosition\n\n public backgroundColor: string\n\n public fontColor: string\n\n public fontSize: number\n\n public fontStyle: string\n\n public padding: number\n\n constructor(options: IDrawTextFieldOptions = {}) {\n const {\n anchorPosition, backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = options;\n this.anchorPosition = anchorPosition || AnchorPosition.TOP_LEFT;\n this.backgroundColor = backgroundColor || 'rgba(0, 0, 0, 0.5)';\n this.fontColor = fontColor || 'rgba(255, 255, 255, 1)';\n this.fontSize = fontSize || 14;\n this.fontStyle = fontStyle || 'Georgia';\n this.padding = padding || 4;\n }\n}\n\nexport class DrawTextField {\n public text: string[]\n\n public anchor : IPoint\n\n public options: DrawTextFieldOptions\n\n constructor(\n text: string | string[] | DrawTextField,\n anchor: IPoint,\n options: IDrawTextFieldOptions = {},\n ) {\n // eslint-disable-next-line no-nested-ternary\n this.text = typeof text === 'string'\n ? [text]\n : (text instanceof DrawTextField ? text.text : text);\n this.anchor = anchor;\n this.options = new DrawTextFieldOptions(options);\n }\n\n measureWidth(ctx: CanvasRenderingContext2D): number {\n const { padding } = this.options;\n return this.text.map((l) => ctx.measureText(l).width).reduce((w0, w1) => (w0 < w1 ? w1 : w0), 0) + (2 * padding);\n }\n\n measureHeight(): number {\n const { fontSize, padding } = this.options;\n return this.text.length * fontSize + (2 * padding);\n }\n\n getUpperLeft(ctx: CanvasRenderingContext2D, canvasDims?: IDimensions): IPoint {\n const { anchorPosition } = this.options;\n const isShiftLeft = anchorPosition === AnchorPosition.BOTTOM_RIGHT || anchorPosition === AnchorPosition.TOP_RIGHT;\n const isShiftTop = anchorPosition === AnchorPosition.BOTTOM_LEFT || anchorPosition === AnchorPosition.BOTTOM_RIGHT;\n\n const textFieldWidth = this.measureWidth(ctx);\n const textFieldHeight = this.measureHeight();\n const x = (isShiftLeft ? this.anchor.x - textFieldWidth : this.anchor.x);\n const y = isShiftTop ? this.anchor.y - textFieldHeight : this.anchor.y;\n\n // adjust anchor if text box exceeds canvas borders\n if (canvasDims) {\n const { width, height } = canvasDims;\n const newX = Math.max(Math.min(x, width - textFieldWidth), 0);\n const newY = Math.max(Math.min(y, height - textFieldHeight), 0);\n return { x: newX, y: newY };\n }\n return { x, y };\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const canvas = resolveInput(canvasArg);\n const ctx = getContext2dOrThrow(canvas);\n\n const {\n backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = this.options;\n\n ctx.font = `${fontSize}px ${fontStyle}`;\n const maxTextWidth = this.measureWidth(ctx);\n const textHeight = this.measureHeight();\n\n ctx.fillStyle = backgroundColor;\n const upperLeft = this.getUpperLeft(ctx, canvas);\n ctx.fillRect(upperLeft.x, upperLeft.y, maxTextWidth, textHeight);\n\n ctx.fillStyle = fontColor;\n this.text.forEach((textLine, i) => {\n const x = padding + upperLeft.x;\n const y = padding + upperLeft.y + ((i + 1) * fontSize);\n ctx.fillText(textLine, x, y);\n });\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { Box, IBoundingBox, IRect } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport {\n AnchorPosition, DrawTextField, DrawTextFieldOptions, IDrawTextFieldOptions,\n} from './DrawTextField';\n\nexport interface IDrawBoxOptions {\n boxColor?: string\n lineWidth?: number\n drawLabelOptions?: IDrawTextFieldOptions\n label?: string\n}\n\nexport class DrawBoxOptions {\n public boxColor: string\n\n public lineWidth: number\n\n public drawLabelOptions: DrawTextFieldOptions\n\n public label?: string\n\n constructor(options: IDrawBoxOptions = {}) {\n const {\n boxColor, lineWidth, label, drawLabelOptions,\n } = options;\n this.boxColor = boxColor || 'rgba(0, 0, 255, 1)';\n this.lineWidth = lineWidth || 2;\n this.label = label;\n\n const defaultDrawLabelOptions = {\n anchorPosition: AnchorPosition.BOTTOM_LEFT,\n backgroundColor: this.boxColor,\n };\n this.drawLabelOptions = new DrawTextFieldOptions({ ...defaultDrawLabelOptions, ...drawLabelOptions });\n }\n}\n\nexport class DrawBox {\n public box: Box\n\n public options: DrawBoxOptions\n\n constructor(\n box: IBoundingBox | IRect,\n options: IDrawBoxOptions = {},\n ) {\n this.box = new Box(box);\n this.options = new DrawBoxOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const { boxColor, lineWidth } = this.options;\n\n const {\n x, y, width, height,\n } = this.box;\n ctx.strokeStyle = boxColor;\n ctx.lineWidth = lineWidth;\n ctx.strokeRect(x, y, width, height);\n\n const { label } = this.options;\n if (label) {\n new DrawTextField([label], { x: x - (lineWidth / 2), y }, this.options.drawLabelOptions).draw(canvasArg);\n }\n }\n}\n", "import { Box, IBoundingBox, IRect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { round } from '../utils/index';\nimport { DrawBox } from './DrawBox';\n\nexport type TDrawDetectionsInput = IRect | IBoundingBox | FaceDetection | WithFaceDetection<{}>\n\nexport function drawDetections(\n canvasArg: string | HTMLCanvasElement,\n detections: TDrawDetectionsInput | Array,\n) {\n const detectionsArray = Array.isArray(detections) ? detections : [detections];\n\n detectionsArray.forEach((det) => {\n // eslint-disable-next-line no-nested-ternary\n const score = det instanceof FaceDetection\n ? det.score\n : (isWithFaceDetection(det) ? det.detection.score : undefined);\n\n // eslint-disable-next-line no-nested-ternary\n const box = det instanceof FaceDetection\n ? det.box\n : (isWithFaceDetection(det) ? det.detection.box : new Box(det));\n\n const label = score ? `${round(score)}` : undefined;\n new DrawBox(box, { label }).draw(canvasArg);\n });\n}\n", "import { env } from '../env/index';\n\nexport function isMediaLoaded(media: HTMLImageElement | HTMLVideoElement) : boolean {\n const { Image, Video } = env.getEnv();\n\n return (media instanceof Image && media.complete)\n || (media instanceof Video && media.readyState >= 3);\n}\n", "import { env } from '../env/index';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function awaitMediaLoaded(media: HTMLImageElement | HTMLVideoElement | HTMLCanvasElement) {\n // eslint-disable-next-line consistent-return\n return new Promise((resolve, reject) => {\n if (media instanceof env.getEnv().Canvas || isMediaLoaded(media)) {\n return resolve(null);\n }\n\n function onError(e: Event) {\n if (!e.currentTarget) return;\n // eslint-disable-next-line no-use-before-define\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n reject(e);\n }\n\n function onLoad(e: Event) {\n if (!e.currentTarget) return;\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n resolve(e);\n }\n\n media.addEventListener('load', onLoad);\n media.addEventListener('error', onError);\n });\n}\n", "import { env } from '../env/index';\n\nexport function bufferToImage(buf: Blob): Promise {\n return new Promise((resolve, reject) => {\n if (!(buf instanceof Blob)) reject(new Error('bufferToImage - expected buf to be of type: Blob'));\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result !== 'string') reject(new Error('bufferToImage - expected reader.result to be a string, in onload'));\n const img = env.getEnv().createImageElement();\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = reader.result as string;\n };\n reader.onerror = reject;\n reader.readAsDataURL(buf);\n });\n}\n", "import { Dimensions, IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\n\nexport function getMediaDimensions(input: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | IDimensions): Dimensions {\n const { Image, Video } = env.getEnv();\n\n if (input instanceof Image) {\n return new Dimensions(input.naturalWidth, input.naturalHeight);\n }\n if (input instanceof Video) {\n return new Dimensions(input.videoWidth, input.videoHeight);\n }\n return new Dimensions(input.width, input.height);\n}\n", "import { IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function createCanvas({ width, height }: IDimensions): HTMLCanvasElement {\n const { createCanvasElement } = env.getEnv();\n const canvas = createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n\nexport function createCanvasFromMedia(media: HTMLImageElement | HTMLVideoElement | ImageData, dims?: IDimensions): HTMLCanvasElement {\n const { ImageData } = env.getEnv();\n\n if (!(media instanceof ImageData) && !isMediaLoaded(media)) {\n throw new Error('createCanvasFromMedia - media has not finished loading yet');\n }\n\n const { width, height } = dims || getMediaDimensions(media);\n const canvas = createCanvas({ width, height });\n\n if (media instanceof ImageData) {\n getContext2dOrThrow(canvas).putImageData(media, 0, 0);\n } else {\n getContext2dOrThrow(canvas).drawImage(media, 0, 0, width, height);\n }\n return canvas;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { env } from '../env/index';\nimport { isTensor4D } from '../utils/index';\n\nexport async function imageTensorToCanvas(\n imgTensor: tf.Tensor,\n canvas?: HTMLCanvasElement,\n): Promise {\n const targetCanvas = canvas || env.getEnv().createCanvasElement();\n\n const [height, width, numChannels] = imgTensor.shape.slice(isTensor4D(imgTensor) ? 1 : 0);\n const imgTensor3D = tf.tidy(() => imgTensor.as3D(height, width, numChannels).toInt());\n await tf.browser.toPixels(imgTensor3D, targetCanvas);\n\n imgTensor3D.dispose();\n\n return targetCanvas;\n}\n", "import { env } from '../env/index';\n\nexport function isMediaElement(input: any) {\n const { Image, Canvas, Video } = env.getEnv();\n\n return input instanceof Image\n || input instanceof Canvas\n || input instanceof Video;\n}\n", "import { env } from '../env/index';\nimport { createCanvas, createCanvasFromMedia } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function imageToSquare(input: HTMLImageElement | HTMLCanvasElement, inputSize: number, centerImage: boolean = false) {\n const { Image, Canvas } = env.getEnv();\n\n if (!(input instanceof Image || input instanceof Canvas)) {\n throw new Error('imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement');\n }\n\n const dims = getMediaDimensions(input);\n const scale = inputSize / Math.max(dims.height, dims.width);\n const width = scale * dims.width;\n const height = scale * dims.height;\n\n const targetCanvas = createCanvas({ width: inputSize, height: inputSize });\n const inputCanvas = input instanceof Canvas ? input : createCanvasFromMedia(input);\n\n const offset = Math.abs(width - height) / 2;\n const dx = centerImage && width < height ? offset : 0;\n const dy = centerImage && height < width ? offset : 0;\n getContext2dOrThrow(targetCanvas).drawImage(inputCanvas, dx, dy, width, height);\n\n return targetCanvas;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Dimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { padToSquare } from '../ops/padToSquare';\nimport {\n computeReshapedDimensions, isTensor3D, isTensor4D, range,\n} from '../utils/index';\nimport { createCanvasFromMedia } from './createCanvas';\nimport { imageToSquare } from './imageToSquare';\nimport { TResolvedNetInput } from './types';\n\nexport class NetInput {\n private _imageTensors: Array = []\n\n private _canvases: HTMLCanvasElement[] = []\n\n private _batchSize: number\n\n private _treatAsBatchInput: boolean = false\n\n private _inputDimensions: number[][] = []\n\n private _inputSize: number\n\n constructor(\n inputs: Array,\n treatAsBatchInput: boolean = false,\n ) {\n if (!Array.isArray(inputs)) {\n throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${inputs}`);\n }\n\n this._treatAsBatchInput = treatAsBatchInput;\n this._batchSize = inputs.length;\n\n inputs.forEach((input, idx) => {\n if (isTensor3D(input)) {\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = input.shape;\n return;\n }\n\n if (isTensor4D(input)) {\n const batchSize = (input as any).shape[0];\n if (batchSize !== 1) {\n throw new Error(`NetInput - tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = (input as any).shape.slice(1);\n return;\n }\n\n const canvas = (input as any) instanceof env.getEnv().Canvas ? input : createCanvasFromMedia(input);\n this._canvases[idx] = canvas;\n this._inputDimensions[idx] = [canvas.height, canvas.width, 3];\n });\n }\n\n public get imageTensors(): Array {\n return this._imageTensors;\n }\n\n public get canvases(): HTMLCanvasElement[] {\n return this._canvases;\n }\n\n public get isBatchInput(): boolean {\n return this.batchSize > 1 || this._treatAsBatchInput;\n }\n\n public get batchSize(): number {\n return this._batchSize;\n }\n\n public get inputDimensions(): number[][] {\n return this._inputDimensions;\n }\n\n public get inputSize(): number | undefined {\n return this._inputSize;\n }\n\n public get reshapedInputDimensions(): Dimensions[] {\n return range(this.batchSize, 0, 1).map(\n (_, batchIdx) => this.getReshapedInputDimensions(batchIdx),\n );\n }\n\n public getInput(batchIdx: number): tf.Tensor3D | tf.Tensor4D | HTMLCanvasElement {\n return this.canvases[batchIdx] || this.imageTensors[batchIdx];\n }\n\n public getInputDimensions(batchIdx: number): number[] {\n return this._inputDimensions[batchIdx];\n }\n\n public getInputHeight(batchIdx: number): number {\n return this._inputDimensions[batchIdx][0];\n }\n\n public getInputWidth(batchIdx: number): number {\n return this._inputDimensions[batchIdx][1];\n }\n\n public getReshapedInputDimensions(batchIdx: number): Dimensions {\n if (typeof this.inputSize !== 'number') {\n throw new Error('getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet');\n }\n\n const width = this.getInputWidth(batchIdx);\n const height = this.getInputHeight(batchIdx);\n return computeReshapedDimensions({ width, height }, this.inputSize);\n }\n\n /**\n * Create a batch tensor from all input canvases and tensors\n * with size [batchSize, inputSize, inputSize, 3].\n *\n * @param inputSize Height and width of the tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The batch tensor.\n */\n public toBatchTensor(inputSize: number, isCenterInputs: boolean = true): tf.Tensor4D {\n this._inputSize = inputSize;\n\n return tf.tidy(() => {\n const inputTensors = range(this.batchSize, 0, 1).map((batchIdx) => {\n const input = this.getInput(batchIdx);\n\n if (input instanceof tf.Tensor) {\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n let imgTensor = isTensor4D(input) ? input : input.expandDims();\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n imgTensor = padToSquare(imgTensor, isCenterInputs);\n\n if (imgTensor.shape[1] !== inputSize || imgTensor.shape[2] !== inputSize) {\n imgTensor = tf.image.resizeBilinear(imgTensor, [inputSize, inputSize]);\n }\n\n return imgTensor.as3D(inputSize, inputSize, 3);\n }\n\n if (input instanceof env.getEnv().Canvas) {\n return tf.browser.fromPixels(imageToSquare(input, inputSize, isCenterInputs));\n }\n\n throw new Error(`toBatchTensor - at batchIdx ${batchIdx}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${input}`);\n });\n\n // const batchTensor = tf.stack(inputTensors.map(t => t.toFloat())).as4D(this.batchSize, inputSize, inputSize, 3)\n const batchTensor = tf.stack(inputTensors.map((t) => tf.cast(t, 'float32'))).as4D(this.batchSize, inputSize, inputSize, 3);\n // const batchTensor = tf.stack(inputTensors.map(t => tf.Tensor.as4D(tf.cast(t, 'float32'))), this.batchSize, inputSize, inputSize, 3);\n\n return batchTensor;\n });\n }\n}\n", "import { isTensor3D, isTensor4D } from '../utils/index';\nimport { awaitMediaLoaded } from './awaitMediaLoaded';\nimport { isMediaElement } from './isMediaElement';\nimport { NetInput } from './NetInput';\nimport { resolveInput } from './resolveInput';\nimport { TNetInput } from './types';\n\n/**\n * Validates the input to make sure, they are valid net inputs and awaits all media elements\n * to be finished loading.\n *\n * @param input The input, which can be a media element or an array of different media elements.\n * @returns A NetInput instance, which can be passed into one of the neural networks.\n */\nexport async function toNetInput(inputs: TNetInput): Promise {\n if (inputs instanceof NetInput) {\n return inputs;\n }\n\n const inputArgArray = Array.isArray(inputs)\n ? inputs\n : [inputs];\n\n if (!inputArgArray.length) {\n throw new Error('toNetInput - empty array passed as input');\n }\n\n const getIdxHint = (idx: number) => (Array.isArray(inputs) ? ` at input index ${idx}:` : '');\n\n const inputArray = inputArgArray.map(resolveInput);\n\n inputArray.forEach((input, i) => {\n if (!isMediaElement(input) && !isTensor3D(input) && !isTensor4D(input)) {\n if (typeof inputArgArray[i] === 'string') {\n throw new Error(`toNetInput -${getIdxHint(i)} string passed, but could not resolve HTMLElement for element id ${inputArgArray[i]}`);\n }\n\n throw new Error(`toNetInput -${getIdxHint(i)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);\n }\n\n if (isTensor4D(input)) {\n // if tf.Tensor4D is passed in the input array, the batch size has to be 1\n const batchSize = input.shape[0];\n if (batchSize !== 1) {\n throw new Error(`toNetInput -${getIdxHint(i)} tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n }\n });\n\n // wait for all media elements being loaded\n await Promise.all(\n inputArray.map((input) => isMediaElement(input) && awaitMediaLoaded(input)),\n );\n\n return new NetInput(inputArray, Array.isArray(inputs));\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { Rect } from '../classes/Rect';\nimport { env } from '../env/index';\nimport { createCanvas } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { imageTensorToCanvas } from './imageTensorToCanvas';\nimport { toNetInput } from './toNetInput';\nimport { TNetInput } from './types';\n\n/**\n * Extracts the image regions containing the detected faces.\n *\n * @param input The image that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns The Canvases of the corresponding image region for each detected face.\n */\nexport async function extractFaces(\n input: TNetInput,\n detections: Array,\n): Promise {\n const { Canvas } = env.getEnv();\n\n let canvas = input as HTMLCanvasElement;\n\n if (!(input instanceof Canvas)) {\n const netInput = await toNetInput(input);\n\n if (netInput.batchSize > 1) {\n throw new Error('extractFaces - batchSize > 1 not supported');\n }\n\n const tensorOrCanvas = netInput.getInput(0);\n canvas = tensorOrCanvas instanceof Canvas\n ? tensorOrCanvas\n : await imageTensorToCanvas(tensorOrCanvas);\n }\n\n const ctx = getContext2dOrThrow(canvas);\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(canvas.width, canvas.height).box.floor()\n : det),\n )\n .map((box) => box.clipAtImageBorders(canvas.width, canvas.height));\n\n return boxes.map(({\n x, y, width, height,\n }) => {\n const faceImg = createCanvas({ width, height });\n getContext2dOrThrow(faceImg)\n .putImageData(ctx.getImageData(x, y, width, height), 0, 0);\n return faceImg;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isTensor3D, isTensor4D } from '../utils/index';\n\n/**\n * Extracts the tensors of the image regions containing the detected faces.\n * Useful if you want to compute the face descriptors for the face images.\n * Using this method is faster then extracting a canvas for each face and\n * converting them to tensors individually.\n *\n * @param imageTensor The image tensor that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns Tensors of the corresponding image region for each detected face.\n */\nexport async function extractFaceTensors(\n imageTensor: tf.Tensor3D | tf.Tensor4D,\n detections: Array,\n): Promise {\n if (!isTensor3D(imageTensor) && !isTensor4D(imageTensor)) {\n throw new Error('extractFaceTensors - expected image tensor to be 3D or 4D');\n }\n\n if (isTensor4D(imageTensor) && imageTensor.shape[0] > 1) {\n throw new Error('extractFaceTensors - batchSize > 1 not supported');\n }\n\n return tf.tidy(() => {\n const [imgHeight, imgWidth, numChannels] = imageTensor.shape.slice(isTensor4D(imageTensor) ? 1 : 0);\n\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(imgWidth, imgHeight).box\n : det),\n )\n .map((box) => box.clipAtImageBorders(imgWidth, imgHeight));\n\n const faceTensors = boxes.map(({\n x, y, width, height,\n }) => tf.slice3d(imageTensor.as3D(imgHeight, imgWidth, numChannels), [y, x, 0], [height, width, numChannels]));\n\n return faceTensors;\n });\n}\n", "import { env } from '../env/index';\n\nexport async function fetchOrThrow(\n url: string,\n // eslint-disable-next-line no-undef\n init?: RequestInit,\n): Promise {\n const { fetch } = env.getEnv();\n const res = await fetch(url, init);\n if (!(res.status < 400)) {\n throw new Error(`failed to fetch: (${res.status}) ${res.statusText}, from url: ${res.url}`);\n }\n return res;\n}\n", "import { bufferToImage } from './bufferToImage';\nimport { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchImage(uri: string): Promise {\n const res = await fetchOrThrow(uri);\n const blob = await (res).blob();\n\n if (!blob.type.startsWith('image/')) {\n throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${blob.type}, for url: ${res.url}`);\n }\n return bufferToImage(blob);\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchJson(uri: string): Promise {\n return (await fetchOrThrow(uri)).json();\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchNetWeights(uri: string): Promise {\n return new Float32Array(await (await fetchOrThrow(uri)).arrayBuffer());\n}\n", "export function getModelUris(uri: string | undefined, defaultModelName: string) {\n const defaultManifestFilename = `${defaultModelName}-weights_manifest.json`;\n\n if (!uri) {\n return {\n modelBaseUri: '',\n manifestUri: defaultManifestFilename,\n };\n }\n\n if (uri === '/') {\n return {\n modelBaseUri: '/',\n manifestUri: `/${defaultManifestFilename}`,\n };\n }\n // eslint-disable-next-line no-nested-ternary\n const protocol = uri.startsWith('http://') ? 'http://' : uri.startsWith('https://') ? 'https://' : '';\n uri = uri.replace(protocol, '');\n\n const parts = uri.split('/').filter((s) => s);\n\n const manifestFile = uri.endsWith('.json')\n ? parts[parts.length - 1]\n : defaultManifestFilename;\n\n let modelBaseUri = protocol + (uri.endsWith('.json') ? parts.slice(0, parts.length - 1) : parts).join('/');\n modelBaseUri = uri.startsWith('/') ? `/${modelBaseUri}` : modelBaseUri;\n\n return {\n modelBaseUri,\n manifestUri: modelBaseUri === '/' ? `/${manifestFile}` : `${modelBaseUri}/${manifestFile}`,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { getModelUris } from '../common/getModelUris';\nimport { fetchJson } from './fetchJson';\n\nexport async function loadWeightMap(\n uri: string | undefined,\n defaultModelName: string,\n): Promise {\n const { manifestUri, modelBaseUri } = getModelUris(uri, defaultModelName);\n const manifest = await fetchJson(manifestUri);\n // if (manifest['weightsManifest']) manifest = manifest['weightsManifest'];\n return tf.io.loadWeights(manifest, modelBaseUri);\n}\n", "import { IDimensions } from '../classes/index';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function matchDimensions(input: IDimensions, reference: IDimensions, useMediaDimensions: boolean = false) {\n const { width, height } = useMediaDimensions\n ? getMediaDimensions(reference)\n : reference;\n input.width = width;\n input.height = height;\n return { width, height };\n}\n", "import * as tf from '../dist/tfjs.esm.js';\n\nimport { ParamMapping } from './common/index';\nimport { getModelUris } from './common/getModelUris';\nimport { loadWeightMap } from './dom/index';\nimport { env } from './env/index';\n\nexport abstract class NeuralNetwork {\n\n protected _params: TNetParams | undefined = undefined\n protected _paramMappings: ParamMapping[] = []\n\n constructor(protected _name: string) {\n }\n\n public get params(): TNetParams | undefined { return this._params }\n public get paramMappings(): ParamMapping[] { return this._paramMappings }\n public get isLoaded(): boolean { return !!this.params }\n\n public getParamFromPath(paramPath: string): tf.Tensor {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n return obj[objProp]\n }\n\n public reassignParamFromPath(paramPath: string, tensor: tf.Tensor) {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n obj[objProp].dispose()\n obj[objProp] = tensor\n }\n\n public getParamList() {\n return this._paramMappings.map(({ paramPath }) => ({\n path: paramPath,\n tensor: this.getParamFromPath(paramPath)\n }))\n }\n\n public getTrainableParams() {\n return this.getParamList().filter(param => param.tensor instanceof tf.Variable)\n }\n\n public getFrozenParams() {\n return this.getParamList().filter(param => !(param.tensor instanceof tf.Variable))\n }\n\n public variable() {\n this.getFrozenParams().forEach(({ path, tensor }) => {\n this.reassignParamFromPath(path, tensor.variable())\n })\n }\n\n public freeze() {\n this.getTrainableParams().forEach(({ path, tensor: variable }) => {\n const tensor = tf.tensor(variable.dataSync())\n variable.dispose()\n this.reassignParamFromPath(path, tensor)\n })\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.getParamList().forEach(param => {\n if (throwOnRedispose && param.tensor.isDisposed) {\n throw new Error(`param tensor has already been disposed for path ${param.path}`)\n }\n param.tensor.dispose()\n })\n this._params = undefined\n }\n\n public serializeParams(): Float32Array {\n return new Float32Array(\n this.getParamList()\n .map(({ tensor }) => Array.from(tensor.dataSync()) as number[])\n .reduce((flat, arr) => flat.concat(arr))\n )\n }\n\n public async load(weightsOrUrl: Float32Array | string | undefined): Promise {\n if (weightsOrUrl instanceof Float32Array) {\n this.extractWeights(weightsOrUrl)\n return\n }\n\n await this.loadFromUri(weightsOrUrl)\n }\n\n public async loadFromUri(uri: string | undefined) {\n if (uri && typeof uri !== 'string') {\n throw new Error(`${this._name}.loadFromUri - expected model uri`)\n }\n\n const weightMap = await loadWeightMap(uri, this.getDefaultModelName())\n this.loadFromWeightMap(weightMap)\n }\n\n public async loadFromDisk(filePath: string | undefined) {\n if (filePath && typeof filePath !== 'string') {\n throw new Error(`${this._name}.loadFromDisk - expected model file path`)\n }\n\n const { readFile } = env.getEnv()\n\n const { manifestUri, modelBaseUri } = getModelUris(filePath, this.getDefaultModelName())\n\n const fetchWeightsFromDisk = (filePaths: string[]) => Promise.all(\n filePaths.map(filePath => readFile(filePath).then(buf => buf.buffer))\n )\n const loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk)\n const manifest = JSON.parse((await readFile(manifestUri)).toString())\n const weightMap = await loadWeights(manifest, modelBaseUri)\n\n this.loadFromWeightMap(weightMap)\n }\n\n public loadFromWeightMap(weightMap: tf.NamedTensorMap) {\n const {\n paramMappings,\n params\n } = this.extractParamsFromWeigthMap(weightMap)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n public extractWeights(weights: Float32Array) {\n const {\n paramMappings,\n params\n } = this.extractParams(weights)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n private traversePropertyPath(paramPath: string) {\n if (!this.params) {\n throw new Error(`traversePropertyPath - model has no loaded params`)\n }\n\n const result = paramPath.split('/').reduce((res: { nextObj: any, obj?: any, objProp?: string }, objProp) => {\n if (!res.nextObj.hasOwnProperty(objProp)) {\n throw new Error(`traversePropertyPath - object does not have property ${objProp}, for path ${paramPath}`)\n }\n\n return { obj: res.nextObj, objProp, nextObj: res.nextObj[objProp] }\n }, { nextObj: this.params })\n\n const { obj, objProp } = result\n if (!obj || !objProp || !(obj[objProp] instanceof tf.Tensor)) {\n throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${paramPath}`)\n }\n\n return { obj, objProp }\n }\n\n protected abstract getDefaultModelName(): string\n protected abstract extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TNetParams, paramMappings: ParamMapping[] }\n protected abstract extractParams(weights: Float32Array): { params: TNetParams, paramMappings: ParamMapping[] }\n}", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { SeparableConvParams } from './types';\n\nexport function depthwiseSeparableConv(\n x: tf.Tensor4D,\n params: SeparableConvParams,\n stride: [number, number],\n): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same');\n out = tf.add(out, params.bias);\n return out;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams, SeparableConvParams } from '../common/index';\nimport { depthwiseSeparableConv } from '../common/depthwiseSeparableConv';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function denseBlock3(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock3Params,\n isFirstLayer: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, [2, 2], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, [2, 2]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n });\n}\n\nexport function denseBlock4(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock4Params,\n isFirstLayer: boolean = false,\n isScaleDown: boolean = true,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, isScaleDown ? [2, 2] : [1, 1], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, isScaleDown ? [2, 2] : [1, 1]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n const in4 = tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n const out4 = depthwiseSeparableConv(in4, denseBlockParams.conv3, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, tf.add(out3, out4)))) as tf.Tensor4D;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams } from './types';\n\nexport function convLayer(\n x: tf.Tensor4D,\n params: ConvParams,\n padding: 'valid' | 'same' = 'same',\n withRelu: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out = tf.add(\n tf.conv2d(x, params.filters, [1, 1], padding),\n params.bias,\n ) as tf.Tensor4D;\n\n return withRelu ? tf.relu(out) : out;\n });\n}\n", "import { ParamMapping } from './types';\n\nexport function disposeUnusedWeightTensors(weightMap: any, paramMappings: ParamMapping[]) {\n Object.keys(weightMap).forEach((path) => {\n if (!paramMappings.some((pm) => pm.originalPath === path)) {\n weightMap[path].dispose();\n }\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams, ExtractWeightsFunction, ParamMapping } from './types';\n\nexport function extractConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams => {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ExtractWeightsFunction, FCParams, ParamMapping } from './types';\n\nexport function extractFCParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): FCParams => {\n const fc_weights = tf.tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]);\n const fc_bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return {\n weights: fc_weights,\n bias: fc_bias,\n };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\n// eslint-disable-next-line no-unused-vars\nexport type ExtractWeightsFunction = (numWeights: number) => Float32Array\n\nexport type ParamMapping = {\n originalPath?: string\n paramPath: string\n}\n\nexport type ConvParams = {\n filters: tf.Tensor4D\n bias: tf.Tensor1D\n}\n\nexport type FCParams = {\n weights: tf.Tensor2D\n bias: tf.Tensor1D\n}\n\nexport class SeparableConvParams {\n // eslint-disable-next-line no-useless-constructor\n constructor(\n // eslint-disable-next-line no-unused-vars\n public depthwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public pointwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public bias: tf.Tensor1D,\n // eslint-disable-next-line no-empty-function\n ) {}\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ExtractWeightsFunction, ParamMapping, SeparableConvParams } from './types';\n\nexport function extractSeparableConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (channelsIn: number, channelsOut: number, mappedPrefix: string): SeparableConvParams => {\n const depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]);\n const pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]);\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/depthwise_filter` },\n { paramPath: `${mappedPrefix}/pointwise_filter` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n\nexport function loadSeparableConvParamsFactory(\n // eslint-disable-next-line no-unused-vars\n extractWeightEntry: (originalPath: string, paramRank: number) => T,\n) {\n return (prefix: string): SeparableConvParams => {\n const depthwise_filter = extractWeightEntry(`${prefix}/depthwise_filter`, 4);\n const pointwise_filter = extractWeightEntry(`${prefix}/pointwise_filter`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n", "import { isTensor } from '../utils/index';\nimport { ParamMapping } from './types';\n\nexport function extractWeightEntryFactory(weightMap: any, paramMappings: ParamMapping[]) {\n return (originalPath: string, paramRank: number, mappedPath?: string) => {\n const tensor = weightMap[originalPath];\n\n if (!isTensor(tensor, paramRank)) {\n throw new Error(`expected weightMap[${originalPath}] to be a Tensor${paramRank}D, instead have ${tensor}`);\n }\n\n paramMappings.push(\n { originalPath, paramPath: mappedPath || originalPath },\n );\n\n return tensor;\n };\n}\n", "export function extractWeightsFactory(weights: Float32Array) {\n let remainingWeights = weights;\n\n function extractWeights(numWeights: number): Float32Array {\n const ret = remainingWeights.slice(0, numWeights);\n remainingWeights = remainingWeights.slice(numWeights);\n return ret;\n }\n\n function getRemainingWeights(): Float32Array {\n return remainingWeights;\n }\n\n return {\n extractWeights,\n getRemainingWeights,\n };\n}\n", "import {\n extractConvParamsFactory,\n extractSeparableConvParamsFactory,\n ExtractWeightsFunction,\n ParamMapping,\n} from '../common/index';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractDenseBlock3Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv0`)\n : extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/conv0`);\n const conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv1`);\n const conv2 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const { conv0, conv1, conv2 } = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer);\n const conv3 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock4Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock4Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock4Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock4Params(64, 128, 'dense2');\n const dense3 = extractDenseBlock4Params(128, 256, 'dense3');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: {\n dense0, dense1, dense2, dense3,\n },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams } from './types';\n\n// eslint-disable-next-line no-unused-vars\nexport function loadConvParamsFactory(extractWeightEntry: (originalPath: string, paramRank: number) => T) {\n return (prefix: string): ConvParams => {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return { filters, bias };\n };\n}\n", "import { extractWeightEntryFactory, loadSeparableConvParamsFactory, ParamMapping } from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractDenseBlock3Params(prefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(prefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n const conv3 = extractSeparableConvParams(`${prefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock4Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock4Params('dense0', true),\n dense1: extractDenseBlock4Params('dense1'),\n dense2: extractDenseBlock4Params('dense2'),\n dense3: extractDenseBlock4Params('dense3'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock4 } from './denseBlock';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { FaceFeatureExtractorParams, IFaceFeatureExtractor } from './types';\n\nexport class FaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('FaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock4(normalized, params.dense0, true);\n out = denseBlock4(out, params.dense1);\n out = denseBlock4(out, params.dense2);\n out = denseBlock4(out, params.dense3);\n out = tf.avgPool(out, [7, 7], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FCParams } from './types';\n\nexport function fullyConnectedLayer(\n x: tf.Tensor2D,\n params: FCParams,\n): tf.Tensor2D {\n return tf.tidy(() => tf.add(\n tf.matMul(x, params.weights),\n params.bias,\n ));\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array, channelsIn: number, channelsOut: number): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const fc = extractFCParams(channelsIn, channelsOut, 'fc');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: extractFcParams('fc'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nexport function seperateWeightMaps(weightMap: tf.NamedTensorMap) {\n const featureExtractorMap: tf.NamedTensorMap = {};\n const classifierMap: tf.NamedTensorMap = {};\n\n Object.keys(weightMap).forEach((key) => {\n const map = key.startsWith('fc') ? classifierMap : featureExtractorMap;\n map[key] = weightMap[key];\n });\n\n return { featureExtractorMap, classifierMap };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { NetInput } from '../dom/index';\nimport {\n FaceFeatureExtractorParams,\n IFaceFeatureExtractor,\n TinyFaceFeatureExtractorParams,\n} from '../faceFeatureExtractor/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { NetParams } from './types';\nimport { seperateWeightMaps } from './util';\n\nexport abstract class FaceProcessor<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends NeuralNetwork {\n protected _faceFeatureExtractor: IFaceFeatureExtractor\n\n constructor(_name: string, faceFeatureExtractor: IFaceFeatureExtractor) {\n super(_name);\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): IFaceFeatureExtractor {\n return this._faceFeatureExtractor;\n }\n\n protected abstract getDefaultModelName(): string\n\n protected abstract getClassifierChannelsIn(): number\n\n protected abstract getClassifierChannelsOut(): number\n\n public runNet(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n return fullyConnectedLayer(bottleneckFeatures.as2D(bottleneckFeatures.shape[0], -1), params.fc);\n });\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights, this.getClassifierChannelsIn(), this.getClassifierChannelsOut());\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const cIn = this.getClassifierChannelsIn();\n const cOut = this.getClassifierChannelsOut();\n const classifierWeightSize = (cOut * cIn) + cOut;\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "export const FACE_EXPRESSION_LABELS = ['neutral', 'happy', 'sad', 'angry', 'fearful', 'disgusted', 'surprised'];\n\nexport class FaceExpressions {\n public neutral: number\n\n public happy: number\n\n public sad: number\n\n public angry: number\n\n public fearful: number\n\n public disgusted: number\n\n public surprised: number\n\n constructor(probabilities: number[] | Float32Array) {\n if (probabilities.length !== 7) {\n throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${probabilities.length}`);\n }\n\n FACE_EXPRESSION_LABELS.forEach((expression, idx) => {\n this[expression] = probabilities[idx];\n });\n }\n\n asSortedArray() {\n return FACE_EXPRESSION_LABELS\n .map((expression) => ({ expression, probability: this[expression] as number }))\n .sort((e0, e1) => e1.probability - e0.probability);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { FaceExpressions } from './FaceExpressions';\n\nexport class FaceExpressionNet extends FaceProcessor {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceExpressionNet', faceFeatureExtractor);\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n return tf.tidy(() => tf.softmax(this.runNet(input)));\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictExpressions(input: TNetInput) {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n const probabilitesByBatch = await Promise.all(tf.unstack(out).map(async (t) => {\n const data = await t.data();\n t.dispose();\n return data;\n }));\n out.dispose();\n\n const predictionsByBatch = probabilitesByBatch\n .map((probabilites) => new FaceExpressions(probabilites as Float32Array));\n\n return netInput.isBatchInput\n ? predictionsByBatch\n : predictionsByBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_expression_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n\n protected getClassifierChannelsOut(): number {\n return 7;\n }\n}\n", "import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\n\nexport type WithFaceExpressions = TSource & {\n expressions: FaceExpressions\n}\n\nexport function isWithFaceExpressions(obj: any): obj is WithFaceExpressions<{}> {\n return obj.expressions instanceof FaceExpressions;\n}\n\nexport function extendWithFaceExpressions<\n TSource\n>(\n sourceObj: TSource,\n expressions: FaceExpressions,\n): WithFaceExpressions {\n const extension = { expressions };\n return { ...sourceObj, ...extension };\n}\n", "import { IPoint, Point } from '../classes/index';\nimport { FaceExpressions } from '../faceExpressionNet/index';\nimport { isWithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { round } from '../utils/index';\nimport { DrawTextField } from './DrawTextField';\n\nexport type DrawFaceExpressionsInput = FaceExpressions | WithFaceExpressions<{}>\n\nexport function drawFaceExpressions(\n canvasArg: string | HTMLCanvasElement,\n faceExpressions: DrawFaceExpressionsInput | Array,\n minConfidence = 0.1,\n textFieldAnchor?: IPoint,\n) {\n const faceExpressionsArray = Array.isArray(faceExpressions) ? faceExpressions : [faceExpressions];\n\n faceExpressionsArray.forEach((e) => {\n // eslint-disable-next-line no-nested-ternary\n const expr = e instanceof FaceExpressions\n ? e\n : (isWithFaceExpressions(e) ? e.expressions : undefined);\n if (!expr) {\n throw new Error('drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof');\n }\n\n const sorted = expr.asSortedArray();\n const resultsToDisplay = sorted.filter((exprLocal) => exprLocal.probability > minConfidence);\n\n const anchor = isWithFaceDetection(e)\n ? e.detection.box.bottomLeft\n : (textFieldAnchor || new Point(0, 0));\n\n const drawTextField = new DrawTextField(\n resultsToDisplay.map((exprLocal) => `${exprLocal.expression} (${round(exprLocal.probability)})`),\n anchor,\n );\n drawTextField.draw(canvasArg);\n });\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { isWithFaceDetection, WithFaceDetection } from './WithFaceDetection';\n\nexport type WithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 > = TSource & {\n landmarks: TFaceLandmarks\n unshiftedLandmarks: TFaceLandmarks\n alignedRect: FaceDetection\n }\n\nexport function isWithFaceLandmarks(obj: any): obj is WithFaceLandmarks, FaceLandmarks> {\n return isWithFaceDetection(obj)\n // eslint-disable-next-line dot-notation\n && obj['landmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['unshiftedLandmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['alignedRect'] instanceof FaceDetection;\n}\n\nexport function extendWithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 >(sourceObj: TSource, unshiftedLandmarks: TFaceLandmarks): WithFaceLandmarks {\n const { box: shift } = sourceObj.detection;\n const landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y);\n\n const rect = landmarks.align();\n const { imageDims } = sourceObj.detection;\n const alignedRect = new FaceDetection(sourceObj.detection.score, rect.rescale(imageDims.reverse()), imageDims);\n\n const extension = {\n landmarks,\n unshiftedLandmarks,\n alignedRect,\n };\n\n return { ...sourceObj, ...extension };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IPoint } from '../classes/index';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { drawContour } from './drawContour';\n\nexport interface IDrawFaceLandmarksOptions {\n drawLines?: boolean\n drawPoints?: boolean\n lineWidth?: number\n pointSize?: number\n lineColor?: string\n pointColor?: string\n}\n\nexport class DrawFaceLandmarksOptions {\n public drawLines: boolean\n\n public drawPoints: boolean\n\n public lineWidth: number\n\n public pointSize: number\n\n public lineColor: string\n\n public pointColor: string\n\n constructor(options: IDrawFaceLandmarksOptions = {}) {\n const {\n drawLines = true, drawPoints = true, lineWidth, lineColor, pointSize, pointColor,\n } = options;\n this.drawLines = drawLines;\n this.drawPoints = drawPoints;\n this.lineWidth = lineWidth || 1;\n this.pointSize = pointSize || 2;\n this.lineColor = lineColor || 'rgba(0, 255, 255, 1)';\n this.pointColor = pointColor || 'rgba(255, 0, 255, 1)';\n }\n}\n\nexport class DrawFaceLandmarks {\n public faceLandmarks: FaceLandmarks\n\n public options: DrawFaceLandmarksOptions\n\n constructor(\n faceLandmarks: FaceLandmarks,\n options: IDrawFaceLandmarksOptions = {},\n ) {\n this.faceLandmarks = faceLandmarks;\n this.options = new DrawFaceLandmarksOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const {\n drawLines, drawPoints, lineWidth, lineColor, pointSize, pointColor,\n } = this.options;\n\n if (drawLines && this.faceLandmarks instanceof FaceLandmarks68) {\n ctx.strokeStyle = lineColor;\n ctx.lineWidth = lineWidth;\n drawContour(ctx, this.faceLandmarks.getJawOutline());\n drawContour(ctx, this.faceLandmarks.getLeftEyeBrow());\n drawContour(ctx, this.faceLandmarks.getRightEyeBrow());\n drawContour(ctx, this.faceLandmarks.getNose());\n drawContour(ctx, this.faceLandmarks.getLeftEye(), true);\n drawContour(ctx, this.faceLandmarks.getRightEye(), true);\n drawContour(ctx, this.faceLandmarks.getMouth(), true);\n }\n\n if (drawPoints) {\n ctx.strokeStyle = pointColor;\n ctx.fillStyle = pointColor;\n\n const drawPoint = (pt: IPoint) => {\n ctx.beginPath();\n ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI);\n ctx.fill();\n };\n this.faceLandmarks.positions.forEach(drawPoint);\n }\n }\n}\n\nexport type DrawFaceLandmarksInput = FaceLandmarks | WithFaceLandmarks>\n\nexport function drawFaceLandmarks(\n canvasArg: string | HTMLCanvasElement,\n faceLandmarks: DrawFaceLandmarksInput | Array,\n) {\n const faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks];\n faceLandmarksArray.forEach((f) => {\n // eslint-disable-next-line no-nested-ternary\n const landmarks = f instanceof FaceLandmarks\n ? f\n : (isWithFaceLandmarks(f) ? f.landmarks : undefined);\n if (!landmarks) {\n throw new Error('drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof');\n }\n\n new DrawFaceLandmarks(landmarks).draw(canvasArg);\n });\n}\n", "import { extractConvParamsFactory, extractSeparableConvParamsFactory, extractWeightsFactory } from '../common/index';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractReductionBlockParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(channels: number, mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParams(weights: Float32Array, numMainBlocks: number): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const entry_flow_conv_in = extractConvParams(3, 32, 3, 'entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams(32, 64, 'entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams(64, 128, 'entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(128, `middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams(128, 256, 'exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams(256, 512, 'exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { entry_flow, middle_flow, exit_flow },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n disposeUnusedWeightTensors,\n extractWeightEntryFactory,\n loadSeparableConvParamsFactory,\n ParamMapping,\n} from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractReductionBlockParams(mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(`${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(`${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n numMainBlocks: number,\n): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const entry_flow_conv_in = extractConvParams('entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams('entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams('entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(`middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams('exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams('exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params: { entry_flow, middle_flow, exit_flow }, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams, depthwiseSeparableConv } from '../common/index';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { range } from '../utils/index';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction conv(x: tf.Tensor4D, params: ConvParams, stride: [number, number]): tf.Tensor4D {\n return tf.add(tf.conv2d(x, params.filters, stride, 'same'), params.bias);\n}\n\nfunction reductionBlock(x: tf.Tensor4D, params: ReductionBlockParams, isActivateInput: boolean = true): tf.Tensor4D {\n let out = isActivateInput ? tf.relu(x) : x;\n out = depthwiseSeparableConv(out, params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = tf.maxPool(out, [3, 3], [2, 2], 'same');\n out = tf.add(out, conv(x, params.expansion_conv, [2, 2]));\n return out;\n}\n\nfunction mainBlock(x: tf.Tensor4D, params: MainBlockParams): tf.Tensor4D {\n let out = depthwiseSeparableConv(tf.relu(x), params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv2, [1, 1]);\n out = tf.add(out, x);\n return out;\n}\n\nexport class TinyXception extends NeuralNetwork {\n private _numMainBlocks: number\n\n constructor(numMainBlocks: number) {\n super('TinyXception');\n this._numMainBlocks = numMainBlocks;\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyXception - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = tf.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));\n out = reductionBlock(out, params.entry_flow.reduction_block_0, false);\n out = reductionBlock(out, params.entry_flow.reduction_block_1);\n\n range(this._numMainBlocks, 0, 1).forEach((idx) => {\n out = mainBlock(out, params.middle_flow[`main_block_${idx}`]);\n });\n\n out = reductionBlock(out, params.exit_flow.reduction_block);\n out = tf.relu(depthwiseSeparableConv(out, params.exit_flow.separable_conv, [1, 1]));\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_xception_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this._numMainBlocks);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights, this._numMainBlocks);\n }\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const age = extractFCParams(512, 1, 'fc/age');\n const gender = extractFCParams(512, 2, 'fc/gender');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc: { age, gender } },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: {\n age: extractFcParams('fc/age'),\n gender: extractFcParams('fc/gender'),\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FCParams } from '../common/index';\n\n// eslint-disable-next-line no-shadow\nexport enum Gender {\n // eslint-disable-next-line no-unused-vars\n FEMALE = 'female',\n // eslint-disable-next-line no-unused-vars\n MALE = 'male'\n}\n\nexport type AgeAndGenderPrediction = {\n age: number\n gender: Gender\n genderProbability: number\n}\n\nexport type NetOutput = { age: tf.Tensor1D, gender: tf.Tensor2D }\n\nexport type NetParams = {\n fc: {\n age: FCParams\n gender: FCParams\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { seperateWeightMaps } from '../faceProcessor/util';\nimport { TinyXception } from '../xception/TinyXception';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport {\n AgeAndGenderPrediction, Gender, NetOutput, NetParams,\n} from './types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\n\nexport class AgeGenderNet extends NeuralNetwork {\n private _faceFeatureExtractor: TinyXception\n\n constructor(faceFeatureExtractor: TinyXception = new TinyXception(2)) {\n super('AgeGenderNet');\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): TinyXception {\n return this._faceFeatureExtractor;\n }\n\n public runNet(input: NetInput | tf.Tensor4D): NetOutput {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n\n const pooled = tf.avgPool(bottleneckFeatures, [7, 7], [2, 2], 'valid').as2D(bottleneckFeatures.shape[0], -1);\n const age = fullyConnectedLayer(pooled, params.fc.age).as1D();\n const gender = fullyConnectedLayer(pooled, params.fc.gender);\n return { age, gender };\n });\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): NetOutput {\n return tf.tidy(() => {\n const { age, gender } = this.runNet(input);\n return { age, gender: tf.softmax(gender) };\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictAgeAndGender(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n\n const ages = tf.unstack(out.age);\n const genders = tf.unstack(out.gender);\n const ageAndGenderTensors = ages.map((ageTensor, i) => ({\n ageTensor,\n genderTensor: genders[i],\n }));\n\n const predictionsByBatch = await Promise.all(\n ageAndGenderTensors.map(async ({ ageTensor, genderTensor }) => {\n const age = (await ageTensor.data())[0];\n const probMale = (await genderTensor.data())[0];\n const isMale = probMale > 0.5;\n const gender = isMale ? Gender.MALE : Gender.FEMALE;\n const genderProbability = isMale ? probMale : (1 - probMale);\n\n ageTensor.dispose();\n genderTensor.dispose();\n return { age, gender, genderProbability };\n }),\n );\n out.age.dispose();\n out.gender.dispose();\n\n return netInput.isBatchInput ? predictionsByBatch as AgeAndGenderPrediction[] : predictionsByBatch[0] as AgeAndGenderPrediction;\n }\n\n protected getDefaultModelName(): string {\n return 'age_gender_model';\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights);\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const classifierWeightSize = (512 * 1 + 1) + (512 * 2 + 2);\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { IDimensions, Point } from '../classes/index';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractorParams, TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { isEven } from '../utils/index';\n\nexport abstract class FaceLandmark68NetBase<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends FaceProcessor {\n public postProcess(output: tf.Tensor2D, inputSize: number, originalDimensions: IDimensions[]): tf.Tensor2D {\n const inputDimensions = originalDimensions.map(({ width, height }) => {\n const scale = inputSize / Math.max(height, width);\n return {\n width: width * scale,\n height: height * scale,\n };\n });\n\n const batchSize = inputDimensions.length;\n\n return tf.tidy(() => {\n const createInterleavedTensor = (fillX: number, fillY: number) => tf.stack([tf.fill([68], fillX, 'float32'), tf.fill([68], fillY, 'float32')], 1).as2D(1, 136).as1D();\n\n // eslint-disable-next-line no-unused-vars\n const getPadding = (batchIdx: number, cond: (w: number, h: number) => boolean): number => {\n const { width, height } = inputDimensions[batchIdx];\n return cond(width, height) ? Math.abs(width - height) / 2 : 0;\n };\n\n const getPaddingX = (batchIdx: number) => getPadding(batchIdx, (w, h) => w < h);\n const getPaddingY = (batchIdx: number) => getPadding(batchIdx, (w, h) => h < w);\n\n const landmarkTensors = output\n .mul(tf.fill([batchSize, 136], inputSize, 'float32'))\n .sub(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n getPaddingX(batchIdx),\n getPaddingY(batchIdx),\n ))))\n .div(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n inputDimensions[batchIdx].width,\n inputDimensions[batchIdx].height,\n ))));\n\n return landmarkTensors as tf.Tensor2D;\n });\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n return tf.tidy(() => {\n const out = this.runNet(input);\n return this.postProcess(\n out,\n input.inputSize as number,\n input.inputDimensions.map(([height, width]) => ({ height, width })),\n );\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async detectLandmarks(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const landmarkTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const landmarksForBatch = await Promise.all(landmarkTensors.map(\n async (landmarkTensor, batchIdx) => {\n const landmarksArray = Array.from(await landmarkTensor.data());\n const xCoords = landmarksArray.filter((_, i) => isEven(i));\n const yCoords = landmarksArray.filter((_, i) => !isEven(i));\n\n return new FaceLandmarks68(\n Array(68).fill(0).map((_, i) => new Point(xCoords[i] as number, yCoords[i] as number)),\n {\n height: netInput.getInputHeight(batchIdx),\n width: netInput.getInputWidth(batchIdx),\n },\n );\n },\n ));\n\n landmarkTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput ? landmarksForBatch as FaceLandmarks68[] : landmarksForBatch[0] as FaceLandmarks68;\n }\n\n protected getClassifierChannelsOut(): number {\n return 136;\n }\n}\n", "import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68Net extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceLandmark68Net', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMapTiny(\n weightMap: tf.NamedTensorMap,\n): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock3Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock3Params('dense0', true),\n dense1: extractDenseBlock3Params('dense1'),\n dense2: extractDenseBlock3Params('dense2'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsTiny(weights: Float32Array): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock3Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock3Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock3Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock3Params(64, 128, 'dense2');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { dense0, dense1, dense2 },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock3 } from './denseBlock';\nimport { extractParamsFromWeigthMapTiny } from './extractParamsFromWeigthMapTiny';\nimport { extractParamsTiny } from './extractParamsTiny';\nimport { IFaceFeatureExtractor, TinyFaceFeatureExtractorParams } from './types';\n\nexport class TinyFaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('TinyFaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyFaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock3(normalized, params.dense0, true);\n out = denseBlock3(out, params.dense1);\n out = denseBlock3(out, params.dense2);\n out = tf.avgPool(out, [14, 14], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_tiny_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMapTiny(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParamsTiny(weights);\n }\n}\n", "import { TinyFaceFeatureExtractor } from '../faceFeatureExtractor/TinyFaceFeatureExtractor';\nimport { TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68TinyNet extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: TinyFaceFeatureExtractor = new TinyFaceFeatureExtractor()) {\n super('FaceLandmark68TinyNet', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_tiny_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 128;\n }\n}\n", "import { FaceLandmark68Net } from './FaceLandmark68Net';\n\nexport * from './FaceLandmark68Net';\nexport * from './FaceLandmark68TinyNet';\n\nexport class FaceLandmarkNet extends FaceLandmark68Net {}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ScaleLayerParams } from './types';\n\nexport function scale(x: tf.Tensor4D, params: ScaleLayerParams): tf.Tensor4D {\n return tf.add(tf.mul(x, params.weights), params.biases);\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { scale } from './scaleLayer';\nimport { ConvLayerParams } from './types';\n\nfunction convLayer(\n x: tf.Tensor4D,\n params: ConvLayerParams,\n strides: [number, number],\n withRelu: boolean,\n padding: 'valid' | 'same' = 'same',\n): tf.Tensor4D {\n const { filters, bias } = params.conv;\n\n let out = tf.conv2d(x, filters, strides, padding);\n out = tf.add(out, bias);\n out = scale(out, params.scale);\n return withRelu ? tf.relu(out) : out;\n}\n\nexport function conv(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], true);\n}\n\nexport function convNoRelu(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], false);\n}\n\nexport function convDown(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [2, 2], true, 'valid');\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n ConvParams, extractWeightsFactory, ExtractWeightsFunction, ParamMapping,\n} from '../common/index';\nimport { isFloat } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractFilterValues(numFilterValues: number, numFilters: number, filterSize: number): tf.Tensor4D {\n const weights = extractWeights(numFilterValues);\n const depth = weights.length / (numFilters * filterSize * filterSize);\n\n if (isFloat(depth)) {\n throw new Error(`depth has to be an integer: ${depth}, weights.length: ${weights.length}, numFilters: ${numFilters}, filterSize: ${filterSize}`);\n }\n\n return tf.tidy(\n () => tf.transpose(\n tf.tensor4d(weights, [numFilters, depth, filterSize, filterSize]),\n [2, 3, 1, 0],\n ),\n );\n }\n\n function extractConvParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams {\n const filters = extractFilterValues(numFilterValues, numFilters, filterSize);\n const bias = tf.tensor1d(extractWeights(numFilters));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n }\n\n function extractScaleLayerParams(numWeights: number, mappedPrefix: string): ScaleLayerParams {\n const weights = tf.tensor1d(extractWeights(numWeights));\n const biases = tf.tensor1d(extractWeights(numWeights));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/biases` },\n );\n\n return {\n weights,\n biases,\n };\n }\n\n function extractConvLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvLayerParams {\n const conv = extractConvParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv`);\n const scale = extractScaleLayerParams(numFilters, `${mappedPrefix}/scale`);\n\n return { conv, scale };\n }\n\n function extractResidualLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n isDown: boolean = false,\n ): ResidualLayerParams {\n const conv1 = extractConvLayerParams((isDown ? 0.5 : 1) * numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv1`);\n const conv2 = extractConvLayerParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv2`);\n\n return { conv1, conv2 };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const conv32_down = extractConvLayerParams(4704, 32, 7, 'conv32_down');\n const conv32_1 = extractResidualLayerParams(9216, 32, 3, 'conv32_1');\n const conv32_2 = extractResidualLayerParams(9216, 32, 3, 'conv32_2');\n const conv32_3 = extractResidualLayerParams(9216, 32, 3, 'conv32_3');\n\n const conv64_down = extractResidualLayerParams(36864, 64, 3, 'conv64_down', true);\n const conv64_1 = extractResidualLayerParams(36864, 64, 3, 'conv64_1');\n const conv64_2 = extractResidualLayerParams(36864, 64, 3, 'conv64_2');\n const conv64_3 = extractResidualLayerParams(36864, 64, 3, 'conv64_3');\n\n const conv128_down = extractResidualLayerParams(147456, 128, 3, 'conv128_down', true);\n const conv128_1 = extractResidualLayerParams(147456, 128, 3, 'conv128_1');\n const conv128_2 = extractResidualLayerParams(147456, 128, 3, 'conv128_2');\n\n const conv256_down = extractResidualLayerParams(589824, 256, 3, 'conv256_down', true);\n const conv256_1 = extractResidualLayerParams(589824, 256, 3, 'conv256_1');\n const conv256_2 = extractResidualLayerParams(589824, 256, 3, 'conv256_2');\n const conv256_down_out = extractResidualLayerParams(589824, 256, 3, 'conv256_down_out');\n\n const fc = tf.tidy(\n () => tf.transpose(tf.tensor2d(extractWeights(256 * 128), [128, 256]), [1, 0]),\n );\n paramMappings.push({ paramPath: 'fc' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping } from '../common/index';\nimport { isTensor2D } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractScaleLayerParams(prefix: string): ScaleLayerParams {\n const weights = extractWeightEntry(`${prefix}/scale/weights`, 1);\n const biases = extractWeightEntry(`${prefix}/scale/biases`, 1);\n\n return { weights, biases };\n }\n\n function extractConvLayerParams(prefix: string): ConvLayerParams {\n const filters = extractWeightEntry(`${prefix}/conv/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/conv/bias`, 1);\n const scale = extractScaleLayerParams(prefix);\n\n return { conv: { filters, bias }, scale };\n }\n\n function extractResidualLayerParams(prefix: string): ResidualLayerParams {\n return {\n conv1: extractConvLayerParams(`${prefix}/conv1`),\n conv2: extractConvLayerParams(`${prefix}/conv2`),\n };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const conv32_down = extractConvLayerParams('conv32_down');\n const conv32_1 = extractResidualLayerParams('conv32_1');\n const conv32_2 = extractResidualLayerParams('conv32_2');\n const conv32_3 = extractResidualLayerParams('conv32_3');\n\n const conv64_down = extractResidualLayerParams('conv64_down');\n const conv64_1 = extractResidualLayerParams('conv64_1');\n const conv64_2 = extractResidualLayerParams('conv64_2');\n const conv64_3 = extractResidualLayerParams('conv64_3');\n\n const conv128_down = extractResidualLayerParams('conv128_down');\n const conv128_1 = extractResidualLayerParams('conv128_1');\n const conv128_2 = extractResidualLayerParams('conv128_2');\n\n const conv256_down = extractResidualLayerParams('conv256_down');\n const conv256_1 = extractResidualLayerParams('conv256_1');\n const conv256_2 = extractResidualLayerParams('conv256_2');\n const conv256_down_out = extractResidualLayerParams('conv256_down_out');\n\n const { fc } = weightMap;\n paramMappings.push({ originalPath: 'fc', paramPath: 'fc' });\n\n if (!isTensor2D(fc)) {\n throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${fc}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { conv, convDown, convNoRelu } from './convLayer';\nimport { ResidualLayerParams } from './types';\n\nexport function residual(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = conv(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n out = tf.add(out, x);\n out = tf.relu(out);\n return out;\n}\n\nexport function residualDown(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = convDown(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n\n let pooled = tf.avgPool(x, 2, 2, 'valid') as tf.Tensor4D;\n const zeros = tf.zeros(pooled.shape);\n const isPad = pooled.shape[3] !== out.shape[3];\n const isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2];\n\n if (isAdjustShape) {\n const padShapeX = [...out.shape] as [number, number, number, number];\n padShapeX[1] = 1;\n const zerosW = tf.zeros(padShapeX);\n out = tf.concat([out, zerosW], 1);\n\n const padShapeY = [...out.shape] as [number, number, number, number];\n padShapeY[2] = 1;\n const zerosH = tf.zeros(padShapeY);\n out = tf.concat([out, zerosH], 2);\n }\n\n pooled = isPad ? tf.concat([pooled, zeros], 3) : pooled;\n out = tf.add(pooled, out) as tf.Tensor4D;\n\n out = tf.relu(out);\n return out;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { convDown } from './convLayer';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { residual, residualDown } from './residualLayer';\nimport { NetParams } from './types';\n\nexport class FaceRecognitionNet extends NeuralNetwork {\n constructor() {\n super('FaceRecognitionNet');\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceRecognitionNet - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(150, true).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(150, true), 'float32');\n\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = convDown(normalized, params.conv32_down);\n out = tf.maxPool(out, 3, 2, 'valid');\n\n out = residual(out, params.conv32_1);\n out = residual(out, params.conv32_2);\n out = residual(out, params.conv32_3);\n\n out = residualDown(out, params.conv64_down);\n out = residual(out, params.conv64_1);\n out = residual(out, params.conv64_2);\n out = residual(out, params.conv64_3);\n\n out = residualDown(out, params.conv128_down);\n out = residual(out, params.conv128_1);\n out = residual(out, params.conv128_2);\n\n out = residualDown(out, params.conv256_down);\n out = residual(out, params.conv256_1);\n out = residual(out, params.conv256_2);\n out = residualDown(out, params.conv256_down_out);\n\n const globalAvg = out.mean([1, 2]) as tf.Tensor2D;\n const fullyConnected = tf.matMul(globalAvg, params.fc);\n\n return fullyConnected;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async computeFaceDescriptor(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n\n const faceDescriptorTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const faceDescriptorsForBatch = await Promise.all(faceDescriptorTensors.map(\n (t) => t.data(),\n )) as Float32Array[];\n\n faceDescriptorTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput\n ? faceDescriptorsForBatch\n : faceDescriptorsForBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_recognition_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import { FaceRecognitionNet } from './FaceRecognitionNet';\n\nexport * from './FaceRecognitionNet';\n\nexport function createFaceRecognitionNet(weights: Float32Array) {\n const net = new FaceRecognitionNet();\n net.extractWeights(weights);\n return net;\n}\n", "export type WithFaceDescriptor = TSource & {\n descriptor: Float32Array\n}\n\nexport function extendWithFaceDescriptor<\n TSource\n>(\n sourceObj: TSource,\n descriptor: Float32Array,\n): WithFaceDescriptor {\n const extension = { descriptor };\n return { ...sourceObj, ...extension };\n}\n", "export type WithAge = TSource & {\n age: number\n}\n\nexport function isWithAge(obj: any): obj is WithAge<{}> {\n return typeof obj.age === 'number';\n}\n\nexport function extendWithAge<\n TSource\n>(\n sourceObj: TSource,\n age: number,\n): WithAge {\n const extension = { age };\n return { ...sourceObj, ...extension };\n}\n", "import { Gender } from '../ageGenderNet/types';\nimport { isValidProbablitiy } from '../utils/index';\n\nexport type WithGender = TSource & {\n gender: Gender\n genderProbability: number\n}\n\nexport function isWithGender(obj: any): obj is WithGender<{}> {\n return (obj.gender === Gender.MALE || obj.gender === Gender.FEMALE)\n && isValidProbablitiy(obj.genderProbability);\n}\n\nexport function extendWithGender<\n TSource\n>(\n sourceObj: TSource,\n gender: Gender,\n genderProbability: number,\n): WithGender {\n const extension = { gender, genderProbability };\n return { ...sourceObj, ...extension };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n ExtractWeightsFunction, ParamMapping, ConvParams, extractWeightsFactory,\n} from '../common/index';\nimport {\n MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractDepthwiseConvParams(numChannels: number, mappedPrefix: string): MobileNetV1.DepthwiseConvParams {\n const filters = tf.tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]);\n const batch_norm_scale = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_offset = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_mean = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_variance = tf.tensor1d(extractWeights(numChannels));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/batch_norm_scale` },\n { paramPath: `${mappedPrefix}/batch_norm_offset` },\n { paramPath: `${mappedPrefix}/batch_norm_mean` },\n { paramPath: `${mappedPrefix}/batch_norm_variance` },\n );\n\n return {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n };\n }\n\n function extractConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n isPointwiseConv?: boolean,\n ): ConvParams {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/${isPointwiseConv ? 'batch_norm_offset' : 'bias'}` },\n );\n\n return { filters, bias };\n }\n\n function extractPointwiseConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): PointwiseConvParams {\n const {\n filters,\n bias,\n } = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true);\n\n return {\n filters,\n batch_norm_offset: bias,\n };\n }\n\n function extractConvPairParams(\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): MobileNetV1.ConvPairParams {\n const depthwise_conv = extractDepthwiseConvParams(channelsIn, `${mappedPrefix}/depthwise_conv`);\n const pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/pointwise_conv`);\n\n return { depthwise_conv, pointwise_conv };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n const conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0');\n\n const conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1');\n const conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2');\n const conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3');\n const conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4');\n const conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5');\n const conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6');\n const conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7');\n const conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8');\n const conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9');\n const conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10');\n const conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11');\n const conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12');\n const conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13');\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n conv_8,\n conv_9,\n conv_10,\n conv_11,\n conv_12,\n conv_13,\n };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n const conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0');\n const conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1');\n const conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2');\n const conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3');\n const conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4');\n const conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5');\n const conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6');\n const conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7');\n\n const box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor');\n const class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor');\n const box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor');\n const class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor');\n const box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor');\n const class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor');\n const box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor');\n const class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor');\n const box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor');\n const class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor');\n const box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor');\n const class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor');\n\n const box_predictor_0 = {\n box_encoding_predictor: box_encoding_0_predictor,\n class_predictor: class_predictor_0,\n };\n const box_predictor_1 = {\n box_encoding_predictor: box_encoding_1_predictor,\n class_predictor: class_predictor_1,\n };\n const box_predictor_2 = {\n box_encoding_predictor: box_encoding_2_predictor,\n class_predictor: class_predictor_2,\n };\n const box_predictor_3 = {\n box_encoding_predictor: box_encoding_3_predictor,\n class_predictor: class_predictor_3,\n };\n const box_predictor_4 = {\n box_encoding_predictor: box_encoding_4_predictor,\n class_predictor: class_predictor_4,\n };\n const box_predictor_5 = {\n box_encoding_predictor: box_encoding_5_predictor,\n class_predictor: class_predictor_5,\n };\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n box_predictor_0,\n box_predictor_1,\n box_predictor_2,\n box_predictor_3,\n box_predictor_4,\n box_predictor_5,\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const mobilenetv1 = extractMobilenetV1Params();\n const prediction_layer = extractPredictionLayerParams();\n const extra_dim = tf.tensor3d(\n extractWeights(5118 * 4),\n [1, 5118, 4],\n );\n const output_layer = {\n extra_dim,\n };\n\n paramMappings.push({ paramPath: 'output_layer/extra_dim' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n params: {\n mobilenetv1,\n prediction_layer,\n output_layer,\n },\n paramMappings,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n ConvParams, disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping,\n} from '../common/index';\nimport { isTensor3D } from '../utils/index';\nimport {\n BoxPredictionParams, MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractPointwiseConvParams(prefix: string, idx: number, mappedPrefix: string): PointwiseConvParams {\n const filters = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/weights`, 4, `${mappedPrefix}/filters`);\n const batch_norm_offset = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/convolution_bn_offset`, 1, `${mappedPrefix}/batch_norm_offset`);\n\n return { filters, batch_norm_offset };\n }\n\n function extractConvPairParams(idx: number): MobileNetV1.ConvPairParams {\n const mappedPrefix = `mobilenetv1/conv_${idx}`;\n const prefixDepthwiseConv = `MobilenetV1/Conv2d_${idx}_depthwise`;\n const mappedPrefixDepthwiseConv = `${mappedPrefix}/depthwise_conv`;\n const mappedPrefixPointwiseConv = `${mappedPrefix}/pointwise_conv`;\n\n const filters = extractWeightEntry(`${prefixDepthwiseConv}/depthwise_weights`, 4, `${mappedPrefixDepthwiseConv}/filters`);\n const batch_norm_scale = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/gamma`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_scale`);\n const batch_norm_offset = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/beta`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_offset`);\n const batch_norm_mean = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_mean`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_mean`);\n const batch_norm_variance = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_variance`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_variance`);\n\n return {\n depthwise_conv: {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n },\n pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv),\n };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n return {\n conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'),\n conv_1: extractConvPairParams(1),\n conv_2: extractConvPairParams(2),\n conv_3: extractConvPairParams(3),\n conv_4: extractConvPairParams(4),\n conv_5: extractConvPairParams(5),\n conv_6: extractConvPairParams(6),\n conv_7: extractConvPairParams(7),\n conv_8: extractConvPairParams(8),\n conv_9: extractConvPairParams(9),\n conv_10: extractConvPairParams(10),\n conv_11: extractConvPairParams(11),\n conv_12: extractConvPairParams(12),\n conv_13: extractConvPairParams(13),\n };\n }\n\n function extractConvParams(prefix: string, mappedPrefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/weights`, 4, `${mappedPrefix}/filters`);\n const bias = extractWeightEntry(`${prefix}/biases`, 1, `${mappedPrefix}/bias`);\n\n return { filters, bias };\n }\n\n function extractBoxPredictorParams(idx: number): BoxPredictionParams {\n const box_encoding_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/BoxEncodingPredictor`,\n `prediction_layer/box_predictor_${idx}/box_encoding_predictor`,\n );\n const class_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/ClassPredictor`,\n `prediction_layer/box_predictor_${idx}/class_predictor`,\n );\n\n return { box_encoding_predictor, class_predictor };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n return {\n conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'),\n conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'),\n conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'),\n conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'),\n conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'),\n conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'),\n conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'),\n conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'),\n box_predictor_0: extractBoxPredictorParams(0),\n box_predictor_1: extractBoxPredictorParams(1),\n box_predictor_2: extractBoxPredictorParams(2),\n box_predictor_3: extractBoxPredictorParams(3),\n box_predictor_4: extractBoxPredictorParams(4),\n box_predictor_5: extractBoxPredictorParams(5),\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const extra_dim = weightMap['Output/extra_dim'];\n paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' });\n\n if (!isTensor3D(extra_dim)) {\n throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${extra_dim}`);\n }\n\n const params = {\n mobilenetv1: extractMobilenetV1Params(),\n prediction_layer: extractPredictionLayerParams(),\n output_layer: {\n extra_dim,\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { PointwiseConvParams } from './types';\n\nexport function pointwiseConvLayer(\n x: tf.Tensor4D,\n params: PointwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.conv2d(x, params.filters, strides, 'same');\n out = tf.add(out, params.batch_norm_offset);\n return tf.clipByValue(out, 0, 6);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { MobileNetV1 } from './types';\n\nconst epsilon = 0.0010000000474974513;\n\nfunction depthwiseConvLayer(\n x: tf.Tensor4D,\n params: MobileNetV1.DepthwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.depthwiseConv2d(x, params.filters, strides, 'same');\n out = tf.batchNorm(\n out,\n params.batch_norm_mean,\n params.batch_norm_variance,\n params.batch_norm_offset,\n params.batch_norm_scale,\n epsilon,\n );\n return tf.clipByValue(out, 0, 6);\n });\n}\n\nfunction getStridesForLayerIdx(layerIdx: number): [number, number] {\n return [2, 4, 6, 12].some((idx) => idx === layerIdx) ? [2, 2] : [1, 1];\n}\n\nexport function mobileNetV1(x: tf.Tensor4D, params: MobileNetV1.Params) {\n return tf.tidy(() => {\n let conv11;\n let out = pointwiseConvLayer(x, params.conv_0, [2, 2]);\n\n const convPairParams = [\n params.conv_1,\n params.conv_2,\n params.conv_3,\n params.conv_4,\n params.conv_5,\n params.conv_6,\n params.conv_7,\n params.conv_8,\n params.conv_9,\n params.conv_10,\n params.conv_11,\n params.conv_12,\n params.conv_13,\n ];\n\n convPairParams.forEach((param, i) => {\n const layerIdx = i + 1;\n const depthwiseConvStrides = getStridesForLayerIdx(layerIdx);\n out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides);\n out = pointwiseConvLayer(out, param.pointwise_conv, [1, 1]);\n if (layerIdx === 11) {\n conv11 = out;\n }\n });\n\n if (conv11 === null) {\n throw new Error('mobileNetV1 - output of conv layer 11 is null');\n }\n\n return {\n out,\n conv11: conv11 as any,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nfunction IOU(boxes: tf.Tensor2D, i: number, j: number) {\n const boxesData = boxes.arraySync();\n const yminI = Math.min(boxesData[i][0], boxesData[i][2]);\n const xminI = Math.min(boxesData[i][1], boxesData[i][3]);\n const ymaxI = Math.max(boxesData[i][0], boxesData[i][2]);\n const xmaxI = Math.max(boxesData[i][1], boxesData[i][3]);\n const yminJ = Math.min(boxesData[j][0], boxesData[j][2]);\n const xminJ = Math.min(boxesData[j][1], boxesData[j][3]);\n const ymaxJ = Math.max(boxesData[j][0], boxesData[j][2]);\n const xmaxJ = Math.max(boxesData[j][1], boxesData[j][3]);\n const areaI = (ymaxI - yminI) * (xmaxI - xminI);\n const areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ);\n if (areaI <= 0 || areaJ <= 0) {\n return 0.0;\n }\n const intersectionYmin = Math.max(yminI, yminJ);\n const intersectionXmin = Math.max(xminI, xminJ);\n const intersectionYmax = Math.min(ymaxI, ymaxJ);\n const intersectionXmax = Math.min(xmaxI, xmaxJ);\n const intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0)\n * Math.max(intersectionXmax - intersectionXmin, 0.0);\n return intersectionArea / (areaI + areaJ - intersectionArea);\n}\n\nexport function nonMaxSuppression(\n boxes: tf.Tensor2D,\n scores: number[],\n maxOutputSize: number,\n iouThreshold: number,\n scoreThreshold: number,\n): number[] {\n const numBoxes = boxes.shape[0];\n const outputSize = Math.min(\n maxOutputSize,\n numBoxes,\n );\n\n const candidates = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .filter((c) => c.score > scoreThreshold)\n .sort((c1, c2) => c2.score - c1.score);\n\n const suppressFunc = (x: number) => (x <= iouThreshold ? 1 : 0);\n\n const selected: number[] = [];\n\n candidates.forEach((c) => {\n if (selected.length >= outputSize) {\n return;\n }\n const originalScore = c.score;\n\n for (let j = selected.length - 1; j >= 0; --j) {\n const iou = IOU(boxes, c.boxIndex, selected[j]);\n if (iou === 0.0) continue;\n c.score *= suppressFunc(iou);\n if (c.score <= scoreThreshold) break;\n }\n if (originalScore === c.score) {\n selected.push(c.boxIndex);\n }\n });\n\n return selected;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { OutputLayerParams } from './types';\n\nfunction getCenterCoordinatesAndSizesLayer(x: tf.Tensor2D) {\n const vec = tf.unstack(tf.transpose(x, [1, 0]));\n\n const sizes = [\n tf.sub(vec[2], vec[0]),\n tf.sub(vec[3], vec[1]),\n ];\n\n const centers = [\n tf.add(vec[0], tf.div(sizes[0], tf.scalar(2))),\n tf.add(vec[1], tf.div(sizes[1], tf.scalar(2))),\n ];\n\n return {\n sizes,\n centers,\n };\n}\n\nfunction decodeBoxesLayer(x0: tf.Tensor2D, x1: tf.Tensor2D) {\n const {\n sizes,\n centers,\n } = getCenterCoordinatesAndSizesLayer(x0);\n\n const vec = tf.unstack(tf.transpose(x1, [1, 0]));\n\n const div0_out = tf.div(tf.mul(tf.exp(tf.div(vec[2], tf.scalar(5))), sizes[0]), tf.scalar(2));\n const add0_out = tf.add(tf.mul(tf.div(vec[0], tf.scalar(10)), sizes[0]), centers[0]);\n\n const div1_out = tf.div(tf.mul(tf.exp(tf.div(vec[3], tf.scalar(5))), sizes[1]), tf.scalar(2));\n const add1_out = tf.add(tf.mul(tf.div(vec[1], tf.scalar(10)), sizes[1]), centers[1]);\n\n return tf.transpose(\n tf.stack([\n tf.sub(add0_out, div0_out),\n tf.sub(add1_out, div1_out),\n tf.add(add0_out, div0_out),\n tf.add(add1_out, div1_out),\n ]),\n [1, 0],\n );\n}\n\nexport function outputLayer(\n boxPredictions: tf.Tensor4D,\n classPredictions: tf.Tensor4D,\n params: OutputLayerParams,\n) {\n return tf.tidy(() => {\n const batchSize = boxPredictions.shape[0];\n\n let boxes = decodeBoxesLayer(\n tf.reshape(tf.tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]) as tf.Tensor2D,\n tf.reshape(boxPredictions, [-1, 4]) as tf.Tensor2D,\n );\n boxes = tf.reshape(\n boxes,\n [batchSize, (boxes.shape[0] / batchSize), 4],\n );\n\n const scoresAndClasses = tf.sigmoid(tf.slice(classPredictions, [0, 0, 1], [-1, -1, -1]));\n let scores = tf.slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]) as tf.Tensor;\n\n scores = tf.reshape(\n scores,\n [batchSize, scores.shape[1] as number],\n );\n\n const boxesByBatch = tf.unstack(boxes) as tf.Tensor2D[];\n const scoresByBatch = tf.unstack(scores) as tf.Tensor1D[];\n\n return {\n boxes: boxesByBatch,\n scores: scoresByBatch,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { convLayer } from '../common/index';\nimport { BoxPredictionParams } from './types';\n\nexport function boxPredictionLayer(\n x: tf.Tensor4D,\n params: BoxPredictionParams,\n) {\n return tf.tidy(() => {\n const batchSize = x.shape[0];\n\n const boxPredictionEncoding = tf.reshape(\n convLayer(x, params.box_encoding_predictor),\n [batchSize, -1, 1, 4],\n );\n const classPrediction = tf.reshape(\n convLayer(x, params.class_predictor),\n [batchSize, -1, 3],\n );\n\n return {\n boxPredictionEncoding,\n classPrediction,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { boxPredictionLayer } from './boxPredictionLayer';\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { PredictionLayerParams } from './types';\n\nexport function predictionLayer(\n x: tf.Tensor4D,\n conv11: tf.Tensor4D,\n params: PredictionLayerParams,\n) {\n return tf.tidy(() => {\n const conv0 = pointwiseConvLayer(x, params.conv_0, [1, 1]);\n const conv1 = pointwiseConvLayer(conv0, params.conv_1, [2, 2]);\n const conv2 = pointwiseConvLayer(conv1, params.conv_2, [1, 1]);\n const conv3 = pointwiseConvLayer(conv2, params.conv_3, [2, 2]);\n const conv4 = pointwiseConvLayer(conv3, params.conv_4, [1, 1]);\n const conv5 = pointwiseConvLayer(conv4, params.conv_5, [2, 2]);\n const conv6 = pointwiseConvLayer(conv5, params.conv_6, [1, 1]);\n const conv7 = pointwiseConvLayer(conv6, params.conv_7, [2, 2]);\n\n const boxPrediction0 = boxPredictionLayer(conv11, params.box_predictor_0);\n const boxPrediction1 = boxPredictionLayer(x, params.box_predictor_1);\n const boxPrediction2 = boxPredictionLayer(conv1, params.box_predictor_2);\n const boxPrediction3 = boxPredictionLayer(conv3, params.box_predictor_3);\n const boxPrediction4 = boxPredictionLayer(conv5, params.box_predictor_4);\n const boxPrediction5 = boxPredictionLayer(conv7, params.box_predictor_5);\n\n const boxPredictions = tf.concat([\n boxPrediction0.boxPredictionEncoding,\n boxPrediction1.boxPredictionEncoding,\n boxPrediction2.boxPredictionEncoding,\n boxPrediction3.boxPredictionEncoding,\n boxPrediction4.boxPredictionEncoding,\n boxPrediction5.boxPredictionEncoding,\n ], 1) as tf.Tensor4D;\n\n const classPredictions = tf.concat([\n boxPrediction0.classPrediction,\n boxPrediction1.classPrediction,\n boxPrediction2.classPrediction,\n boxPrediction3.classPrediction,\n boxPrediction4.classPrediction,\n boxPrediction5.classPrediction,\n ], 1) as tf.Tensor4D;\n\n return {\n boxPredictions,\n classPredictions,\n };\n });\n}\n", "export interface ISsdMobilenetv1Options {\n minConfidence?: number\n maxResults?: number\n}\n\nexport class SsdMobilenetv1Options {\n protected _name: string = 'SsdMobilenetv1Options'\n\n private _minConfidence: number\n\n private _maxResults: number\n\n constructor({ minConfidence, maxResults }: ISsdMobilenetv1Options = {}) {\n this._minConfidence = minConfidence || 0.5;\n this._maxResults = maxResults || 100;\n\n if (typeof this._minConfidence !== 'number' || this._minConfidence <= 0 || this._minConfidence >= 1) {\n throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);\n }\n\n if (typeof this._maxResults !== 'number') {\n throw new Error(`${this._name} - expected maxResults to be a number`);\n }\n }\n\n get minConfidence(): number { return this._minConfidence; }\n\n get maxResults(): number { return this._maxResults; }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { mobileNetV1 } from './mobileNetV1';\nimport { nonMaxSuppression } from './nonMaxSuppression';\nimport { outputLayer } from './outputLayer';\nimport { predictionLayer } from './predictionLayer';\nimport { ISsdMobilenetv1Options, SsdMobilenetv1Options } from './SsdMobilenetv1Options';\nimport { NetParams } from './types';\n\nexport class SsdMobilenetv1 extends NeuralNetwork {\n constructor() {\n super('SsdMobilenetv1');\n }\n\n public forwardInput(input: NetInput) {\n const { params } = this;\n\n if (!params) {\n throw new Error('SsdMobilenetv1 - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(512, false).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(512, false), 'float32');\n\n const x = tf.sub(tf.mul(batchTensor, tf.scalar(0.007843137718737125)), tf.scalar(1)) as tf.Tensor4D;\n const features = mobileNetV1(x, params.mobilenetv1);\n\n const {\n boxPredictions,\n classPredictions,\n } = predictionLayer(features.out, features.conv11, params.prediction_layer);\n\n return outputLayer(boxPredictions, classPredictions, params.output_layer);\n });\n }\n\n public async forward(input: TNetInput) {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async locateFaces(\n input: TNetInput,\n options: ISsdMobilenetv1Options = {},\n ): Promise {\n const { maxResults, minConfidence } = new SsdMobilenetv1Options(options);\n\n const netInput = await toNetInput(input);\n\n const {\n boxes: _boxes,\n scores: _scores,\n } = this.forwardInput(netInput);\n\n // TODO batches\n const boxes = _boxes[0];\n const scores = _scores[0];\n for (let i = 1; i < _boxes.length; i++) {\n _boxes[i].dispose();\n _scores[i].dispose();\n }\n\n // TODO find a better way to filter by minConfidence\n const scoresData = Array.from(await scores.data());\n\n const iouThreshold = 0.5;\n const indices = nonMaxSuppression(\n boxes,\n scoresData as number[],\n maxResults,\n iouThreshold,\n minConfidence,\n );\n\n const reshapedDims = netInput.getReshapedInputDimensions(0);\n const inputSize = netInput.inputSize as number;\n const padX = inputSize / reshapedDims.width;\n const padY = inputSize / reshapedDims.height;\n\n const boxesData = boxes.arraySync();\n const results = indices\n .map((idx) => {\n const [top, bottom] = [\n Math.max(0, boxesData[idx][0]),\n Math.min(1.0, boxesData[idx][2]),\n ].map((val) => val * padY);\n const [left, right] = [\n Math.max(0, boxesData[idx][1]),\n Math.min(1.0, boxesData[idx][3]),\n ].map((val) => val * padX);\n return new FaceDetection(\n scoresData[idx] as number,\n new Rect(\n left,\n top,\n right - left,\n bottom - top,\n ),\n {\n height: netInput.getInputHeight(0),\n width: netInput.getInputWidth(0),\n },\n );\n });\n\n boxes.dispose();\n scores.dispose();\n\n return results;\n }\n\n protected getDefaultModelName(): string {\n return 'ssd_mobilenetv1_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import { SsdMobilenetv1 } from './SsdMobilenetv1';\n\nexport * from './SsdMobilenetv1';\nexport * from './SsdMobilenetv1Options';\n\nexport function createSsdMobilenetv1(weights: Float32Array) {\n const net = new SsdMobilenetv1();\n net.extractWeights(weights);\n return net;\n}\n\nexport function createFaceDetectionNet(weights: Float32Array) {\n return createSsdMobilenetv1(weights);\n}\n\n// alias for backward compatibily\nexport class FaceDetectionNet extends SsdMobilenetv1 {}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(0.738768, 0.874946),\n new Point(2.42204, 2.65704),\n new Point(4.30971, 7.04493),\n new Point(10.246, 4.59428),\n new Point(12.6868, 11.8741),\n];\n\nexport const BOX_ANCHORS_SEPARABLE = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB_SEPARABLE: [number, number, number] = [117.001, 114.697, 97.404];\n\nexport const DEFAULT_MODEL_NAME = 'tiny_yolov2_model';\nexport const DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model';\n", "import { Point } from '../classes/Point';\n\nexport type TinyYolov2Config = {\n withSeparableConvs: boolean\n iouThreshold: number\n anchors: Point[]\n classes: string[]\n meanRgb?: [number, number, number]\n withClassScores?: boolean,\n filterSizes?: number[]\n isFirstLayerConv2d?: boolean\n}\n\nconst isNumber = (arg: any) => typeof arg === 'number';\n\nexport function validateConfig(config: any) {\n if (!config) {\n throw new Error(`invalid config: ${config}`);\n }\n\n if (typeof config.withSeparableConvs !== 'boolean') {\n throw new Error(`config.withSeparableConvs has to be a boolean, have: ${config.withSeparableConvs}`);\n }\n\n if (!isNumber(config.iouThreshold) || config.iouThreshold < 0 || config.iouThreshold > 1.0) {\n throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${config.iouThreshold}`);\n }\n\n if (\n !Array.isArray(config.classes)\n || !config.classes.length\n || !config.classes.every((c: any) => typeof c === 'string')\n ) {\n throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(config.classes)}`);\n }\n\n if (\n !Array.isArray(config.anchors)\n || !config.anchors.length\n || !config.anchors.map((a: any) => a || {}).every((a: any) => isNumber(a.x) && isNumber(a.y))\n ) {\n throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(config.anchors)}`);\n }\n\n if (config.meanRgb && (\n !Array.isArray(config.meanRgb)\n || config.meanRgb.length !== 3\n || !config.meanRgb.every(isNumber)\n )) {\n throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(config.meanRgb)}`);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nexport function leaky(x: tf.Tensor4D): tf.Tensor4D {\n return tf.tidy(() => {\n const min = tf.mul(x, tf.scalar(0.10000000149011612));\n return tf.add(tf.relu(tf.sub(x, min)), min);\n // return tf.maximum(x, min)\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { leaky } from './leaky';\nimport { ConvWithBatchNorm } from './types';\n\nexport function convWithBatchNorm(x: tf.Tensor4D, params: ConvWithBatchNorm): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.conv2d(out, params.conv.filters, [1, 1], 'valid');\n out = tf.sub(out, params.bn.sub);\n out = tf.mul(out, params.bn.truediv);\n out = tf.add(out, params.conv.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { SeparableConvParams } from '../common/types';\nimport { leaky } from './leaky';\n\nexport function depthwiseSeparableConv(x: tf.Tensor4D, params: SeparableConvParams): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.separableConv2d(out, params.depthwise_filter, params.pointwise_filter, [1, 1], 'valid');\n out = tf.add(out, params.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { extractConvParamsFactory } from '../common/index';\nimport { extractSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightsFactory } from '../common/extractWeightsFactory';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n\n function extractBatchNormParams(size: number, mappedPrefix: string): BatchNorm {\n const sub = tf.tensor1d(extractWeights(size));\n const truediv = tf.tensor1d(extractWeights(size));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/sub` },\n { paramPath: `${mappedPrefix}/truediv` },\n );\n\n return { sub, truediv };\n }\n\n function extractConvWithBatchNormParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv`);\n const bn = extractBatchNormParams(channelsOut, `${mappedPrefix}/bn`);\n\n return { conv, bn };\n }\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParams(\n weights: Float32Array,\n config: TinyYolov2Config,\n boxEncodingSize: number,\n filterSizes: number[],\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n\n const conv0 = config.isFirstLayerConv2d\n ? extractConvParams(s0, s1, 3, 'conv0')\n : extractSeparableConvParams(s0, s1, 'conv0');\n const conv1 = extractSeparableConvParams(s1, s2, 'conv1');\n const conv2 = extractSeparableConvParams(s2, s3, 'conv2');\n const conv3 = extractSeparableConvParams(s3, s4, 'conv3');\n const conv4 = extractSeparableConvParams(s4, s5, 'conv4');\n const conv5 = extractSeparableConvParams(s5, s6, 'conv5');\n const conv6 = s7 ? extractSeparableConvParams(s6, s7, 'conv6') : undefined;\n const conv7 = s8 ? extractSeparableConvParams(s7, s8, 'conv7') : undefined;\n const conv8 = extractConvParams(s8 || s7 || s6, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n } else {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n const conv0 = extractConvWithBatchNormParams(s0, s1, 'conv0');\n const conv1 = extractConvWithBatchNormParams(s1, s2, 'conv1');\n const conv2 = extractConvWithBatchNormParams(s2, s3, 'conv2');\n const conv3 = extractConvWithBatchNormParams(s3, s4, 'conv3');\n const conv4 = extractConvWithBatchNormParams(s4, s5, 'conv4');\n const conv5 = extractConvWithBatchNormParams(s5, s6, 'conv5');\n const conv6 = extractConvWithBatchNormParams(s6, s7, 'conv6');\n const conv7 = extractConvWithBatchNormParams(s7, s8, 'conv7');\n const conv8 = extractConvParams(s8, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n }\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams } from '../common/index';\nimport { disposeUnusedWeightTensors } from '../common/disposeUnusedWeightTensors';\nimport { loadSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightEntryFactory } from '../common/extractWeightEntryFactory';\nimport { ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractBatchNormParams(prefix: string): BatchNorm {\n const sub = extractWeightEntry(`${prefix}/sub`, 1);\n const truediv = extractWeightEntry(`${prefix}/truediv`, 1);\n return { sub, truediv };\n }\n\n function extractConvParams(prefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { filters, bias };\n }\n\n function extractConvWithBatchNormParams(prefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(`${prefix}/conv`);\n const bn = extractBatchNormParams(`${prefix}/bn`);\n return { conv, bn };\n }\n\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n config: TinyYolov2Config,\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n // eslint-disable-next-line no-mixed-operators\n const numFilters = (config.filterSizes && config.filterSizes.length || 9);\n params = {\n conv0: config.isFirstLayerConv2d ? extractConvParams('conv0') : extractSeparableConvParams('conv0'),\n conv1: extractSeparableConvParams('conv1'),\n conv2: extractSeparableConvParams('conv2'),\n conv3: extractSeparableConvParams('conv3'),\n conv4: extractSeparableConvParams('conv4'),\n conv5: extractSeparableConvParams('conv5'),\n conv6: numFilters > 7 ? extractSeparableConvParams('conv6') : undefined,\n conv7: numFilters > 8 ? extractSeparableConvParams('conv7') : undefined,\n conv8: extractConvParams('conv8'),\n };\n } else {\n params = {\n conv0: extractConvWithBatchNormParams('conv0'),\n conv1: extractConvWithBatchNormParams('conv1'),\n conv2: extractConvWithBatchNormParams('conv2'),\n conv3: extractConvWithBatchNormParams('conv3'),\n conv4: extractConvWithBatchNormParams('conv4'),\n conv5: extractConvWithBatchNormParams('conv5'),\n conv6: extractConvWithBatchNormParams('conv6'),\n conv7: extractConvWithBatchNormParams('conv7'),\n conv8: extractConvParams('conv8'),\n };\n }\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "export interface ITinyYolov2Options {\n inputSize?: number\n scoreThreshold?: number\n}\n\nexport class TinyYolov2Options {\n protected _name: string = 'TinyYolov2Options'\n\n private _inputSize: number\n\n private _scoreThreshold: number\n\n constructor({ inputSize, scoreThreshold }: ITinyYolov2Options = {}) {\n this._inputSize = inputSize || 416;\n this._scoreThreshold = scoreThreshold || 0.5;\n\n if (typeof this._inputSize !== 'number' || this._inputSize % 32 !== 0) {\n throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);\n }\n\n if (typeof this._scoreThreshold !== 'number' || this._scoreThreshold <= 0 || this._scoreThreshold >= 1) {\n throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`);\n }\n }\n\n get inputSize(): number { return this._inputSize; }\n\n get scoreThreshold(): number { return this._scoreThreshold; }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { BoundingBox } from '../classes/BoundingBox';\nimport { Dimensions } from '../classes/Dimensions';\nimport { ObjectDetection } from '../classes/ObjectDetection';\nimport { convLayer } from '../common/index';\nimport { ConvParams, SeparableConvParams } from '../common/types';\nimport { toNetInput } from '../dom/index';\nimport { NetInput } from '../dom/NetInput';\nimport { TNetInput } from '../dom/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { sigmoid } from '../ops/index';\nimport { nonMaxSuppression } from '../ops/nonMaxSuppression';\nimport { normalize } from '../ops/normalize';\nimport { TinyYolov2Config, validateConfig } from './config';\nimport { convWithBatchNorm } from './convWithBatchNorm';\nimport { depthwiseSeparableConv } from './depthwiseSeparableConv';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { leaky } from './leaky';\nimport { ITinyYolov2Options, TinyYolov2Options } from './TinyYolov2Options';\nimport { DefaultTinyYolov2NetParams, MobilenetParams, TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2Base extends NeuralNetwork {\n public static DEFAULT_FILTER_SIZES = [\n 3, 16, 32, 64, 128, 256, 512, 1024, 1024,\n ]\n\n private _config: TinyYolov2Config\n\n constructor(config: TinyYolov2Config) {\n super('TinyYolov2');\n validateConfig(config);\n this._config = config;\n }\n\n public get config(): TinyYolov2Config {\n return this._config;\n }\n\n public get withClassScores(): boolean {\n return this.config.withClassScores || this.config.classes.length > 1;\n }\n\n public get boxEncodingSize(): number {\n return 5 + (this.withClassScores ? this.config.classes.length : 0);\n }\n\n public runTinyYolov2(x: tf.Tensor4D, params: DefaultTinyYolov2NetParams): tf.Tensor4D {\n let out = convWithBatchNorm(x, params.conv0);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = convWithBatchNorm(out, params.conv6);\n out = convWithBatchNorm(out, params.conv7);\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public runMobilenet(x: tf.Tensor4D, params: MobilenetParams): tf.Tensor4D {\n let out = this.config.isFirstLayerConv2d\n ? leaky(convLayer(x, params.conv0 as ConvParams, 'valid', false))\n : depthwiseSeparableConv(x, params.conv0 as SeparableConvParams);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = params.conv6 ? depthwiseSeparableConv(out, params.conv6) : out;\n out = params.conv7 ? depthwiseSeparableConv(out, params.conv7) : out;\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public forwardInput(input: NetInput, inputSize: number): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyYolov2 - load model before inference');\n }\n\n return tf.tidy(() => {\n // let batchTensor = input.toBatchTensor(inputSize, false).toFloat()\n let batchTensor = tf.cast(input.toBatchTensor(inputSize, false), 'float32');\n batchTensor = this.config.meanRgb\n ? normalize(batchTensor, this.config.meanRgb)\n : batchTensor;\n batchTensor = batchTensor.div(tf.scalar(256)) as tf.Tensor4D;\n\n return this.config.withSeparableConvs\n ? this.runMobilenet(batchTensor, params as MobilenetParams)\n : this.runTinyYolov2(batchTensor, params as DefaultTinyYolov2NetParams);\n });\n }\n\n public async forward(input: TNetInput, inputSize: number): Promise {\n return this.forwardInput(await toNetInput(input), inputSize);\n }\n\n public async detect(input: TNetInput, forwardParams: ITinyYolov2Options = {}): Promise {\n const { inputSize, scoreThreshold } = new TinyYolov2Options(forwardParams);\n\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput, inputSize);\n const out0 = tf.tidy(() => tf.unstack(out)[0].expandDims()) as tf.Tensor4D;\n\n const inputDimensions = {\n width: netInput.getInputWidth(0),\n height: netInput.getInputHeight(0),\n };\n\n const results = await this.extractBoxes(out0, netInput.getReshapedInputDimensions(0), scoreThreshold);\n out.dispose();\n out0.dispose();\n\n const boxes = results.map((res) => res.box);\n const scores = results.map((res) => res.score);\n const classScores = results.map((res) => res.classScore);\n const classNames = results.map((res) => this.config.classes[res.label]);\n\n const indices = nonMaxSuppression(\n boxes.map((box) => box.rescale(inputSize)),\n scores,\n this.config.iouThreshold,\n true,\n );\n\n const detections = indices.map((idx) => new ObjectDetection(\n scores[idx],\n classScores[idx],\n classNames[idx],\n boxes[idx],\n inputDimensions,\n ));\n\n return detections;\n }\n\n protected getDefaultModelName(): string {\n return '';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this.config);\n }\n\n protected extractParams(weights: Float32Array) {\n const filterSizes = this.config.filterSizes || TinyYolov2Base.DEFAULT_FILTER_SIZES;\n\n const numFilters = filterSizes ? filterSizes.length : undefined;\n if (numFilters !== 7 && numFilters !== 8 && numFilters !== 9) {\n throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${numFilters} filterSizes in config`);\n }\n return extractParams(weights, this.config, this.boxEncodingSize, filterSizes);\n }\n\n protected async extractBoxes(\n outputTensor: tf.Tensor4D,\n inputBlobDimensions: Dimensions,\n scoreThreshold?: number,\n ) {\n const { width, height } = inputBlobDimensions;\n const inputSize = Math.max(width, height);\n const correctionFactorX = inputSize / width;\n const correctionFactorY = inputSize / height;\n\n const numCells = outputTensor.shape[1];\n const numBoxes = this.config.anchors.length;\n\n const [boxesTensor, scoresTensor, classScoresTensor] = tf.tidy(() => {\n const reshaped = outputTensor.reshape([numCells, numCells, numBoxes, this.boxEncodingSize]);\n\n const boxes = reshaped.slice([0, 0, 0, 0], [numCells, numCells, numBoxes, 4]);\n const scores = reshaped.slice([0, 0, 0, 4], [numCells, numCells, numBoxes, 1]);\n const classScores = this.withClassScores\n ? tf.softmax(reshaped.slice([0, 0, 0, 5], [numCells, numCells, numBoxes, this.config.classes.length]), 3)\n : tf.scalar(0);\n return [boxes, scores, classScores];\n });\n\n const results = [] as any;\n\n const scoresData = await scoresTensor.array();\n const boxesData = await boxesTensor.array();\n for (let row = 0; row < numCells; row++) {\n for (let col = 0; col < numCells; col++) {\n for (let anchor = 0; anchor < numBoxes; anchor++) {\n const score = sigmoid(scoresData[row][col][anchor][0]);\n if (!scoreThreshold || score > scoreThreshold) {\n const ctX = ((col + sigmoid(boxesData[row][col][anchor][0])) / numCells) * correctionFactorX;\n const ctY = ((row + sigmoid(boxesData[row][col][anchor][1])) / numCells) * correctionFactorY;\n const widthLocal = ((Math.exp(boxesData[row][col][anchor][2]) * this.config.anchors[anchor].x) / numCells) * correctionFactorX;\n const heightLocal = ((Math.exp(boxesData[row][col][anchor][3]) * this.config.anchors[anchor].y) / numCells) * correctionFactorY;\n\n const x = (ctX - (widthLocal / 2));\n const y = (ctY - (heightLocal / 2));\n\n const pos = { row, col, anchor };\n const { classScore, label } = this.withClassScores\n ? await this.extractPredictedClass(classScoresTensor as tf.Tensor4D, pos)\n : { classScore: 1, label: 0 };\n\n results.push({\n box: new BoundingBox(x, y, x + widthLocal, y + heightLocal),\n score,\n classScore: score * classScore,\n label,\n ...pos,\n });\n }\n }\n }\n }\n\n boxesTensor.dispose();\n scoresTensor.dispose();\n classScoresTensor.dispose();\n\n return results;\n }\n\n private async extractPredictedClass(classesTensor: tf.Tensor4D, pos: { row: number, col: number, anchor: number }) {\n const { row, col, anchor } = pos;\n const classesData = await classesTensor.array();\n return Array(this.config.classes.length).fill(0)\n .map((_, i) => classesData[row][col][anchor][i])\n .map((classScore, label) => ({\n classScore,\n label,\n }))\n .reduce((max, curr) => (max.classScore > curr.classScore ? max : curr));\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/types';\nimport { TNetInput } from '../dom/types';\nimport {\n BOX_ANCHORS,\n BOX_ANCHORS_SEPARABLE,\n DEFAULT_MODEL_NAME,\n DEFAULT_MODEL_NAME_SEPARABLE_CONV,\n IOU_THRESHOLD,\n MEAN_RGB_SEPARABLE,\n} from './const';\nimport { TinyYolov2Base } from './TinyYolov2Base';\nimport { ITinyYolov2Options } from './TinyYolov2Options';\nimport { TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2 extends TinyYolov2Base {\n constructor(withSeparableConvs: boolean = true) {\n const config = {\n withSeparableConvs,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n ...(withSeparableConvs\n ? {\n anchors: BOX_ANCHORS_SEPARABLE,\n meanRgb: MEAN_RGB_SEPARABLE,\n }\n : {\n anchors: BOX_ANCHORS,\n withClassScores: true,\n }),\n };\n\n super(config);\n }\n\n public get withSeparableConvs(): boolean {\n return this.config.withSeparableConvs;\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME;\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { TinyYolov2 } from './TinyYolov2';\n\nexport * from './TinyYolov2Options';\n\nexport * from './config';\nexport * from './types';\n\nexport { TinyYolov2 };\n\nexport function createTinyYolov2(weights: Float32Array, withSeparableConvs: boolean = true) {\n const net = new TinyYolov2(withSeparableConvs);\n net.extractWeights(weights);\n return net;\n}\n", "import { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\n\nexport interface ITinyFaceDetectorOptions extends ITinyYolov2Options {}\n\nexport class TinyFaceDetectorOptions extends TinyYolov2Options {\n protected _name: string = 'TinyFaceDetectorOptions'\n}\n", "export class ComposableTask {\n public async then(\n // eslint-disable-next-line no-unused-vars\n onfulfilled: (value: T) => T | PromiseLike,\n ): Promise {\n return onfulfilled(await this.run());\n }\n\n public async run(): Promise {\n throw new Error('ComposableTask - run is not implemented');\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\n\nexport async function extractAllFacesAndComputeResults, TResult>(\n parentResults: TSource[],\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResults: (faces: Array) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment: (parentResult: WithFaceLandmarks) => FaceDetection = ({ alignedRect }) => alignedRect,\n) {\n const faceBoxes = parentResults.map((parentResult) => (isWithFaceLandmarks(parentResult)\n ? getRectForAlignment(parentResult)\n : parentResult.detection));\n const faces: Array = extractedFaces || (\n input instanceof tf.Tensor\n ? await extractFaceTensors(input, faceBoxes)\n : await extractFaces(input, faceBoxes)\n );\n\n const results = await computeResults(faces);\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return results;\n}\n\nexport async function extractSingleFaceAndComputeResult, TResult>(\n parentResult: TSource,\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResult: (face: HTMLCanvasElement | tf.Tensor3D) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment?: (parentResultLocal: WithFaceLandmarks) => FaceDetection,\n) {\n return extractAllFacesAndComputeResults(\n [parentResult],\n input,\n async (faces) => computeResult(faces[0]),\n extractedFaces,\n getRectForAlignment,\n );\n}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB: [number, number, number] = [117.001, 114.697, 97.404];\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/index';\nimport { TNetInput } from '../dom/index';\nimport { ITinyYolov2Options } from '../tinyYolov2/index';\nimport { TinyYolov2Base } from '../tinyYolov2/TinyYolov2Base';\nimport { TinyYolov2NetParams } from '../tinyYolov2/types';\nimport { BOX_ANCHORS, IOU_THRESHOLD, MEAN_RGB } from './const';\n\nexport class TinyFaceDetector extends TinyYolov2Base {\n constructor() {\n const config = {\n withSeparableConvs: true,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n anchors: BOX_ANCHORS,\n meanRgb: MEAN_RGB,\n isFirstLayerConv2d: true,\n filterSizes: [3, 16, 32, 64, 128, 256, 512],\n };\n\n super(config);\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_face_detector_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { AgeGenderNet } from '../ageGenderNet/AgeGenderNet';\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet';\nimport { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { ITinyYolov2Options, TinyYolov2 } from '../tinyYolov2/index';\n\nexport const nets = {\n ssdMobilenetv1: new SsdMobilenetv1(),\n tinyFaceDetector: new TinyFaceDetector(),\n tinyYolov2: new TinyYolov2(),\n faceLandmark68Net: new FaceLandmark68Net(),\n faceLandmark68TinyNet: new FaceLandmark68TinyNet(),\n faceRecognitionNet: new FaceRecognitionNet(),\n faceExpressionNet: new FaceExpressionNet(),\n ageGenderNet: new AgeGenderNet(),\n};\n\n/**\n * Attempts to detect all faces in an image using SSD Mobilenetv1 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const ssdMobilenetv1 = (input: TNetInput, options: SsdMobilenetv1Options): Promise => nets.ssdMobilenetv1.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Face Detector.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyFaceDetector = (input: TNetInput, options: TinyFaceDetectorOptions): Promise => nets.tinyFaceDetector.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Yolov2 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyYolov2Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyYolov2 = (input: TNetInput, options: ITinyYolov2Options): Promise => nets.tinyYolov2.locateFaces(input, options);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarks = (input: TNetInput): Promise => nets.faceLandmark68Net.detectLandmarks(input);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image\n * using a tinier version of the 68 point face landmark model, which is slightly\n * faster at inference, but also slightly less accurate.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarksTiny = (input: TNetInput): Promise => nets.faceLandmark68TinyNet.detectLandmarks(input);\n\n/**\n * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image,\n * which uniquely represents the features of that persons face. The computed face descriptor can\n * be used to measure the similarity between faces, by computing the euclidean distance of two\n * face descriptors.\n *\n * @param inputs The face image extracted from the aligned bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Face descriptor with 128 entries or array thereof in case of batch input.\n */\nexport const computeFaceDescriptor = (input: TNetInput): Promise => nets.faceRecognitionNet.computeFaceDescriptor(input);\n\n/**\n * Recognizes the facial expressions from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Facial expressions with corresponding probabilities or array thereof in case of batch input.\n */\nexport const recognizeFaceExpressions = (input: TNetInput): Promise => nets.faceExpressionNet.predictExpressions(input);\n\n/**\n * Predicts age and gender from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Predictions with age, gender and gender probability or array thereof in case of batch input.\n */\nexport const predictAgeAndGender = (input: TNetInput): Promise => nets.ageGenderNet.predictAgeAndGender(input);\n\nexport const loadSsdMobilenetv1Model = (url: string) => nets.ssdMobilenetv1.load(url);\nexport const loadTinyFaceDetectorModel = (url: string) => nets.tinyFaceDetector.load(url);\nexport const loadTinyYolov2Model = (url: string) => nets.tinyYolov2.load(url);\nexport const loadFaceLandmarkModel = (url: string) => nets.faceLandmark68Net.load(url);\nexport const loadFaceLandmarkTinyModel = (url: string) => nets.faceLandmark68TinyNet.load(url);\nexport const loadFaceRecognitionModel = (url: string) => nets.faceRecognitionNet.load(url);\nexport const loadFaceExpressionModel = (url: string) => nets.faceExpressionNet.load(url);\nexport const loadAgeGenderModel = (url: string) => nets.ageGenderNet.load(url);\n\n// backward compatibility\nexport const loadFaceDetectionModel = loadSsdMobilenetv1Model;\nexport const locateFaces = ssdMobilenetv1;\nexport const detectLandmarks = detectFaceLandmarks;\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm.js';\n\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderTask,\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\n\nexport class PredictFaceExpressionsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const faceExpressionsByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map(\n (parentResult, i) => extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]),\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const faceExpressions = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithFaceExpressions(parentResult, faceExpressions);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictAllFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm.js';\n\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { TNetInput } from '../dom/index';\nimport { extendWithAge, WithAge } from '../factories/WithAge';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { extendWithGender, WithGender } from '../factories/WithGender';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllFaceExpressionsTask,\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class PredictAgeAndGenderTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase>[], TSource[]> {\n public async run(): Promise>[]> {\n const parentResults = await this.parentTask;\n\n const ageAndGenderByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map((parentResult, i) => {\n const { age, gender, genderProbability } = ageAndGenderByFace[i];\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n });\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase> | undefined, TSource | undefined> {\n public async run(): Promise> | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { age, gender, genderProbability } = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictAllAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDescriptor, WithFaceDescriptor } from '../factories/WithFaceDescriptor';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class ComputeFaceDescriptorsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n ) {\n super();\n }\n}\n\nexport class ComputeAllFaceDescriptorsTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const descriptors = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n (faces) => Promise.all(faces.map((face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise)),\n null,\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return descriptors.map((descriptor, i) => extendWithFaceDescriptor(parentResults[i], descriptor));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n\nexport class ComputeSingleFaceDescriptorTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n const descriptor = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise,\n null,\n // eslint-disable-next-line no-shadow\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return extendWithFaceDescriptor(parentResult, descriptor);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class DetectFaceLandmarksTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected useTinyLandmarkNet: boolean,\n ) {\n super();\n }\n\n protected get landmarkNet(): FaceLandmark68Net | FaceLandmark68TinyNet {\n return this.useTinyLandmarkNet\n ? nets.faceLandmark68TinyNet\n : nets.faceLandmark68Net;\n }\n}\n\nexport class DetectAllFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n const detections = parentResults.map((res) => res.detection);\n\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, detections)\n : await extractFaces(this.input, detections);\n\n const faceLandmarksByFace = await Promise.all(faces.map(\n (face) => this.landmarkNet.detectLandmarks(face),\n )) as FaceLandmarks68[];\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return parentResults.map((parentResult, i) => extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i]));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class DetectSingleFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { detection } = parentResult;\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, [detection])\n : await extractFaces(this.input, [detection]);\n\n const landmarks = await this.landmarkNet.detectLandmarks(faces[0]) as FaceLandmarks68;\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return extendWithFaceLandmarks(parentResult, landmarks);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { TinyYolov2Options } from '../tinyYolov2/index';\nimport { ComposableTask } from './ComposableTask';\nimport { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';\nimport { nets } from './nets';\nimport { PredictAllAgeAndGenderTask, PredictSingleAgeAndGenderTask } from './PredictAgeAndGenderTask';\nimport { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionsTask } from './PredictFaceExpressionsTask';\nimport { FaceDetectionOptions } from './types';\n\nexport class DetectFacesTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n ) {\n super();\n }\n}\n\nexport class DetectAllFacesTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const { input, options } = this;\n\n // eslint-disable-next-line no-nested-ternary\n const faceDetectionFunction = options instanceof TinyFaceDetectorOptions\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyFaceDetector.locateFaces(input, options)\n : (\n // eslint-disable-next-line no-nested-ternary\n options instanceof SsdMobilenetv1Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.ssdMobilenetv1.locateFaces(input, options)\n : (\n options instanceof TinyYolov2Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyYolov2.locateFaces(input, options)\n : null\n )\n );\n\n if (!faceDetectionFunction) {\n throw new Error('detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options');\n }\n\n return faceDetectionFunction(input);\n }\n\n private runAndExtendWithFaceDetections(): Promise[]> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise[]>(async (resolve) => {\n const detections = await this.run();\n resolve(detections.map((detection) => extendWithFaceDetection({}, detection)));\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectAllFaceLandmarksTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n}\n\nexport class DetectSingleFaceTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const faceDetections = await new DetectAllFacesTask(this.input, this.options);\n let faceDetectionWithHighestScore = faceDetections[0];\n faceDetections.forEach((faceDetection) => {\n if (faceDetection.score > faceDetectionWithHighestScore.score) {\n faceDetectionWithHighestScore = faceDetection;\n }\n });\n return faceDetectionWithHighestScore;\n }\n\n private runAndExtendWithFaceDetection(): Promise | undefined> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise | undefined>(async (resolve) => {\n const detection = await this.run();\n resolve(detection ? extendWithFaceDetection<{}>({}, detection) : undefined);\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectSingleFaceLandmarksTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n}\n", "import { TNetInput } from '../dom/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { DetectAllFacesTask, DetectSingleFaceTask } from './DetectFacesTasks';\nimport { FaceDetectionOptions } from './types';\n\nexport function detectSingleFace(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectSingleFaceTask {\n return new DetectSingleFaceTask(input, options);\n}\n\nexport function detectAllFaces(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectAllFacesTask {\n return new DetectAllFacesTask(input, options);\n}\n", "import { TNetInput } from '../dom/index';\nimport { WithFaceDescriptor, WithFaceDetection, WithFaceLandmarks } from '../factories/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/index';\nimport { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\nimport { detectAllFaces } from './detectFaces';\n\n// export allFaces API for backward compatibility\n\nexport async function allFacesSsdMobilenetv1(\n input: TNetInput,\n minConfidence?: number,\n): Promise>>[]> {\n return detectAllFaces(input, new SsdMobilenetv1Options(minConfidence ? { minConfidence } : {}))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport async function allFacesTinyYolov2(\n input: TNetInput,\n forwardParams: ITinyYolov2Options = {},\n): Promise>>[]> {\n return detectAllFaces(input, new TinyYolov2Options(forwardParams))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport const allFaces = allFacesSsdMobilenetv1;\n", "export function euclideanDistance(arr1: number[] | Float32Array, arr2: number[] | Float32Array) {\n if (arr1.length !== arr2.length)\n throw new Error('euclideanDistance: arr1.length !== arr2.length')\n\n const desc1 = Array.from(arr1)\n const desc2 = Array.from(arr2)\n\n return Math.sqrt(\n desc1\n .map((val, i) => val - desc2[i])\n .reduce((res, diff) => res + Math.pow(diff, 2), 0)\n )\n}", "import { FaceMatch } from '../classes/FaceMatch';\nimport { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors';\nimport { euclideanDistance } from '../euclideanDistance';\nimport { WithFaceDescriptor } from '../factories/index';\n\nexport class FaceMatcher {\n private _labeledDescriptors: LabeledFaceDescriptors[]\n\n private _distanceThreshold: number\n\n constructor(\n inputs: LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>,\n distanceThreshold: number = 0.6,\n ) {\n this._distanceThreshold = distanceThreshold;\n\n const inputArray = Array.isArray(inputs) ? inputs : [inputs];\n\n if (!inputArray.length) {\n throw new Error('FaceRecognizer.constructor - expected atleast one input');\n }\n\n let count = 1;\n const createUniqueLabel = () => `person ${count++}`;\n\n this._labeledDescriptors = inputArray.map((desc) => {\n if (desc instanceof LabeledFaceDescriptors) {\n return desc;\n }\n\n if (desc instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc]);\n }\n\n if (desc.descriptor && desc.descriptor instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]);\n }\n\n throw new Error('FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>');\n });\n }\n\n public get labeledDescriptors(): LabeledFaceDescriptors[] { return this._labeledDescriptors; }\n\n public get distanceThreshold(): number { return this._distanceThreshold; }\n\n public computeMeanDistance(queryDescriptor: Float32Array, descriptors: Float32Array[]): number {\n return descriptors\n .map((d) => euclideanDistance(d, queryDescriptor))\n .reduce((d1, d2) => d1 + d2, 0)\n / (descriptors.length || 1);\n }\n\n public matchDescriptor(queryDescriptor: Float32Array): FaceMatch {\n return this.labeledDescriptors\n .map(({ descriptors, label }) => new FaceMatch(\n label,\n this.computeMeanDistance(queryDescriptor, descriptors),\n ))\n .reduce((best, curr) => (best.distance < curr.distance ? best : curr));\n }\n\n public findBestMatch(queryDescriptor: Float32Array): FaceMatch {\n const bestMatch = this.matchDescriptor(queryDescriptor);\n return bestMatch.distance < this.distanceThreshold\n ? bestMatch\n : new FaceMatch('unknown', bestMatch.distance);\n }\n\n public toJSON(): any {\n return {\n distanceThreshold: this.distanceThreshold,\n labeledDescriptors: this.labeledDescriptors.map((ld) => ld.toJSON()),\n };\n }\n\n public static fromJSON(json: any): FaceMatcher {\n const labeledDescriptors = json.labeledDescriptors\n .map((ld: any) => LabeledFaceDescriptors.fromJSON(ld));\n return new FaceMatcher(labeledDescriptors, json.distanceThreshold);\n }\n}\n", "import { TinyFaceDetector } from './TinyFaceDetector';\n\nexport * from './TinyFaceDetector';\nexport * from './TinyFaceDetectorOptions';\n\nexport function createTinyFaceDetector(weights: Float32Array) {\n const net = new TinyFaceDetector();\n net.extractWeights(weights);\n return net;\n}\n", "import { Dimensions, IDimensions } from './classes/index';\nimport { FaceDetection } from './classes/FaceDetection';\nimport { FaceLandmarks } from './classes/FaceLandmarks';\nimport { extendWithFaceDetection, isWithFaceDetection } from './factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, isWithFaceLandmarks } from './factories/WithFaceLandmarks';\n\nexport function resizeResults(results: T, dimensions: IDimensions): T {\n\n const { width, height } = new Dimensions(dimensions.width, dimensions.height)\n\n if (width <= 0 || height <= 0) {\n throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({ width, height })}`)\n }\n\n if (Array.isArray(results)) {\n // return results.map(obj => resizeResults(obj, { width, height })) as any as T\n return (results as Array).map(obj => resizeResults(obj, { width, height } as IDimensions)) as any as T\n }\n\n if (isWithFaceLandmarks(results)) {\n const resizedDetection = results.detection.forSize(width, height)\n const resizedLandmarks = results.unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height)\n return extendWithFaceLandmarks(extendWithFaceDetection(results, resizedDetection), resizedLandmarks)\n }\n\n if (isWithFaceDetection(results)) {\n return extendWithFaceDetection(results, results.detection.forSize(width, height))\n }\n\n if (results instanceof FaceLandmarks || results instanceof FaceDetection) {\n return (results as any).forSize(width, height)\n }\n\n return results\n}"], + "sourcesContent": ["export function isNodejs(): boolean {\n return typeof global === 'object'\n && typeof require === 'function'\n && typeof module !== 'undefined'\n // issues with gatsby.js: module.exports is undefined\n // && !!module.exports\n && typeof process !== 'undefined' && !!process.version;\n}\n", "import * as tf from '../dist/tfjs.esm';\nimport * as draw from './draw/index';\nimport * as utils from './utils/index';\nimport * as pkg from '../package.json';\n\nexport { tf, draw, utils };\n\nexport * from './ageGenderNet/index';\nexport * from './classes/index';\nexport * from './dom/index';\nexport * from './env/index';\nexport * from './faceExpressionNet/index';\nexport * from './faceLandmarkNet/index';\nexport * from './faceRecognitionNet/index';\nexport * from './factories/index';\nexport * from './globalApi/index';\nexport * from './ops/index';\nexport * from './ssdMobilenetv1/index';\nexport * from './tinyFaceDetector/index';\nexport * from './tinyYolov2/index';\nexport * from './euclideanDistance';\nexport * from './NeuralNetwork';\nexport * from './resizeResults';\n\nconst node = (typeof process !== 'undefined');\n// eslint-disable-next-line no-undef\nconst browser = (typeof navigator !== 'undefined') && (typeof navigator.userAgent !== 'undefined');\nexport const version = { faceapi: pkg.version as string, node, browser };\n", "", "// A port of an algorithm by Johannes Baag\u00F8e , 2010\n// http://baagoe.com/en/RandomMusings/javascript/\n// https://github.com/nquinlan/better-random-numbers-for-javascript-mirror\n// Original work is under MIT license -\n\n// Copyright (C) 2010 by Johannes Baag\u00F8e \n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// \n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n\n\n(function(global, module, define) {\n\nfunction Alea(seed) {\n var me = this, mash = Mash();\n\n me.next = function() {\n var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32\n me.s0 = me.s1;\n me.s1 = me.s2;\n return me.s2 = t - (me.c = t | 0);\n };\n\n // Apply the seeding algorithm from Baagoe.\n me.c = 1;\n me.s0 = mash(' ');\n me.s1 = mash(' ');\n me.s2 = mash(' ');\n me.s0 -= mash(seed);\n if (me.s0 < 0) { me.s0 += 1; }\n me.s1 -= mash(seed);\n if (me.s1 < 0) { me.s1 += 1; }\n me.s2 -= mash(seed);\n if (me.s2 < 0) { me.s2 += 1; }\n mash = null;\n}\n\nfunction copy(f, t) {\n t.c = f.c;\n t.s0 = f.s0;\n t.s1 = f.s1;\n t.s2 = f.s2;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new Alea(seed),\n state = opts && opts.state,\n prng = xg.next;\n prng.int32 = function() { return (xg.next() * 0x100000000) | 0; }\n prng.double = function() {\n return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53\n };\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nfunction Mash() {\n var n = 0xefc8249d;\n\n var mash = function(data) {\n data = data.toString();\n for (var i = 0; i < data.length; i++) {\n n += data.charCodeAt(i);\n var h = 0.02519603282416938 * n;\n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 0x100000000; // 2^32\n }\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n };\n\n return mash;\n}\n\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.alea = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xor128\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n\n // Set up generator function.\n me.next = function() {\n var t = me.x ^ (me.x << 11);\n me.x = me.y;\n me.y = me.z;\n me.z = me.w;\n return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8);\n };\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor128 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xorwow\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var t = (me.x ^ (me.x >>> 2));\n me.x = me.y; me.y = me.z; me.z = me.w; me.w = me.v;\n return (me.d = (me.d + 362437 | 0)) +\n (me.v = (me.v ^ (me.v << 4)) ^ (t ^ (t << 1))) | 0;\n };\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n me.v = 0;\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n if (k == strseed.length) {\n me.d = me.x << 10 ^ me.x >>> 4;\n }\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n t.v = f.v;\n t.d = f.d;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorwow = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xorshift7\" algorithm by\n// Fran\u00E7ois Panneton and Pierre L'ecuyer:\n// \"On the Xorgshift Random Number Generators\"\n// http://saluc.engr.uconn.edu/refs/crypto/rng/panneton05onthexorshift.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n // Update xor generator.\n var X = me.x, i = me.i, t, v, w;\n t = X[i]; t ^= (t >>> 7); v = t ^ (t << 24);\n t = X[(i + 1) & 7]; v ^= t ^ (t >>> 10);\n t = X[(i + 3) & 7]; v ^= t ^ (t >>> 3);\n t = X[(i + 4) & 7]; v ^= t ^ (t << 7);\n t = X[(i + 7) & 7]; t = t ^ (t << 13); v ^= t ^ (t << 9);\n X[i] = v;\n me.i = (i + 1) & 7;\n return v;\n };\n\n function init(me, seed) {\n var j, w, X = [];\n\n if (seed === (seed | 0)) {\n // Seed state array using a 32-bit integer.\n w = X[0] = seed;\n } else {\n // Seed state using a string.\n seed = '' + seed;\n for (j = 0; j < seed.length; ++j) {\n X[j & 7] = (X[j & 7] << 15) ^\n (seed.charCodeAt(j) + X[(j + 1) & 7] << 13);\n }\n }\n // Enforce an array length of 8, not all zeroes.\n while (X.length < 8) X.push(0);\n for (j = 0; j < 8 && X[j] === 0; ++j);\n if (j == 8) w = X[7] = -1; else w = X[j];\n\n me.x = X;\n me.i = 0;\n\n // Discard an initial 256 values.\n for (j = 256; j > 0; --j) {\n me.next();\n }\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.x = f.x.slice();\n t.i = f.i;\n return t;\n}\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.x) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorshift7 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n", "// A Javascript implementaion of Richard Brent's Xorgens xor4096 algorithm.\n//\n// This fast non-cryptographic random number generator is designed for\n// use in Monte-Carlo algorithms. It combines a long-period xorshift\n// generator with a Weyl generator, and it passes all common batteries\n// of stasticial tests for randomness while consuming only a few nanoseconds\n// for each prng generated. For background on the generator, see Brent's\n// paper: \"Some long-period random number generators using shifts and xors.\"\n// http://arxiv.org/pdf/1004.3115v1.pdf\n//\n// Usage:\n//\n// var xor4096 = require('xor4096');\n// random = xor4096(1); // Seed with int32 or string.\n// assert.equal(random(), 0.1520436450538547); // (0, 1) range, 53 bits.\n// assert.equal(random.int32(), 1806534897); // signed int32, 32 bits.\n//\n// For nonzero numeric keys, this impelementation provides a sequence\n// identical to that by Brent's xorgens 3 implementaion in C. This\n// implementation also provides for initalizing the generator with\n// string seeds, or for saving and restoring the state of the generator.\n//\n// On Chrome, this prng benchmarks about 2.1 times slower than\n// Javascript's built-in Math.random().\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n var w = me.w,\n X = me.X, i = me.i, t, v;\n // Update Weyl generator.\n me.w = w = (w + 0x61c88647) | 0;\n // Update xor generator.\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n // Update Xor generator array state.\n v = X[i] = v ^ t;\n me.i = i;\n // Result is the combination.\n return (v + (w ^ (w >>> 16))) | 0;\n };\n\n function init(me, seed) {\n var t, v, i, j, w, X = [], limit = 128;\n if (seed === (seed | 0)) {\n // Numeric seeds initialize v, which is used to generates X.\n v = seed;\n seed = null;\n } else {\n // String seeds are mixed into v and X one character at a time.\n seed = seed + '\\0';\n v = 0;\n limit = Math.max(limit, seed.length);\n }\n // Initialize circular array and weyl value.\n for (i = 0, j = -32; j < limit; ++j) {\n // Put the unicode characters into the array, and shuffle them.\n if (seed) v ^= seed.charCodeAt((j + 32) % seed.length);\n // After 32 shuffles, take v as the starting w value.\n if (j === 0) w = v;\n v ^= v << 10;\n v ^= v >>> 15;\n v ^= v << 4;\n v ^= v >>> 13;\n if (j >= 0) {\n w = (w + 0x61c88647) | 0; // Weyl.\n t = (X[j & 127] ^= (v + w)); // Combine xor and weyl to init array.\n i = (0 == t) ? i + 1 : 0; // Count zeroes.\n }\n }\n // We have detected all zeroes; make the key nonzero.\n if (i >= 128) {\n X[(seed && seed.length || 0) & 127] = -1;\n }\n // Run the generator 512 times to further mix the state before using it.\n // Factoring this as a function slows the main generator, so it is just\n // unrolled here. The weyl generator is not advanced while warming up.\n i = 127;\n for (j = 4 * 128; j > 0; --j) {\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n X[i] = v ^ t;\n }\n // Storing state as object members is faster than using closure variables.\n me.w = w;\n me.X = X;\n me.i = i;\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.i = f.i;\n t.w = f.w;\n t.X = f.X.slice();\n return t;\n};\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.X) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor4096 = impl;\n}\n\n})(\n this, // window object or global\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n", "// A Javascript implementaion of the \"Tyche-i\" prng algorithm by\n// Samuel Neves and Filipe Araujo.\n// See https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var b = me.b, c = me.c, d = me.d, a = me.a;\n b = (b << 25) ^ (b >>> 7) ^ c;\n c = (c - d) | 0;\n d = (d << 24) ^ (d >>> 8) ^ a;\n a = (a - b) | 0;\n me.b = b = (b << 20) ^ (b >>> 12) ^ c;\n me.c = c = (c - d) | 0;\n me.d = (d << 16) ^ (c >>> 16) ^ a;\n return me.a = (a - b) | 0;\n };\n\n /* The following is non-inverted tyche, which has better internal\n * bit diffusion, but which is about 25% slower than tyche-i in JS.\n me.next = function() {\n var a = me.a, b = me.b, c = me.c, d = me.d;\n a = (me.a + me.b | 0) >>> 0;\n d = me.d ^ a; d = d << 16 ^ d >>> 16;\n c = me.c + d | 0;\n b = me.b ^ c; b = b << 12 ^ d >>> 20;\n me.a = a = a + b | 0;\n d = d ^ a; me.d = d = d << 8 ^ d >>> 24;\n me.c = c = c + d | 0;\n b = b ^ c;\n return me.b = (b << 7 ^ b >>> 25);\n }\n */\n\n me.a = 0;\n me.b = 0;\n me.c = 2654435769 | 0;\n me.d = 1367130551;\n\n if (seed === Math.floor(seed)) {\n // Integer seed.\n me.a = (seed / 0x100000000) | 0;\n me.b = seed | 0;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 20; k++) {\n me.b ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.a = f.a;\n t.b = f.b;\n t.c = f.c;\n t.d = f.d;\n return t;\n};\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.tychei = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "", "/*\nCopyright 2014 David Bau.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\n(function (pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\nvar global = this,\n width = 256, // each RC4 output is 0 <= x < 256\n chunks = 6, // at least six RC4 outputs for each double\n digits = 52, // there are 52 significant digits in a double\n rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\nfunction seedrandom(seed, options, callback) {\n var key = [];\n options = (options == true) ? { entropy: true } : (options || {});\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(\n options.entropy ? [seed, tostring(pool)] :\n (seed == null) ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n var prng = function() {\n var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\n d = startdenom, // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n while (n < significance) { // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\n x = arc4.g(1); // new least-significant-byte.\n }\n while (n >= overflow) { // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n d /= 2; // right using integer math until\n x >>>= 1; // we have exactly the desired bits.\n }\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function() { return arc4.g(4) | 0; }\n prng.quick = function() { return arc4.g(4) / 0x100000000; }\n prng.double = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\n return (options.pass || callback ||\n function(prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) { copy(state, arc4); }\n // Only provide the .state method if requested via options.state.\n prng.state = function() { return copy(arc4, {}); }\n }\n\n // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n if (is_math_call) { math[rngname] = prng; return seed; }\n\n // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(\n prng,\n shortseed,\n 'global' in options ? options.global : (this == math),\n options.state);\n}\nmath['seed' + rngname] = seedrandom;\n\n//\n// ARC4\n//\n// An ARC4 implementation. The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4. Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\nfunction ARC4(key) {\n var t, keylen = key.length,\n me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) { key = [keylen++]; }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\n }\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n s[j] = t;\n }\n\n // The \"g\" method returns the next (count) outputs as one number.\n (me.g = function(count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t, r = 0,\n i = me.i, j = me.j, s = me.S;\n while (count--) {\n t = s[i = mask & (i + 1)];\n r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n }\n me.i = i; me.j = j;\n return r;\n // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n })(width);\n}\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\nfunction copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n};\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\nfunction flatten(obj, depth) {\n var result = [], typ = (typeof obj), prop;\n if (depth && typ == 'object') {\n for (prop in obj) {\n try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n }\n }\n return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n}\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\nfunction mixkey(seed, key) {\n var stringseed = seed + '', smear, j = 0;\n while (j < stringseed.length) {\n key[mask & j] =\n mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n }\n return tostring(key);\n}\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\nfunction autoseed() {\n try {\n var out;\n if (nodecrypto && (out = nodecrypto.randomBytes)) {\n // The use of 'out' to remember randomBytes makes tight minified code.\n out = out(width);\n } else {\n out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n }\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date, global, plugins, global.screen, tostring(pool)];\n }\n}\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\nfunction tostring(a) {\n return String.fromCharCode.apply(0, a);\n}\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool. Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\nmixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\nif ((typeof module) == 'object' && module.exports) {\n module.exports = seedrandom;\n // When in node.js, try using crypto package for autoseeding.\n try {\n nodecrypto = require('crypto');\n } catch (ex) {}\n} else if ((typeof define) == 'function' && define.amd) {\n define(function() { return seedrandom; });\n}\n\n// End anonymous scope, and pass initial values.\n})(\n [], // pool: entropy pool starts empty\n Math // math: package containing random, pow, and seedrandom\n);\n", "// A library of seedable RNGs implemented in Javascript.\n//\n// Usage:\n//\n// var seedrandom = require('seedrandom');\n// var random = seedrandom(1); // or any seed.\n// var x = random(); // 0 <= x < 1. Every bit is random.\n// var x = random.quick(); // 0 <= x < 1. 32 bits of randomness.\n\n// alea, a 53-bit multiply-with-carry generator by Johannes Baag\u00F8e.\n// Period: ~2^116\n// Reported to pass all BigCrush tests.\nvar alea = require('./lib/alea');\n\n// xor128, a pure xor-shift generator by George Marsaglia.\n// Period: 2^128-1.\n// Reported to fail: MatrixRank and LinearComp.\nvar xor128 = require('./lib/xor128');\n\n// xorwow, George Marsaglia's 160-bit xor-shift combined plus weyl.\n// Period: 2^192-2^32\n// Reported to fail: CollisionOver, SimpPoker, and LinearComp.\nvar xorwow = require('./lib/xorwow');\n\n// xorshift7, by Fran\u00E7ois Panneton and Pierre L'ecuyer, takes\n// a different approach: it adds robustness by allowing more shifts\n// than Marsaglia's original three. It is a 7-shift generator\n// with 256 bits, that passes BigCrush with no systmatic failures.\n// Period 2^256-1.\n// No systematic BigCrush failures reported.\nvar xorshift7 = require('./lib/xorshift7');\n\n// xor4096, by Richard Brent, is a 4096-bit xor-shift with a\n// very long period that also adds a Weyl generator. It also passes\n// BigCrush with no systematic failures. Its long period may\n// be useful if you have many generators and need to avoid\n// collisions.\n// Period: 2^4128-2^32.\n// No systematic BigCrush failures reported.\nvar xor4096 = require('./lib/xor4096');\n\n// Tyche-i, by Samuel Neves and Filipe Araujo, is a bit-shifting random\n// number generator derived from ChaCha, a modern stream cipher.\n// https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n// Period: ~2^127\n// No systematic BigCrush failures reported.\nvar tychei = require('./lib/tychei');\n\n// The original ARC4-based prng included in this library.\n// Period: ~2^1600\nvar sr = require('./seedrandom');\n\nsr.alea = alea;\nsr.xor128 = xor128;\nsr.xorwow = xorwow;\nsr.xorshift7 = xorshift7;\nsr.xor4096 = xor4096;\nsr.tychei = tychei;\n\nmodule.exports = sr;\n", "", "", "", "", "\nvar WasmBackendModuleThreadedSimd = (function() {\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n return (\nfunction(WasmBackendModuleThreadedSimd) {\n WasmBackendModuleThreadedSimd = WasmBackendModuleThreadedSimd || {};\n\nfunction GROWABLE_HEAP_I8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP8}function GROWABLE_HEAP_U8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU8}function GROWABLE_HEAP_I32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP32}function GROWABLE_HEAP_U32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU32}function GROWABLE_HEAP_F64(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPF64}var Module=typeof WasmBackendModuleThreadedSimd!==\"undefined\"?WasmBackendModuleThreadedSimd:{};var _scriptDir=undefined;var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram=\"./this.program\";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_PTHREAD=Module[\"ENVIRONMENT_IS_PTHREAD\"]||false;if(ENVIRONMENT_IS_PTHREAD){buffer=Module[\"buffer\"];DYNAMIC_BASE=Module[\"DYNAMIC_BASE\"];DYNAMICTOP_PTR=Module[\"DYNAMICTOP_PTR\"]}var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require(\"path\").dirname(scriptDirectory)+\"/\"}else{scriptDirectory=__dirname+\"/\"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);return nodeFS[\"readFileSync\"](filename,binary?null:\"utf8\")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process[\"argv\"].length>1){thisProgram=process[\"argv\"][1].replace(/\\\\/g,\"/\")}arguments_=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process[\"on\"](\"unhandledRejection\",abort);quit_=function(status){process[\"exit\"](status)};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\"};var nodeWorkerThreads;try{nodeWorkerThreads=require(\"worker_threads\")}catch(e){console.error('The \"worker_threads\" module is not supported in this node.js build - perhaps a newer version is needed?');throw e}Worker=nodeWorkerThreads.Worker}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){arguments_=scriptArgs}else if(typeof arguments!=\"undefined\"){arguments_=arguments}if(typeof quit===\"function\"){quit_=function(status){quit(status)}}if(typeof print!==\"undefined\"){if(typeof console===\"undefined\")console={};console.log=print;console.warn=console.error=typeof printErr!==\"undefined\"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}if(ENVIRONMENT_IS_NODE){read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);return nodeFS[\"readFileSync\"](filename,binary?null:\"utf8\")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret}}else{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}if(ENVIRONMENT_IS_NODE){if(typeof performance===\"undefined\"){performance=require(\"perf_hooks\").performance}}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var Atomics_load=Atomics.load;var Atomics_store=Atomics.store;var Atomics_compareExchange=Atomics.compareExchange;var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];var noExitRuntime;if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(typeof WebAssembly!==\"object\"){err(\"no native wasm support detected\")}var wasmMemory;var wasmTable=new WebAssembly.Table({\"initial\":167,\"maximum\":167+0,\"element\":\"anyfunc\"});var wasmModule;var threadInfoStruct=0;var selfThreadId=0;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={\"string\":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},\"array\":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\")return UTF8ToString(ret);if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx)){var u0=heap[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(GROWABLE_HEAP_U8(),ptr,maxBytesToRead):\"\"}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,GROWABLE_HEAP_U8(),outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function writeArrayToMemory(array,buffer){GROWABLE_HEAP_I8().set(array,buffer)}var WASM_PAGE_SIZE=65536;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var STACK_BASE=5256464,STACKTOP=STACK_BASE,STACK_MAX=13584,DYNAMIC_BASE=5256464,DYNAMICTOP_PTR=12656;if(ENVIRONMENT_IS_PTHREAD){}var INITIAL_INITIAL_MEMORY=Module[\"INITIAL_MEMORY\"]||16777216;if(ENVIRONMENT_IS_PTHREAD){wasmMemory=Module[\"wasmMemory\"];buffer=Module[\"buffer\"]}else{if(Module[\"wasmMemory\"]){wasmMemory=Module[\"wasmMemory\"]}else{wasmMemory=new WebAssembly.Memory({\"initial\":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,\"maximum\":2147483648/WASM_PAGE_SIZE,\"shared\":true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err(\"requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag\");if(ENVIRONMENT_IS_NODE){console.log(\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)\")}throw Error(\"bad memory\")}}}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);if(!ENVIRONMENT_IS_PTHREAD){GROWABLE_HEAP_I32()[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback(Module);continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func)}else{Module[\"dynCall_vi\"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;if(ENVIRONMENT_IS_PTHREAD)runtimeInitialized=true;function preRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){if(ENVIRONMENT_IS_PTHREAD)return;callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_ceil=Math.ceil;var Math_floor=Math.floor;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){assert(!ENVIRONMENT_IS_PTHREAD,\"addRunDependency cannot be used in a pthread worker\");runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}if(ENVIRONMENT_IS_PTHREAD)console.error(\"Pthread aborting at \"+(new Error).stack);what+=\"\";out(what);err(what);ABORT=true;EXITSTATUS=1;what=\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix=\"file://\";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile=\"tfjs-backend-wasm-threaded-simd.wasm\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw\"both async and sync fetching of the wasm failed\"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch===\"function\"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\"}return response[\"arrayBuffer\"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={\"a\":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module[\"asm\"]=exports;wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD){var numWorkersToLoad=PThread.unusedWorkers.length;PThread.unusedWorkers.forEach(function(w){PThread.loadWasmModuleToWorker(w,function(){if(!--numWorkersToLoad)removeRunDependency(\"wasm-instantiate\")})})}}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency(\"wasm-instantiate\")}function receiveInstantiatedSource(output){receiveInstance(output[\"instance\"],output[\"module\"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming===\"function\"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch===\"function\"){fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module[\"instantiateWasm\"]){try{var exports=Module[\"instantiateWasm\"](info,receiveInstance);return exports}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);return false}}instantiateAsync();return{}}var ASM_CONSTS={};function initPthreadsJS(){PThread.initRuntime()}if(!ENVIRONMENT_IS_PTHREAD)__ATINIT__.push({func:function(){___wasm_call_ctors()}});var __pthread_ptr=0;var __pthread_is_main_runtime_thread=0;var __pthread_is_main_browser_thread=0;function __register_pthread_ptr(pthreadPtr,isMainBrowserThread,isMainRuntimeThread){pthreadPtr=pthreadPtr|0;isMainBrowserThread=isMainBrowserThread|0;isMainRuntimeThread=isMainRuntimeThread|0;__pthread_ptr=pthreadPtr;__pthread_is_main_browser_thread=isMainBrowserThread;__pthread_is_main_runtime_thread=isMainRuntimeThread}Module[\"__register_pthread_ptr\"]=__register_pthread_ptr;var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var __main_thread_futex_wait_address=13568;function _emscripten_futex_wake(addr,count){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0||count<0)return-28;if(count==0)return 0;if(count>=2147483647)count=Infinity;var mainThreadWaitAddress=Atomics.load(GROWABLE_HEAP_I32(),__main_thread_futex_wait_address>>2);var mainThreadWoken=0;if(mainThreadWaitAddress==addr){var loadedAddr=Atomics.compareExchange(GROWABLE_HEAP_I32(),__main_thread_futex_wait_address>>2,mainThreadWaitAddress,0);if(loadedAddr==mainThreadWaitAddress){--count;mainThreadWoken=1;if(count<=0)return 1}}var ret=Atomics.notify(GROWABLE_HEAP_I32(),addr>>2,count);if(ret>=0)return ret+mainThreadWoken;throw\"Atomics.notify returned an unexpected value \"+ret}Module[\"_emscripten_futex_wake\"]=_emscripten_futex_wake;function __kill_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw\"Internal Error! _kill_thread() can only ever be called from main application thread!\";if(!pthread_ptr)throw\"Internal Error! Null pthread_ptr in _kill_thread!\";GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];pthread.worker.terminate();PThread.freeThreadData(pthread);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(pthread.worker),1);pthread.worker.pthread=undefined}function __cancel_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw\"Internal Error! _cancel_thread() can only ever be called from main application thread!\";if(!pthread_ptr)throw\"Internal Error! Null pthread_ptr in _cancel_thread!\";var pthread=PThread.pthreads[pthread_ptr];pthread.worker.postMessage({\"cmd\":\"cancel\"})}function __cleanup_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw\"Internal Error! _cleanup_thread() can only ever be called from main application thread!\";if(!pthread_ptr)throw\"Internal Error! Null pthread_ptr in _cleanup_thread!\";GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];if(pthread){var worker=pthread.worker;PThread.returnWorkerToPool(worker)}}var PThread={MAIN_THREAD_ID:1,mainThreadInfo:{schedPolicy:0,schedPrio:0},unusedWorkers:[],runningWorkers:[],initRuntime:function(){__register_pthread_ptr(PThread.mainThreadBlock,!ENVIRONMENT_IS_WORKER,1);_emscripten_register_main_browser_thread_id(PThread.mainThreadBlock)},initMainThreadBlock:function(){var pthreadPoolSize=8;for(var i=0;i>2]=PThread.mainThreadBlock;var headPtr=PThread.mainThreadBlock+156;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var tlsMemory=13056;for(var i=0;i<128;++i)GROWABLE_HEAP_U32()[tlsMemory/4+i]=0;Atomics.store(GROWABLE_HEAP_U32(),PThread.mainThreadBlock+104>>2,tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),PThread.mainThreadBlock+40>>2,PThread.mainThreadBlock);Atomics.store(GROWABLE_HEAP_U32(),PThread.mainThreadBlock+44>>2,42)},initWorker:function(){},pthreads:{},exitHandlers:null,setThreadStatus:function(){},runExitHandlers:function(){if(PThread.exitHandlers!==null){while(PThread.exitHandlers.length>0){PThread.exitHandlers.pop()()}PThread.exitHandlers=null}if(ENVIRONMENT_IS_PTHREAD&&threadInfoStruct)___pthread_tsd_run_dtors()},threadExit:function(exitCode){var tb=_pthread_self();if(tb){Atomics.store(GROWABLE_HEAP_U32(),tb+4>>2,exitCode);Atomics.store(GROWABLE_HEAP_U32(),tb+0>>2,1);Atomics.store(GROWABLE_HEAP_U32(),tb+60>>2,1);Atomics.store(GROWABLE_HEAP_U32(),tb+64>>2,0);PThread.runExitHandlers();_emscripten_futex_wake(tb+0,2147483647);__register_pthread_ptr(0,0,0);threadInfoStruct=0;if(ENVIRONMENT_IS_PTHREAD){postMessage({\"cmd\":\"exit\"})}}},threadCancel:function(){PThread.runExitHandlers();Atomics.store(GROWABLE_HEAP_U32(),threadInfoStruct+4>>2,-1);Atomics.store(GROWABLE_HEAP_U32(),threadInfoStruct+0>>2,1);_emscripten_futex_wake(threadInfoStruct+0,2147483647);threadInfoStruct=selfThreadId=0;__register_pthread_ptr(0,0,0);postMessage({\"cmd\":\"cancelDone\"})},terminateAllThreads:function(){for(var t in PThread.pthreads){var pthread=PThread.pthreads[t];if(pthread&&pthread.worker){PThread.returnWorkerToPool(pthread.worker)}}PThread.pthreads={};for(var i=0;i>2];GROWABLE_HEAP_I32()[pthread.threadInfoStruct+104>>2]=0;_free(tlsMemory);_free(pthread.threadInfoStruct)}pthread.threadInfoStruct=0;if(pthread.allocatedOwnStack&&pthread.stackBase)_free(pthread.stackBase);pthread.stackBase=0;if(pthread.worker)pthread.worker.pthread=null},returnWorkerToPool:function(worker){delete PThread.pthreads[worker.pthread.thread];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);PThread.freeThreadData(worker.pthread);worker.pthread=undefined},receiveObjectTransfer:function(data){},loadWasmModuleToWorker:function(worker,onFinishedLoading){worker.onmessage=function(e){var d=e[\"data\"];var cmd=d[\"cmd\"];if(worker.pthread)PThread.currentProxiedOperationCallerThread=worker.pthread.threadInfoStruct;if(d[\"targetThread\"]&&d[\"targetThread\"]!=_pthread_self()){var thread=PThread.pthreads[d.targetThread];if(thread){thread.worker.postMessage(e.data,d[\"transferList\"])}else{console.error('Internal error! Worker sent a message \"'+cmd+'\" to target pthread '+d[\"targetThread\"]+\", but that thread no longer exists!\")}PThread.currentProxiedOperationCallerThread=undefined;return}if(cmd===\"processQueuedMainThreadWork\"){_emscripten_main_thread_process_queued_calls()}else if(cmd===\"spawnThread\"){__spawn_thread(e.data)}else if(cmd===\"cleanupThread\"){__cleanup_thread(d[\"thread\"])}else if(cmd===\"killThread\"){__kill_thread(d[\"thread\"])}else if(cmd===\"cancelThread\"){__cancel_thread(d[\"thread\"])}else if(cmd===\"loaded\"){worker.loaded=true;if(onFinishedLoading)onFinishedLoading(worker);if(worker.runPthread){worker.runPthread();delete worker.runPthread}}else if(cmd===\"print\"){out(\"Thread \"+d[\"threadId\"]+\": \"+d[\"text\"])}else if(cmd===\"printErr\"){err(\"Thread \"+d[\"threadId\"]+\": \"+d[\"text\"])}else if(cmd===\"alert\"){alert(\"Thread \"+d[\"threadId\"]+\": \"+d[\"text\"])}else if(cmd===\"exit\"){var detached=worker.pthread&&Atomics.load(GROWABLE_HEAP_U32(),worker.pthread.thread+68>>2);if(detached){PThread.returnWorkerToPool(worker)}}else if(cmd===\"cancelDone\"){PThread.returnWorkerToPool(worker)}else if(cmd===\"objectTransfer\"){PThread.receiveObjectTransfer(e.data)}else if(e.data.target===\"setimmediate\"){worker.postMessage(e.data)}else{err(\"worker sent an unknown command \"+cmd)}PThread.currentProxiedOperationCallerThread=undefined};worker.onerror=function(e){err(\"pthread sent an error! \"+e.filename+\":\"+e.lineno+\": \"+e.message)};if(ENVIRONMENT_IS_NODE){worker.on(\"message\",function(data){worker.onmessage({data:data})});worker.on(\"error\",function(data){worker.onerror(data)});worker.on(\"exit\",function(data){console.log(\"worker exited - TODO: update the worker queue?\")})}worker.postMessage({\"cmd\":\"load\",\"urlOrBlob\":Module[\"mainScriptUrlOrBlob\"]||_scriptDir,\"wasmMemory\":wasmMemory,\"wasmModule\":wasmModule,\"DYNAMIC_BASE\":DYNAMIC_BASE,\"DYNAMICTOP_PTR\":DYNAMICTOP_PTR})},allocateUnusedWorker:function(){var pthreadMainJs=locateFile(\"tfjs-backend-wasm-threaded-simd.worker.js\");PThread.unusedWorkers.push(new Worker(pthreadMainJs))},getNewWorker:function(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}if(PThread.unusedWorkers.length>0)return PThread.unusedWorkers.pop();else return null},busySpinWait:function(msecs){var t=performance.now()+msecs;while(performance.now()>2]=value;return value}function _atexit(func,arg){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,func,arg);__ATEXIT__.unshift({func:func,arg:arg})}function __emscripten_notify_thread_queue(targetThreadId,mainThreadId){if(targetThreadId==mainThreadId){postMessage({\"cmd\":\"processQueuedMainThreadWork\"})}else if(ENVIRONMENT_IS_PTHREAD){postMessage({\"targetThread\":targetThreadId,\"cmd\":\"processThreadQueue\"})}else{var pthread=PThread.pthreads[targetThreadId];var worker=pthread&&pthread.worker;if(!worker){return}worker.postMessage({\"cmd\":\"processThreadQueue\"})}return 1}function _abort(){abort()}function _emscripten_conditional_set_current_thread_status(expectedStatus,newStatus){expectedStatus=expectedStatus|0;newStatus=newStatus|0}function _emscripten_futex_wait(addr,val,timeout){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0)return-28;if(ENVIRONMENT_IS_WORKER){var ret=Atomics.wait(GROWABLE_HEAP_I32(),addr>>2,val,timeout);if(ret===\"timed-out\")return-73;if(ret===\"not-equal\")return-6;if(ret===\"ok\")return 0;throw\"Atomics.wait returned an unexpected value \"+ret}else{var loadedVal=Atomics.load(GROWABLE_HEAP_I32(),addr>>2);if(val!=loadedVal)return-6;var tNow=performance.now();var tEnd=tNow+timeout;Atomics.store(GROWABLE_HEAP_I32(),__main_thread_futex_wait_address>>2,addr);var ourWaitAddress=addr;while(addr==ourWaitAddress){tNow=performance.now();if(tNow>tEnd){return-73}_emscripten_main_thread_process_queued_calls();addr=Atomics.load(GROWABLE_HEAP_I32(),__main_thread_futex_wait_address>>2)}return 0}}function _emscripten_is_main_browser_thread(){return __pthread_is_main_browser_thread|0}function _emscripten_is_main_runtime_thread(){return __pthread_is_main_runtime_thread|0}function _emscripten_memcpy_big(dest,src,num){GROWABLE_HEAP_U8().copyWithin(dest,src,src+num)}function _emscripten_num_logical_cores(){return navigator[\"hardwareConcurrency\"]}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var stack=stackSave();var args=stackAlloc(numCallArgs*8);var b=args>>3;for(var i=0;i>3]);buf+=8}else{buf=buf+3&~3;args.push(GROWABLE_HEAP_I32()[buf>>2]);buf+=4}}return args}function _emscripten_receive_on_main_thread_js(index,numCallArgs,args){_emscripten_receive_on_main_thread_js_callArgs.length=numCallArgs;var b=args>>3;for(var i=0;i>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();if(requestedSize<=oldSize){return false}var PAGE_MULTIPLE=65536;var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),PAGE_MULTIPLE));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence>2]=eventTypeId;GROWABLE_HEAP_I32()[varargs+4>>2]=eventData;GROWABLE_HEAP_I32()[varargs+8>>2]=userData;_emscripten_async_queue_on_thread_(targetThread,637534208,eventHandlerFunc,eventData,varargs);stackRestore(stackTop)},getTargetThreadForEventCallback:function(targetThread){switch(targetThread){case 1:return 0;case 2:return PThread.currentProxiedOperationCallerThread;default:return targetThread}},getNodeNameForTarget:function(target){if(!target)return\"\";if(target==window)return\"#window\";if(target==screen)return\"#screen\";return target&&target.nodeName?target.nodeName:\"\"},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height){var stackTop=stackSave();var varargs=stackAlloc(12);var targetCanvasPtr=0;if(targetCanvas){targetCanvasPtr=stringToNewUTF8(targetCanvas)}GROWABLE_HEAP_I32()[varargs>>2]=targetCanvasPtr;GROWABLE_HEAP_I32()[varargs+4>>2]=width;GROWABLE_HEAP_I32()[varargs+8>>2]=height;_emscripten_async_queue_on_thread_(targetThread,657457152,0,targetCanvasPtr,varargs);stackRestore(stackTop)}function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread,targetCanvas,width,height){targetCanvas=targetCanvas?UTF8ToString(targetCanvas):\"\";_emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height)}function __maybeCStringToJsString(cString){return cString>2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!==\"undefined\"?document:0,typeof window!==\"undefined\"?window:0];function __findEventTarget(target){target=__maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!==\"undefined\"?document.querySelector(target):undefined);return domElement}function __findCanvasEventTarget(target){return __findEventTarget(target)}function _emscripten_set_canvas_element_size_calling_thread(target,width,height){var canvas=__findCanvasEventTarget(target);if(!canvas)return-4;if(canvas.canvasSharedPtr){GROWABLE_HEAP_I32()[canvas.canvasSharedPtr>>2]=width;GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+4>>2]=height}if(canvas.offscreenCanvas||!canvas.controlTransferredOffscreen){if(canvas.offscreenCanvas)canvas=canvas.offscreenCanvas;var autoResizeViewport=false;if(canvas.GLctxObject&&canvas.GLctxObject.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(2978);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else if(canvas.canvasSharedPtr){var targetThread=GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+8>>2];_emscripten_set_offscreencanvas_size_on_target_thread(targetThread,target,width,height);return 1}else{return-4}return 0}function _emscripten_set_canvas_element_size_main_thread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(2,1,target,width,height);return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=__findCanvasEventTarget(target);if(canvas){return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}else{return _emscripten_set_canvas_element_size_main_thread(target,width,height)}}function _emscripten_set_current_thread_status(newStatus){newStatus=newStatus|0}function _emscripten_set_thread_name(threadId,name){threadId=threadId|0;name=name|0}function __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension(\"ANGLE_instanced_arrays\");if(ext){ctx[\"vertexAttribDivisor\"]=function(index,divisor){ext[\"vertexAttribDivisorANGLE\"](index,divisor)};ctx[\"drawArraysInstanced\"]=function(mode,first,count,primcount){ext[\"drawArraysInstancedANGLE\"](mode,first,count,primcount)};ctx[\"drawElementsInstanced\"]=function(mode,count,type,indices,primcount){ext[\"drawElementsInstancedANGLE\"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension(\"OES_vertex_array_object\");if(ext){ctx[\"createVertexArray\"]=function(){return ext[\"createVertexArrayOES\"]()};ctx[\"deleteVertexArray\"]=function(vao){ext[\"deleteVertexArrayOES\"](vao)};ctx[\"bindVertexArray\"]=function(vao){ext[\"bindVertexArrayOES\"](vao)};ctx[\"isVertexArray\"]=function(vao){return ext[\"isVertexArrayOES\"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension(\"WEBGL_draw_buffers\");if(ext){ctx[\"drawBuffers\"]=function(n,bufs){ext[\"drawBuffersWEBGL\"](n,bufs)};return 1}}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){var miniTempFloatBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(GROWABLE_HEAP_I32()[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext(\"webgl\",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);GROWABLE_HEAP_I32()[handle+4>>2]=_pthread_self();var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault===\"undefined\"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents===\"object\")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle].handle);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;__webgl_enable_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension(\"EXT_disjoint_timer_query\");var automaticallyEnabledExtensions=[\"OES_texture_float\",\"OES_texture_half_float\",\"OES_standard_derivatives\",\"OES_vertex_array_object\",\"WEBGL_compressed_texture_s3tc\",\"WEBGL_depth_texture\",\"OES_element_index_uint\",\"EXT_texture_filter_anisotropic\",\"EXT_frag_depth\",\"WEBGL_draw_buffers\",\"ANGLE_instanced_arrays\",\"OES_texture_float_linear\",\"OES_texture_half_float_linear\",\"EXT_blend_minmax\",\"EXT_shader_texture_lod\",\"EXT_texture_norm16\",\"WEBGL_compressed_texture_pvrtc\",\"EXT_color_buffer_half_float\",\"WEBGL_color_buffer_float\",\"EXT_sRGB\",\"WEBGL_compressed_texture_etc1\",\"EXT_disjoint_timer_query\",\"WEBGL_compressed_texture_etc\",\"WEBGL_compressed_texture_astc\",\"EXT_color_buffer_float\",\"WEBGL_compressed_texture_s3tc_srgb\",\"EXT_disjoint_timer_query_webgl2\",\"WEBKIT_WEBGL_compressed_texture_pvrtc\"];var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2;contextAttributes[\"alpha\"]=!!GROWABLE_HEAP_I32()[a+(0>>2)];contextAttributes[\"depth\"]=!!GROWABLE_HEAP_I32()[a+(4>>2)];contextAttributes[\"stencil\"]=!!GROWABLE_HEAP_I32()[a+(8>>2)];contextAttributes[\"antialias\"]=!!GROWABLE_HEAP_I32()[a+(12>>2)];contextAttributes[\"premultipliedAlpha\"]=!!GROWABLE_HEAP_I32()[a+(16>>2)];contextAttributes[\"preserveDrawingBuffer\"]=!!GROWABLE_HEAP_I32()[a+(20>>2)];var powerPreference=GROWABLE_HEAP_I32()[a+(24>>2)];contextAttributes[\"powerPreference\"]=__emscripten_webgl_power_preferences[powerPreference];contextAttributes[\"failIfMajorPerformanceCaveat\"]=!!GROWABLE_HEAP_I32()[a+(28>>2)];contextAttributes.majorVersion=GROWABLE_HEAP_I32()[a+(32>>2)];contextAttributes.minorVersion=GROWABLE_HEAP_I32()[a+(36>>2)];contextAttributes.enableExtensionsByDefault=GROWABLE_HEAP_I32()[a+(40>>2)];contextAttributes.explicitSwapControl=GROWABLE_HEAP_I32()[a+(44>>2)];contextAttributes.proxyContextToMainThread=GROWABLE_HEAP_I32()[a+(48>>2)];contextAttributes.renderViaOffscreenBackBuffer=GROWABLE_HEAP_I32()[a+(52>>2)];var canvas=__findCanvasEventTarget(target);if(!canvas){return-4}if(contextAttributes.explicitSwapControl){return-1}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _emscripten_webgl_create_context(a0,a1){return _emscripten_webgl_do_create_context(a0,a1)}var PATH={splitPath:function(filename){var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1)}else if(last===\"..\"){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)===\"/\",trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p}),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\"}if(path&&trailingSlash){path+=\"/\"}return(isAbsolute?\"/\":\"\")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\"}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path===\"/\")return\"/\";var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join(\"/\"))},join2:function(l,r){return PATH.normalize(l+\"/\"+r)}};var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=GROWABLE_HEAP_I32()[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(3,1,fd);return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(4,1,fd,offset_low,offset_high,whence,newOffset)}function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(5,1,fd,iov,iovcnt,pnum);var num=0;for(var i=0;i>2];var len=GROWABLE_HEAP_I32()[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _pthread_cleanup_pop(execute){var routine=PThread.exitHandlers.pop();if(execute)routine()}function _pthread_cleanup_push(routine,arg){if(PThread.exitHandlers===null){PThread.exitHandlers=[]}PThread.exitHandlers.push(function(){dynCall_vi(routine,arg)})}function __spawn_thread(threadParams){if(ENVIRONMENT_IS_PTHREAD)throw\"Internal Error! _spawn_thread() can only ever be called from main application thread!\";var worker=PThread.getNewWorker();if(worker.pthread!==undefined)throw\"Internal error!\";if(!threadParams.pthread_ptr)throw\"Internal error, no pthread ptr!\";PThread.runningWorkers.push(worker);var tlsMemory=_malloc(128*4);for(var i=0;i<128;++i){GROWABLE_HEAP_I32()[tlsMemory+i*4>>2]=0}var stackHigh=threadParams.stackBase+threadParams.stackSize;var pthread=PThread.pthreads[threadParams.pthread_ptr]={worker:worker,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize,allocatedOwnStack:threadParams.allocatedOwnStack,thread:threadParams.pthread_ptr,threadInfoStruct:threadParams.pthread_ptr};var tis=pthread.threadInfoStruct>>2;Atomics.store(GROWABLE_HEAP_U32(),tis+(0>>2),0);Atomics.store(GROWABLE_HEAP_U32(),tis+(4>>2),0);Atomics.store(GROWABLE_HEAP_U32(),tis+(8>>2),0);Atomics.store(GROWABLE_HEAP_U32(),tis+(68>>2),threadParams.detached);Atomics.store(GROWABLE_HEAP_U32(),tis+(104>>2),tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),tis+(48>>2),0);Atomics.store(GROWABLE_HEAP_U32(),tis+(40>>2),pthread.threadInfoStruct);Atomics.store(GROWABLE_HEAP_U32(),tis+(44>>2),42);Atomics.store(GROWABLE_HEAP_U32(),tis+(108>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(84>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(80>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(108+8>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(108+12>>2),threadParams.detached);Atomics.store(GROWABLE_HEAP_U32(),tis+(108+20>>2),threadParams.schedPolicy);Atomics.store(GROWABLE_HEAP_U32(),tis+(108+24>>2),threadParams.schedPrio);var global_libc=_emscripten_get_global_libc();var global_locale=global_libc+40;Atomics.store(GROWABLE_HEAP_U32(),tis+(176>>2),global_locale);worker.pthread=pthread;var msg={\"cmd\":\"run\",\"start_routine\":threadParams.startRoutine,\"arg\":threadParams.arg,\"threadInfoStruct\":threadParams.pthread_ptr,\"selfThreadId\":threadParams.pthread_ptr,\"parentThreadId\":threadParams.parent_pthread_ptr,\"stackBase\":threadParams.stackBase,\"stackSize\":threadParams.stackSize};worker.runPthread=function(){msg.time=performance.now();worker.postMessage(msg,threadParams.transferList)};if(worker.loaded){worker.runPthread();delete worker.runPthread}}function _pthread_getschedparam(thread,policy,schedparam){if(!policy&&!schedparam)return ERRNO_CODES.EINVAL;if(!thread){err(\"pthread_getschedparam called with a null thread pointer!\");return ERRNO_CODES.ESRCH}var self=GROWABLE_HEAP_I32()[thread+12>>2];if(self!==thread){err(\"pthread_getschedparam attempted on thread \"+thread+\", which does not point to a valid thread, or does not exist anymore!\");return ERRNO_CODES.ESRCH}var schedPolicy=Atomics.load(GROWABLE_HEAP_U32(),thread+108+20>>2);var schedPrio=Atomics.load(GROWABLE_HEAP_U32(),thread+108+24>>2);if(policy)GROWABLE_HEAP_I32()[policy>>2]=schedPolicy;if(schedparam)GROWABLE_HEAP_I32()[schedparam>>2]=schedPrio;return 0}function _pthread_self(){return __pthread_ptr|0}Module[\"_pthread_self\"]=_pthread_self;function _pthread_create(pthread_ptr,attr,start_routine,arg){if(typeof SharedArrayBuffer===\"undefined\"){err(\"Current environment does not support SharedArrayBuffer, pthreads are not available!\");return 6}if(!pthread_ptr){err(\"pthread_create called with a null thread pointer!\");return 28}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return _emscripten_sync_run_in_main_thread_4(687865856,pthread_ptr,attr,start_routine,arg)}if(error)return error;var stackSize=0;var stackBase=0;var detached=0;var schedPolicy=0;var schedPrio=0;if(attr){stackSize=GROWABLE_HEAP_I32()[attr>>2];stackSize+=81920;stackBase=GROWABLE_HEAP_I32()[attr+8>>2];detached=GROWABLE_HEAP_I32()[attr+12>>2]!==0;var inheritSched=GROWABLE_HEAP_I32()[attr+16>>2]===0;if(inheritSched){var prevSchedPolicy=GROWABLE_HEAP_I32()[attr+20>>2];var prevSchedPrio=GROWABLE_HEAP_I32()[attr+24>>2];var parentThreadPtr=PThread.currentProxiedOperationCallerThread?PThread.currentProxiedOperationCallerThread:_pthread_self();_pthread_getschedparam(parentThreadPtr,attr+20,attr+24);schedPolicy=GROWABLE_HEAP_I32()[attr+20>>2];schedPrio=GROWABLE_HEAP_I32()[attr+24>>2];GROWABLE_HEAP_I32()[attr+20>>2]=prevSchedPolicy;GROWABLE_HEAP_I32()[attr+24>>2]=prevSchedPrio}else{schedPolicy=GROWABLE_HEAP_I32()[attr+20>>2];schedPrio=GROWABLE_HEAP_I32()[attr+24>>2]}}else{stackSize=2097152}var allocatedOwnStack=stackBase==0;if(allocatedOwnStack){stackBase=_memalign(16,stackSize)}else{stackBase-=stackSize;assert(stackBase>0)}var threadInfoStruct=_malloc(232);for(var i=0;i<232>>2;++i)GROWABLE_HEAP_U32()[(threadInfoStruct>>2)+i]=0;GROWABLE_HEAP_I32()[pthread_ptr>>2]=threadInfoStruct;GROWABLE_HEAP_I32()[threadInfoStruct+12>>2]=threadInfoStruct;var headPtr=threadInfoStruct+156;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var threadParams={stackBase:stackBase,stackSize:stackSize,allocatedOwnStack:allocatedOwnStack,schedPolicy:schedPolicy,schedPrio:schedPrio,detached:detached,startRoutine:start_routine,pthread_ptr:threadInfoStruct,parent_pthread_ptr:_pthread_self(),arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd=\"spawnThread\";postMessage(threadParams,transferList)}else{__spawn_thread(threadParams)}return 0}function _roundf(d){d=+d;return d>=+0?+Math_floor(d+ +.5):+Math_ceil(d-+.5)}function _sysconf(name){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(6,1,name);switch(name){case 30:return 16384;case 85:var maxHeapSize=2147483648;return maxHeapSize/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:case 79:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator===\"object\")return navigator[\"hardwareConcurrency\"]||1;return 1}}setErrNo(28);return-1}if(!ENVIRONMENT_IS_PTHREAD)PThread.initMainThreadBlock();else PThread.initWorker();var GLctx;GL.init();var proxiedFunctionTable=[null,_atexit,_emscripten_set_canvas_element_size_main_thread,_fd_close,_fd_seek,_fd_write,_sysconf];var asmLibraryArg={\"e\":___assert_fail,\"r\":___call_main,\"w\":__emscripten_notify_thread_queue,\"a\":_abort,\"l\":_emscripten_conditional_set_current_thread_status,\"d\":_emscripten_futex_wait,\"c\":_emscripten_futex_wake,\"h\":_emscripten_get_now,\"g\":_emscripten_is_main_browser_thread,\"x\":_emscripten_is_main_runtime_thread,\"q\":_emscripten_memcpy_big,\"B\":_emscripten_num_logical_cores,\"t\":_emscripten_receive_on_main_thread_js,\"A\":_emscripten_resize_heap,\"u\":_emscripten_set_canvas_element_size,\"k\":_emscripten_set_current_thread_status,\"s\":_emscripten_set_thread_name,\"v\":_emscripten_webgl_create_context,\"m\":_fd_close,\"o\":_fd_seek,\"i\":_fd_write,\"p\":initPthreadsJS,\"memory\":wasmMemory||Module[\"wasmMemory\"],\"y\":_pthread_cleanup_pop,\"z\":_pthread_cleanup_push,\"j\":_pthread_create,\"b\":_pthread_self,\"f\":_roundf,\"n\":_sysconf,\"table\":wasmTable};var asm=createWasm();Module[\"asm\"]=asm;var ___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=function(){return(___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=Module[\"asm\"][\"C\"]).apply(null,arguments)};var _init=Module[\"_init\"]=function(){return(_init=Module[\"_init\"]=Module[\"asm\"][\"D\"]).apply(null,arguments)};var _register_tensor=Module[\"_register_tensor\"]=function(){return(_register_tensor=Module[\"_register_tensor\"]=Module[\"asm\"][\"E\"]).apply(null,arguments)};var _dispose_data=Module[\"_dispose_data\"]=function(){return(_dispose_data=Module[\"_dispose_data\"]=Module[\"asm\"][\"F\"]).apply(null,arguments)};var _dispose=Module[\"_dispose\"]=function(){return(_dispose=Module[\"_dispose\"]=Module[\"asm\"][\"G\"]).apply(null,arguments)};var _Abs=Module[\"_Abs\"]=function(){return(_Abs=Module[\"_Abs\"]=Module[\"asm\"][\"H\"]).apply(null,arguments)};var _Add=Module[\"_Add\"]=function(){return(_Add=Module[\"_Add\"]=Module[\"asm\"][\"I\"]).apply(null,arguments)};var _AddN=Module[\"_AddN\"]=function(){return(_AddN=Module[\"_AddN\"]=Module[\"asm\"][\"J\"]).apply(null,arguments)};var _ArgMax=Module[\"_ArgMax\"]=function(){return(_ArgMax=Module[\"_ArgMax\"]=Module[\"asm\"][\"K\"]).apply(null,arguments)};var _AvgPool=Module[\"_AvgPool\"]=function(){return(_AvgPool=Module[\"_AvgPool\"]=Module[\"asm\"][\"L\"]).apply(null,arguments)};var _BatchMatMul=Module[\"_BatchMatMul\"]=function(){return(_BatchMatMul=Module[\"_BatchMatMul\"]=Module[\"asm\"][\"M\"]).apply(null,arguments)};var _ClipByValue=Module[\"_ClipByValue\"]=function(){return(_ClipByValue=Module[\"_ClipByValue\"]=Module[\"asm\"][\"N\"]).apply(null,arguments)};var _Conv2D=Module[\"_Conv2D\"]=function(){return(_Conv2D=Module[\"_Conv2D\"]=Module[\"asm\"][\"O\"]).apply(null,arguments)};var _Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=function(){return(_Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=Module[\"asm\"][\"P\"]).apply(null,arguments)};var _Cos=Module[\"_Cos\"]=function(){return(_Cos=Module[\"_Cos\"]=Module[\"asm\"][\"Q\"]).apply(null,arguments)};var _CropAndResize=Module[\"_CropAndResize\"]=function(){return(_CropAndResize=Module[\"_CropAndResize\"]=Module[\"asm\"][\"R\"]).apply(null,arguments)};var _Cumsum=Module[\"_Cumsum\"]=function(){return(_Cumsum=Module[\"_Cumsum\"]=Module[\"asm\"][\"S\"]).apply(null,arguments)};var _DepthToSpace=Module[\"_DepthToSpace\"]=function(){return(_DepthToSpace=Module[\"_DepthToSpace\"]=Module[\"asm\"][\"T\"]).apply(null,arguments)};var _DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=function(){return(_DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=Module[\"asm\"][\"U\"]).apply(null,arguments)};var _Equal=Module[\"_Equal\"]=function(){return(_Equal=Module[\"_Equal\"]=Module[\"asm\"][\"V\"]).apply(null,arguments)};var _Exp=Module[\"_Exp\"]=function(){return(_Exp=Module[\"_Exp\"]=Module[\"asm\"][\"W\"]).apply(null,arguments)};var _FlipLeftRight=Module[\"_FlipLeftRight\"]=function(){return(_FlipLeftRight=Module[\"_FlipLeftRight\"]=Module[\"asm\"][\"X\"]).apply(null,arguments)};var _Floor=Module[\"_Floor\"]=function(){return(_Floor=Module[\"_Floor\"]=Module[\"asm\"][\"Y\"]).apply(null,arguments)};var _FloorDiv=Module[\"_FloorDiv\"]=function(){return(_FloorDiv=Module[\"_FloorDiv\"]=Module[\"asm\"][\"Z\"]).apply(null,arguments)};var _FusedBatchNorm=Module[\"_FusedBatchNorm\"]=function(){return(_FusedBatchNorm=Module[\"_FusedBatchNorm\"]=Module[\"asm\"][\"_\"]).apply(null,arguments)};var _FusedConv2D=Module[\"_FusedConv2D\"]=function(){return(_FusedConv2D=Module[\"_FusedConv2D\"]=Module[\"asm\"][\"$\"]).apply(null,arguments)};var _FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=function(){return(_FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=Module[\"asm\"][\"aa\"]).apply(null,arguments)};var _Gather=Module[\"_Gather\"]=function(){return(_Gather=Module[\"_Gather\"]=Module[\"asm\"][\"ba\"]).apply(null,arguments)};var _GatherNd=Module[\"_GatherNd\"]=function(){return(_GatherNd=Module[\"_GatherNd\"]=Module[\"asm\"][\"ca\"]).apply(null,arguments)};var _Greater=Module[\"_Greater\"]=function(){return(_Greater=Module[\"_Greater\"]=Module[\"asm\"][\"da\"]).apply(null,arguments)};var _GreaterEqual=Module[\"_GreaterEqual\"]=function(){return(_GreaterEqual=Module[\"_GreaterEqual\"]=Module[\"asm\"][\"ea\"]).apply(null,arguments)};var _LeakyRelu=Module[\"_LeakyRelu\"]=function(){return(_LeakyRelu=Module[\"_LeakyRelu\"]=Module[\"asm\"][\"fa\"]).apply(null,arguments)};var _Less=Module[\"_Less\"]=function(){return(_Less=Module[\"_Less\"]=Module[\"asm\"][\"ga\"]).apply(null,arguments)};var _LessEqual=Module[\"_LessEqual\"]=function(){return(_LessEqual=Module[\"_LessEqual\"]=Module[\"asm\"][\"ha\"]).apply(null,arguments)};var _Log=Module[\"_Log\"]=function(){return(_Log=Module[\"_Log\"]=Module[\"asm\"][\"ia\"]).apply(null,arguments)};var _LogicalAnd=Module[\"_LogicalAnd\"]=function(){return(_LogicalAnd=Module[\"_LogicalAnd\"]=Module[\"asm\"][\"ja\"]).apply(null,arguments)};var _Max=Module[\"_Max\"]=function(){return(_Max=Module[\"_Max\"]=Module[\"asm\"][\"ka\"]).apply(null,arguments)};var _MaxPool=Module[\"_MaxPool\"]=function(){return(_MaxPool=Module[\"_MaxPool\"]=Module[\"asm\"][\"la\"]).apply(null,arguments)};var _Maximum=Module[\"_Maximum\"]=function(){return(_Maximum=Module[\"_Maximum\"]=Module[\"asm\"][\"ma\"]).apply(null,arguments)};var _Mean=Module[\"_Mean\"]=function(){return(_Mean=Module[\"_Mean\"]=Module[\"asm\"][\"na\"]).apply(null,arguments)};var _Min=Module[\"_Min\"]=function(){return(_Min=Module[\"_Min\"]=Module[\"asm\"][\"oa\"]).apply(null,arguments)};var _Minimum=Module[\"_Minimum\"]=function(){return(_Minimum=Module[\"_Minimum\"]=Module[\"asm\"][\"pa\"]).apply(null,arguments)};var _Multiply=Module[\"_Multiply\"]=function(){return(_Multiply=Module[\"_Multiply\"]=Module[\"asm\"][\"qa\"]).apply(null,arguments)};var _Neg=Module[\"_Neg\"]=function(){return(_Neg=Module[\"_Neg\"]=Module[\"asm\"][\"ra\"]).apply(null,arguments)};var _NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=function(){return(_NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=Module[\"asm\"][\"sa\"]).apply(null,arguments)};var _NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=function(){return(_NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=Module[\"asm\"][\"ta\"]).apply(null,arguments)};var _NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=function(){return(_NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=Module[\"asm\"][\"ua\"]).apply(null,arguments)};var _NotEqual=Module[\"_NotEqual\"]=function(){return(_NotEqual=Module[\"_NotEqual\"]=Module[\"asm\"][\"va\"]).apply(null,arguments)};var _OneHot=Module[\"_OneHot\"]=function(){return(_OneHot=Module[\"_OneHot\"]=Module[\"asm\"][\"wa\"]).apply(null,arguments)};var _PadV2=Module[\"_PadV2\"]=function(){return(_PadV2=Module[\"_PadV2\"]=Module[\"asm\"][\"xa\"]).apply(null,arguments)};var _Pow=Module[\"_Pow\"]=function(){return(_Pow=Module[\"_Pow\"]=Module[\"asm\"][\"ya\"]).apply(null,arguments)};var _Prelu=Module[\"_Prelu\"]=function(){return(_Prelu=Module[\"_Prelu\"]=Module[\"asm\"][\"za\"]).apply(null,arguments)};var _Prod=Module[\"_Prod\"]=function(){return(_Prod=Module[\"_Prod\"]=Module[\"asm\"][\"Aa\"]).apply(null,arguments)};var _RealDiv=Module[\"_RealDiv\"]=function(){return(_RealDiv=Module[\"_RealDiv\"]=Module[\"asm\"][\"Ba\"]).apply(null,arguments)};var _Relu=Module[\"_Relu\"]=function(){return(_Relu=Module[\"_Relu\"]=Module[\"asm\"][\"Ca\"]).apply(null,arguments)};var _Relu6=Module[\"_Relu6\"]=function(){return(_Relu6=Module[\"_Relu6\"]=Module[\"asm\"][\"Da\"]).apply(null,arguments)};var _ResizeBilinear=Module[\"_ResizeBilinear\"]=function(){return(_ResizeBilinear=Module[\"_ResizeBilinear\"]=Module[\"asm\"][\"Ea\"]).apply(null,arguments)};var _Reverse=Module[\"_Reverse\"]=function(){return(_Reverse=Module[\"_Reverse\"]=Module[\"asm\"][\"Fa\"]).apply(null,arguments)};var _RotateWithOffset=Module[\"_RotateWithOffset\"]=function(){return(_RotateWithOffset=Module[\"_RotateWithOffset\"]=Module[\"asm\"][\"Ga\"]).apply(null,arguments)};var _Rsqrt=Module[\"_Rsqrt\"]=function(){return(_Rsqrt=Module[\"_Rsqrt\"]=Module[\"asm\"][\"Ha\"]).apply(null,arguments)};var _ScatterNd=Module[\"_ScatterNd\"]=function(){return(_ScatterNd=Module[\"_ScatterNd\"]=Module[\"asm\"][\"Ia\"]).apply(null,arguments)};var _SelectV2=Module[\"_SelectV2\"]=function(){return(_SelectV2=Module[\"_SelectV2\"]=Module[\"asm\"][\"Ja\"]).apply(null,arguments)};var _Sigmoid=Module[\"_Sigmoid\"]=function(){return(_Sigmoid=Module[\"_Sigmoid\"]=Module[\"asm\"][\"Ka\"]).apply(null,arguments)};var _Sin=Module[\"_Sin\"]=function(){return(_Sin=Module[\"_Sin\"]=Module[\"asm\"][\"La\"]).apply(null,arguments)};var _Softmax=Module[\"_Softmax\"]=function(){return(_Softmax=Module[\"_Softmax\"]=Module[\"asm\"][\"Ma\"]).apply(null,arguments)};var _Sqrt=Module[\"_Sqrt\"]=function(){return(_Sqrt=Module[\"_Sqrt\"]=Module[\"asm\"][\"Na\"]).apply(null,arguments)};var _Square=Module[\"_Square\"]=function(){return(_Square=Module[\"_Square\"]=Module[\"asm\"][\"Oa\"]).apply(null,arguments)};var _SquaredDifference=Module[\"_SquaredDifference\"]=function(){return(_SquaredDifference=Module[\"_SquaredDifference\"]=Module[\"asm\"][\"Pa\"]).apply(null,arguments)};var _StridedSlice=Module[\"_StridedSlice\"]=function(){return(_StridedSlice=Module[\"_StridedSlice\"]=Module[\"asm\"][\"Qa\"]).apply(null,arguments)};var _Sub=Module[\"_Sub\"]=function(){return(_Sub=Module[\"_Sub\"]=Module[\"asm\"][\"Ra\"]).apply(null,arguments)};var _Sum=Module[\"_Sum\"]=function(){return(_Sum=Module[\"_Sum\"]=Module[\"asm\"][\"Sa\"]).apply(null,arguments)};var _Tanh=Module[\"_Tanh\"]=function(){return(_Tanh=Module[\"_Tanh\"]=Module[\"asm\"][\"Ta\"]).apply(null,arguments)};var _Tile=Module[\"_Tile\"]=function(){return(_Tile=Module[\"_Tile\"]=Module[\"asm\"][\"Ua\"]).apply(null,arguments)};var _TopK=Module[\"_TopK\"]=function(){return(_TopK=Module[\"_TopK\"]=Module[\"asm\"][\"Va\"]).apply(null,arguments)};var _Transpose=Module[\"_Transpose\"]=function(){return(_Transpose=Module[\"_Transpose\"]=Module[\"asm\"][\"Wa\"]).apply(null,arguments)};var __FusedMatMul=Module[\"__FusedMatMul\"]=function(){return(__FusedMatMul=Module[\"__FusedMatMul\"]=Module[\"asm\"][\"Xa\"]).apply(null,arguments)};var _malloc=Module[\"_malloc\"]=function(){return(_malloc=Module[\"_malloc\"]=Module[\"asm\"][\"Ya\"]).apply(null,arguments)};var _free=Module[\"_free\"]=function(){return(_free=Module[\"_free\"]=Module[\"asm\"][\"Za\"]).apply(null,arguments)};var ___errno_location=Module[\"___errno_location\"]=function(){return(___errno_location=Module[\"___errno_location\"]=Module[\"asm\"][\"_a\"]).apply(null,arguments)};var _emscripten_get_global_libc=Module[\"_emscripten_get_global_libc\"]=function(){return(_emscripten_get_global_libc=Module[\"_emscripten_get_global_libc\"]=Module[\"asm\"][\"$a\"]).apply(null,arguments)};var ___em_js__initPthreadsJS=Module[\"___em_js__initPthreadsJS\"]=function(){return(___em_js__initPthreadsJS=Module[\"___em_js__initPthreadsJS\"]=Module[\"asm\"][\"ab\"]).apply(null,arguments)};var _memalign=Module[\"_memalign\"]=function(){return(_memalign=Module[\"_memalign\"]=Module[\"asm\"][\"bb\"]).apply(null,arguments)};var ___pthread_tsd_run_dtors=Module[\"___pthread_tsd_run_dtors\"]=function(){return(___pthread_tsd_run_dtors=Module[\"___pthread_tsd_run_dtors\"]=Module[\"asm\"][\"cb\"]).apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module[\"_emscripten_main_thread_process_queued_calls\"]=function(){return(_emscripten_main_thread_process_queued_calls=Module[\"_emscripten_main_thread_process_queued_calls\"]=Module[\"asm\"][\"db\"]).apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module[\"_emscripten_current_thread_process_queued_calls\"]=function(){return(_emscripten_current_thread_process_queued_calls=Module[\"_emscripten_current_thread_process_queued_calls\"]=Module[\"asm\"][\"eb\"]).apply(null,arguments)};var _emscripten_register_main_browser_thread_id=Module[\"_emscripten_register_main_browser_thread_id\"]=function(){return(_emscripten_register_main_browser_thread_id=Module[\"_emscripten_register_main_browser_thread_id\"]=Module[\"asm\"][\"fb\"]).apply(null,arguments)};var _emscripten_main_browser_thread_id=Module[\"_emscripten_main_browser_thread_id\"]=function(){return(_emscripten_main_browser_thread_id=Module[\"_emscripten_main_browser_thread_id\"]=Module[\"asm\"][\"gb\"]).apply(null,arguments)};var _emscripten_async_run_in_main_thread=Module[\"_emscripten_async_run_in_main_thread\"]=function(){return(_emscripten_async_run_in_main_thread=Module[\"_emscripten_async_run_in_main_thread\"]=Module[\"asm\"][\"hb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread=Module[\"_emscripten_sync_run_in_main_thread\"]=function(){return(_emscripten_sync_run_in_main_thread=Module[\"_emscripten_sync_run_in_main_thread\"]=Module[\"asm\"][\"ib\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_0=Module[\"_emscripten_sync_run_in_main_thread_0\"]=function(){return(_emscripten_sync_run_in_main_thread_0=Module[\"_emscripten_sync_run_in_main_thread_0\"]=Module[\"asm\"][\"jb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_1=Module[\"_emscripten_sync_run_in_main_thread_1\"]=function(){return(_emscripten_sync_run_in_main_thread_1=Module[\"_emscripten_sync_run_in_main_thread_1\"]=Module[\"asm\"][\"kb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_2=Module[\"_emscripten_sync_run_in_main_thread_2\"]=function(){return(_emscripten_sync_run_in_main_thread_2=Module[\"_emscripten_sync_run_in_main_thread_2\"]=Module[\"asm\"][\"lb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_xprintf_varargs=Module[\"_emscripten_sync_run_in_main_thread_xprintf_varargs\"]=function(){return(_emscripten_sync_run_in_main_thread_xprintf_varargs=Module[\"_emscripten_sync_run_in_main_thread_xprintf_varargs\"]=Module[\"asm\"][\"mb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_3=Module[\"_emscripten_sync_run_in_main_thread_3\"]=function(){return(_emscripten_sync_run_in_main_thread_3=Module[\"_emscripten_sync_run_in_main_thread_3\"]=Module[\"asm\"][\"nb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_4=Module[\"_emscripten_sync_run_in_main_thread_4\"]=function(){return(_emscripten_sync_run_in_main_thread_4=Module[\"_emscripten_sync_run_in_main_thread_4\"]=Module[\"asm\"][\"ob\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_5=Module[\"_emscripten_sync_run_in_main_thread_5\"]=function(){return(_emscripten_sync_run_in_main_thread_5=Module[\"_emscripten_sync_run_in_main_thread_5\"]=Module[\"asm\"][\"pb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_6=Module[\"_emscripten_sync_run_in_main_thread_6\"]=function(){return(_emscripten_sync_run_in_main_thread_6=Module[\"_emscripten_sync_run_in_main_thread_6\"]=Module[\"asm\"][\"qb\"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_7=Module[\"_emscripten_sync_run_in_main_thread_7\"]=function(){return(_emscripten_sync_run_in_main_thread_7=Module[\"_emscripten_sync_run_in_main_thread_7\"]=Module[\"asm\"][\"rb\"]).apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module[\"_emscripten_run_in_main_runtime_thread_js\"]=function(){return(_emscripten_run_in_main_runtime_thread_js=Module[\"_emscripten_run_in_main_runtime_thread_js\"]=Module[\"asm\"][\"sb\"]).apply(null,arguments)};var _emscripten_async_queue_on_thread_=Module[\"_emscripten_async_queue_on_thread_\"]=function(){return(_emscripten_async_queue_on_thread_=Module[\"_emscripten_async_queue_on_thread_\"]=Module[\"asm\"][\"tb\"]).apply(null,arguments)};var _emscripten_tls_init=Module[\"_emscripten_tls_init\"]=function(){return(_emscripten_tls_init=Module[\"_emscripten_tls_init\"]=Module[\"asm\"][\"ub\"]).apply(null,arguments)};var stackSave=Module[\"stackSave\"]=function(){return(stackSave=Module[\"stackSave\"]=Module[\"asm\"][\"vb\"]).apply(null,arguments)};var stackAlloc=Module[\"stackAlloc\"]=function(){return(stackAlloc=Module[\"stackAlloc\"]=Module[\"asm\"][\"wb\"]).apply(null,arguments)};var stackRestore=Module[\"stackRestore\"]=function(){return(stackRestore=Module[\"stackRestore\"]=Module[\"asm\"][\"xb\"]).apply(null,arguments)};var dynCall_vi=Module[\"dynCall_vi\"]=function(){return(dynCall_vi=Module[\"dynCall_vi\"]=Module[\"asm\"][\"yb\"]).apply(null,arguments)};var dynCall_v=Module[\"dynCall_v\"]=function(){return(dynCall_v=Module[\"dynCall_v\"]=Module[\"asm\"][\"zb\"]).apply(null,arguments)};var dynCall_ii=Module[\"dynCall_ii\"]=function(){return(dynCall_ii=Module[\"dynCall_ii\"]=Module[\"asm\"][\"Ab\"]).apply(null,arguments)};Module[\"asm\"]=asm;Module[\"cwrap\"]=cwrap;Module[\"PThread\"]=PThread;Module[\"PThread\"]=PThread;Module[\"_pthread_self\"]=_pthread_self;Module[\"wasmMemory\"]=wasmMemory;Module[\"ExitStatus\"]=ExitStatus;var calledRun;Module[\"then\"]=function(func){if(calledRun){func(Module)}else{var old=Module[\"onRuntimeInitialized\"];Module[\"onRuntimeInitialized\"]=function(){if(old)old();func(Module)}}return Module};function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}Module[\"run\"]=run;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}if(!ENVIRONMENT_IS_PTHREAD)noExitRuntime=true;if(!ENVIRONMENT_IS_PTHREAD)run();\n\n\n return WasmBackendModuleThreadedSimd\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n module.exports = WasmBackendModuleThreadedSimd;\n else if (typeof define === 'function' && define['amd'])\n define([], function() { return WasmBackendModuleThreadedSimd; });\n else if (typeof exports === 'object')\n exports[\"WasmBackendModuleThreadedSimd\"] = WasmBackendModuleThreadedSimd;\n ", "\nvar WasmBackendModule = (function() {\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n return (\nfunction(WasmBackendModule) {\n WasmBackendModule = WasmBackendModule || {};\n\nvar Module=typeof WasmBackendModule!==\"undefined\"?WasmBackendModule:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram=\"./this.program\";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require(\"path\").dirname(scriptDirectory)+\"/\"}else{scriptDirectory=__dirname+\"/\"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);return nodeFS[\"readFileSync\"](filename,binary?null:\"utf8\")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process[\"argv\"].length>1){thisProgram=process[\"argv\"][1].replace(/\\\\/g,\"/\")}arguments_=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process[\"on\"](\"unhandledRejection\",abort);quit_=function(status){process[\"exit\"](status)};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){arguments_=scriptArgs}else if(typeof arguments!=\"undefined\"){arguments_=arguments}if(typeof quit===\"function\"){quit_=function(status){quit(status)}}if(typeof print!==\"undefined\"){if(typeof console===\"undefined\")console={};console.log=print;console.warn=console.error=typeof printErr!==\"undefined\"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];var noExitRuntime;if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(typeof WebAssembly!==\"object\"){err(\"no native wasm support detected\")}var wasmMemory;var wasmTable=new WebAssembly.Table({\"initial\":149,\"maximum\":149+0,\"element\":\"anyfunc\"});var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={\"string\":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},\"array\":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\")return UTF8ToString(ret);if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str=\"\";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\"}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var INITIAL_INITIAL_MEMORY=Module[\"INITIAL_MEMORY\"]||16777216;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback(Module);continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func)}else{Module[\"dynCall_vi\"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_ceil=Math.ceil;var Math_floor=Math.floor;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}what+=\"\";out(what);err(what);ABORT=true;EXITSTATUS=1;what=\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix=\"file://\";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile=\"tfjs-backend-wasm.wasm\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw\"both async and sync fetching of the wasm failed\"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch===\"function\"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\"}return response[\"arrayBuffer\"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={\"env\":asmLibraryArg,\"wasi_snapshot_preview1\":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module[\"asm\"]=exports;wasmMemory=exports[\"memory\"];updateGlobalBufferAndViews(wasmMemory.buffer);removeRunDependency(\"wasm-instantiate\")}addRunDependency(\"wasm-instantiate\");function receiveInstantiatedSource(output){receiveInstance(output[\"instance\"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming===\"function\"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch===\"function\"){fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module[\"instantiateWasm\"]){try{var exports=Module[\"instantiateWasm\"](info,receiveInstance);return exports}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);return false}}instantiateAsync();return{}}__ATINIT__.push();function _emscripten_notify_memory_growth(memoryIndex){updateGlobalBufferAndViews(wasmMemory.buffer)}var PATH={splitPath:function(filename){var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1)}else if(last===\"..\"){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)===\"/\",trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p}),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\"}if(path&&trailingSlash){path+=\"/\"}return(isAbsolute?\"/\":\"\")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\"}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path===\"/\")return\"/\";var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join(\"/\"))},join2:function(l,r){return PATH.normalize(l+\"/\"+r)}};var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _exit(status){exit(status)}function _proc_exit(code){_exit(code)}function _roundf(d){d=+d;return d>=+0?+Math_floor(d+ +.5):+Math_ceil(d-+.5)}var asmLibraryArg={\"emscripten_notify_memory_growth\":_emscripten_notify_memory_growth,\"fd_close\":_fd_close,\"fd_seek\":_fd_seek,\"fd_write\":_fd_write,\"proc_exit\":_proc_exit,\"roundf\":_roundf};var asm=createWasm();Module[\"asm\"]=asm;var _init=Module[\"_init\"]=function(){return(_init=Module[\"_init\"]=Module[\"asm\"][\"init\"]).apply(null,arguments)};var _register_tensor=Module[\"_register_tensor\"]=function(){return(_register_tensor=Module[\"_register_tensor\"]=Module[\"asm\"][\"register_tensor\"]).apply(null,arguments)};var _dispose_data=Module[\"_dispose_data\"]=function(){return(_dispose_data=Module[\"_dispose_data\"]=Module[\"asm\"][\"dispose_data\"]).apply(null,arguments)};var _dispose=Module[\"_dispose\"]=function(){return(_dispose=Module[\"_dispose\"]=Module[\"asm\"][\"dispose\"]).apply(null,arguments)};var _Abs=Module[\"_Abs\"]=function(){return(_Abs=Module[\"_Abs\"]=Module[\"asm\"][\"Abs\"]).apply(null,arguments)};var _Add=Module[\"_Add\"]=function(){return(_Add=Module[\"_Add\"]=Module[\"asm\"][\"Add\"]).apply(null,arguments)};var _AddN=Module[\"_AddN\"]=function(){return(_AddN=Module[\"_AddN\"]=Module[\"asm\"][\"AddN\"]).apply(null,arguments)};var _ArgMax=Module[\"_ArgMax\"]=function(){return(_ArgMax=Module[\"_ArgMax\"]=Module[\"asm\"][\"ArgMax\"]).apply(null,arguments)};var _AvgPool=Module[\"_AvgPool\"]=function(){return(_AvgPool=Module[\"_AvgPool\"]=Module[\"asm\"][\"AvgPool\"]).apply(null,arguments)};var _BatchMatMul=Module[\"_BatchMatMul\"]=function(){return(_BatchMatMul=Module[\"_BatchMatMul\"]=Module[\"asm\"][\"BatchMatMul\"]).apply(null,arguments)};var _ClipByValue=Module[\"_ClipByValue\"]=function(){return(_ClipByValue=Module[\"_ClipByValue\"]=Module[\"asm\"][\"ClipByValue\"]).apply(null,arguments)};var _Conv2D=Module[\"_Conv2D\"]=function(){return(_Conv2D=Module[\"_Conv2D\"]=Module[\"asm\"][\"Conv2D\"]).apply(null,arguments)};var _Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=function(){return(_Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=Module[\"asm\"][\"Conv2DBackpropInput\"]).apply(null,arguments)};var _Cos=Module[\"_Cos\"]=function(){return(_Cos=Module[\"_Cos\"]=Module[\"asm\"][\"Cos\"]).apply(null,arguments)};var _CropAndResize=Module[\"_CropAndResize\"]=function(){return(_CropAndResize=Module[\"_CropAndResize\"]=Module[\"asm\"][\"CropAndResize\"]).apply(null,arguments)};var _Cumsum=Module[\"_Cumsum\"]=function(){return(_Cumsum=Module[\"_Cumsum\"]=Module[\"asm\"][\"Cumsum\"]).apply(null,arguments)};var _DepthToSpace=Module[\"_DepthToSpace\"]=function(){return(_DepthToSpace=Module[\"_DepthToSpace\"]=Module[\"asm\"][\"DepthToSpace\"]).apply(null,arguments)};var _DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=function(){return(_DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=Module[\"asm\"][\"DepthwiseConv2dNative\"]).apply(null,arguments)};var _Equal=Module[\"_Equal\"]=function(){return(_Equal=Module[\"_Equal\"]=Module[\"asm\"][\"Equal\"]).apply(null,arguments)};var _Exp=Module[\"_Exp\"]=function(){return(_Exp=Module[\"_Exp\"]=Module[\"asm\"][\"Exp\"]).apply(null,arguments)};var _FlipLeftRight=Module[\"_FlipLeftRight\"]=function(){return(_FlipLeftRight=Module[\"_FlipLeftRight\"]=Module[\"asm\"][\"FlipLeftRight\"]).apply(null,arguments)};var _Floor=Module[\"_Floor\"]=function(){return(_Floor=Module[\"_Floor\"]=Module[\"asm\"][\"Floor\"]).apply(null,arguments)};var _FloorDiv=Module[\"_FloorDiv\"]=function(){return(_FloorDiv=Module[\"_FloorDiv\"]=Module[\"asm\"][\"FloorDiv\"]).apply(null,arguments)};var _FusedBatchNorm=Module[\"_FusedBatchNorm\"]=function(){return(_FusedBatchNorm=Module[\"_FusedBatchNorm\"]=Module[\"asm\"][\"FusedBatchNorm\"]).apply(null,arguments)};var _FusedConv2D=Module[\"_FusedConv2D\"]=function(){return(_FusedConv2D=Module[\"_FusedConv2D\"]=Module[\"asm\"][\"FusedConv2D\"]).apply(null,arguments)};var _FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=function(){return(_FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=Module[\"asm\"][\"FusedDepthwiseConv2D\"]).apply(null,arguments)};var _Gather=Module[\"_Gather\"]=function(){return(_Gather=Module[\"_Gather\"]=Module[\"asm\"][\"Gather\"]).apply(null,arguments)};var _GatherNd=Module[\"_GatherNd\"]=function(){return(_GatherNd=Module[\"_GatherNd\"]=Module[\"asm\"][\"GatherNd\"]).apply(null,arguments)};var _Greater=Module[\"_Greater\"]=function(){return(_Greater=Module[\"_Greater\"]=Module[\"asm\"][\"Greater\"]).apply(null,arguments)};var _GreaterEqual=Module[\"_GreaterEqual\"]=function(){return(_GreaterEqual=Module[\"_GreaterEqual\"]=Module[\"asm\"][\"GreaterEqual\"]).apply(null,arguments)};var _LeakyRelu=Module[\"_LeakyRelu\"]=function(){return(_LeakyRelu=Module[\"_LeakyRelu\"]=Module[\"asm\"][\"LeakyRelu\"]).apply(null,arguments)};var _Less=Module[\"_Less\"]=function(){return(_Less=Module[\"_Less\"]=Module[\"asm\"][\"Less\"]).apply(null,arguments)};var _LessEqual=Module[\"_LessEqual\"]=function(){return(_LessEqual=Module[\"_LessEqual\"]=Module[\"asm\"][\"LessEqual\"]).apply(null,arguments)};var _Log=Module[\"_Log\"]=function(){return(_Log=Module[\"_Log\"]=Module[\"asm\"][\"Log\"]).apply(null,arguments)};var _LogicalAnd=Module[\"_LogicalAnd\"]=function(){return(_LogicalAnd=Module[\"_LogicalAnd\"]=Module[\"asm\"][\"LogicalAnd\"]).apply(null,arguments)};var _Max=Module[\"_Max\"]=function(){return(_Max=Module[\"_Max\"]=Module[\"asm\"][\"Max\"]).apply(null,arguments)};var _MaxPool=Module[\"_MaxPool\"]=function(){return(_MaxPool=Module[\"_MaxPool\"]=Module[\"asm\"][\"MaxPool\"]).apply(null,arguments)};var _Maximum=Module[\"_Maximum\"]=function(){return(_Maximum=Module[\"_Maximum\"]=Module[\"asm\"][\"Maximum\"]).apply(null,arguments)};var _Mean=Module[\"_Mean\"]=function(){return(_Mean=Module[\"_Mean\"]=Module[\"asm\"][\"Mean\"]).apply(null,arguments)};var _Min=Module[\"_Min\"]=function(){return(_Min=Module[\"_Min\"]=Module[\"asm\"][\"Min\"]).apply(null,arguments)};var _Minimum=Module[\"_Minimum\"]=function(){return(_Minimum=Module[\"_Minimum\"]=Module[\"asm\"][\"Minimum\"]).apply(null,arguments)};var _Multiply=Module[\"_Multiply\"]=function(){return(_Multiply=Module[\"_Multiply\"]=Module[\"asm\"][\"Multiply\"]).apply(null,arguments)};var _Neg=Module[\"_Neg\"]=function(){return(_Neg=Module[\"_Neg\"]=Module[\"asm\"][\"Neg\"]).apply(null,arguments)};var _NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=function(){return(_NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=Module[\"asm\"][\"NonMaxSuppressionV3\"]).apply(null,arguments)};var _NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=function(){return(_NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=Module[\"asm\"][\"NonMaxSuppressionV4\"]).apply(null,arguments)};var _NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=function(){return(_NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=Module[\"asm\"][\"NonMaxSuppressionV5\"]).apply(null,arguments)};var _NotEqual=Module[\"_NotEqual\"]=function(){return(_NotEqual=Module[\"_NotEqual\"]=Module[\"asm\"][\"NotEqual\"]).apply(null,arguments)};var _OneHot=Module[\"_OneHot\"]=function(){return(_OneHot=Module[\"_OneHot\"]=Module[\"asm\"][\"OneHot\"]).apply(null,arguments)};var _PadV2=Module[\"_PadV2\"]=function(){return(_PadV2=Module[\"_PadV2\"]=Module[\"asm\"][\"PadV2\"]).apply(null,arguments)};var _Pow=Module[\"_Pow\"]=function(){return(_Pow=Module[\"_Pow\"]=Module[\"asm\"][\"Pow\"]).apply(null,arguments)};var _Prelu=Module[\"_Prelu\"]=function(){return(_Prelu=Module[\"_Prelu\"]=Module[\"asm\"][\"Prelu\"]).apply(null,arguments)};var _Prod=Module[\"_Prod\"]=function(){return(_Prod=Module[\"_Prod\"]=Module[\"asm\"][\"Prod\"]).apply(null,arguments)};var _RealDiv=Module[\"_RealDiv\"]=function(){return(_RealDiv=Module[\"_RealDiv\"]=Module[\"asm\"][\"RealDiv\"]).apply(null,arguments)};var _Relu=Module[\"_Relu\"]=function(){return(_Relu=Module[\"_Relu\"]=Module[\"asm\"][\"Relu\"]).apply(null,arguments)};var _Relu6=Module[\"_Relu6\"]=function(){return(_Relu6=Module[\"_Relu6\"]=Module[\"asm\"][\"Relu6\"]).apply(null,arguments)};var _ResizeBilinear=Module[\"_ResizeBilinear\"]=function(){return(_ResizeBilinear=Module[\"_ResizeBilinear\"]=Module[\"asm\"][\"ResizeBilinear\"]).apply(null,arguments)};var _Reverse=Module[\"_Reverse\"]=function(){return(_Reverse=Module[\"_Reverse\"]=Module[\"asm\"][\"Reverse\"]).apply(null,arguments)};var _RotateWithOffset=Module[\"_RotateWithOffset\"]=function(){return(_RotateWithOffset=Module[\"_RotateWithOffset\"]=Module[\"asm\"][\"RotateWithOffset\"]).apply(null,arguments)};var _Rsqrt=Module[\"_Rsqrt\"]=function(){return(_Rsqrt=Module[\"_Rsqrt\"]=Module[\"asm\"][\"Rsqrt\"]).apply(null,arguments)};var _ScatterNd=Module[\"_ScatterNd\"]=function(){return(_ScatterNd=Module[\"_ScatterNd\"]=Module[\"asm\"][\"ScatterNd\"]).apply(null,arguments)};var _SelectV2=Module[\"_SelectV2\"]=function(){return(_SelectV2=Module[\"_SelectV2\"]=Module[\"asm\"][\"SelectV2\"]).apply(null,arguments)};var _Sigmoid=Module[\"_Sigmoid\"]=function(){return(_Sigmoid=Module[\"_Sigmoid\"]=Module[\"asm\"][\"Sigmoid\"]).apply(null,arguments)};var _Sin=Module[\"_Sin\"]=function(){return(_Sin=Module[\"_Sin\"]=Module[\"asm\"][\"Sin\"]).apply(null,arguments)};var _Softmax=Module[\"_Softmax\"]=function(){return(_Softmax=Module[\"_Softmax\"]=Module[\"asm\"][\"Softmax\"]).apply(null,arguments)};var _Sqrt=Module[\"_Sqrt\"]=function(){return(_Sqrt=Module[\"_Sqrt\"]=Module[\"asm\"][\"Sqrt\"]).apply(null,arguments)};var _Square=Module[\"_Square\"]=function(){return(_Square=Module[\"_Square\"]=Module[\"asm\"][\"Square\"]).apply(null,arguments)};var _SquaredDifference=Module[\"_SquaredDifference\"]=function(){return(_SquaredDifference=Module[\"_SquaredDifference\"]=Module[\"asm\"][\"SquaredDifference\"]).apply(null,arguments)};var _StridedSlice=Module[\"_StridedSlice\"]=function(){return(_StridedSlice=Module[\"_StridedSlice\"]=Module[\"asm\"][\"StridedSlice\"]).apply(null,arguments)};var _Sub=Module[\"_Sub\"]=function(){return(_Sub=Module[\"_Sub\"]=Module[\"asm\"][\"Sub\"]).apply(null,arguments)};var _Sum=Module[\"_Sum\"]=function(){return(_Sum=Module[\"_Sum\"]=Module[\"asm\"][\"Sum\"]).apply(null,arguments)};var _Tanh=Module[\"_Tanh\"]=function(){return(_Tanh=Module[\"_Tanh\"]=Module[\"asm\"][\"Tanh\"]).apply(null,arguments)};var _Tile=Module[\"_Tile\"]=function(){return(_Tile=Module[\"_Tile\"]=Module[\"asm\"][\"Tile\"]).apply(null,arguments)};var _TopK=Module[\"_TopK\"]=function(){return(_TopK=Module[\"_TopK\"]=Module[\"asm\"][\"TopK\"]).apply(null,arguments)};var _Transpose=Module[\"_Transpose\"]=function(){return(_Transpose=Module[\"_Transpose\"]=Module[\"asm\"][\"Transpose\"]).apply(null,arguments)};var __FusedMatMul=Module[\"__FusedMatMul\"]=function(){return(__FusedMatMul=Module[\"__FusedMatMul\"]=Module[\"asm\"][\"_FusedMatMul\"]).apply(null,arguments)};var _malloc=Module[\"_malloc\"]=function(){return(_malloc=Module[\"_malloc\"]=Module[\"asm\"][\"malloc\"]).apply(null,arguments)};var _free=Module[\"_free\"]=function(){return(_free=Module[\"_free\"]=Module[\"asm\"][\"free\"]).apply(null,arguments)};var __start=Module[\"__start\"]=function(){return(__start=Module[\"__start\"]=Module[\"asm\"][\"_start\"]).apply(null,arguments)};var stackSave=Module[\"stackSave\"]=function(){return(stackSave=Module[\"stackSave\"]=Module[\"asm\"][\"stackSave\"]).apply(null,arguments)};var stackAlloc=Module[\"stackAlloc\"]=function(){return(stackAlloc=Module[\"stackAlloc\"]=Module[\"asm\"][\"stackAlloc\"]).apply(null,arguments)};var stackRestore=Module[\"stackRestore\"]=function(){return(stackRestore=Module[\"stackRestore\"]=Module[\"asm\"][\"stackRestore\"]).apply(null,arguments)};Module[\"asm\"]=asm;Module[\"cwrap\"]=cwrap;var calledRun;Module[\"then\"]=function(func){if(calledRun){func(Module)}else{var old=Module[\"onRuntimeInitialized\"];Module[\"onRuntimeInitialized\"]=function(){if(old)old();func(Module)}}return Module};function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module[\"__start\"];try{entryFunction();var ret=0;exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e==\"unwind\"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e===\"object\"&&e.stack){toLog=[e,e.stack]}err(\"exception thrown: \"+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();if(shouldRunNow)callMain(args);postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}Module[\"run\"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module[\"onExit\"])Module[\"onExit\"](status)}quit_(status,new ExitStatus(status))}if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}var shouldRunNow=true;if(Module[\"noInitialRun\"])shouldRunNow=false;noExitRuntime=true;run();\n\n\n return WasmBackendModule\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n module.exports = WasmBackendModule;\n else if (typeof define === 'function' && define['amd'])\n define([], function() { return WasmBackendModule; });\n else if (typeof exports === 'object')\n exports[\"WasmBackendModule\"] = WasmBackendModule;\n ", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "export const wasmWorkerContents = 'var threadInfoStruct=0;var selfThreadId=0;var parentThreadId=0;var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(\" \");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(\" \");postMessage({cmd:\"alert\",text:text,threadId:selfThreadId})}var err=threadPrintErr;this.alert=threadAlert;Module[\"instantiateWasm\"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module[\"wasmModule\"],info);Module[\"wasmModule\"]=null;receiveInstance(instance);return instance.exports};this.onmessage=function(e){try{if(e.data.cmd===\"load\"){Module[\"DYNAMIC_BASE\"]=e.data.DYNAMIC_BASE;Module[\"DYNAMICTOP_PTR\"]=e.data.DYNAMICTOP_PTR;Module[\"wasmModule\"]=e.data.wasmModule;Module[\"wasmMemory\"]=e.data.wasmMemory;Module[\"buffer\"]=Module[\"wasmMemory\"].buffer;Module[\"ENVIRONMENT_IS_PTHREAD\"]=true;if(typeof e.data.urlOrBlob===\"string\"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}Module=WasmBackendModuleThreadedSimd(Module);postMessage({\"cmd\":\"loaded\"})}else if(e.data.cmd===\"objectTransfer\"){Module[\"PThread\"].receiveObjectTransfer(e.data)}else if(e.data.cmd===\"run\"){Module[\"__performance_now_clock_drift\"]=performance.now()-e.data.time;threadInfoStruct=e.data.threadInfoStruct;Module[\"__register_pthread_ptr\"](threadInfoStruct,0,0);selfThreadId=e.data.selfThreadId;parentThreadId=e.data.parentThreadId;var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module[\"establishStackSpace\"](top,max);Module[\"_emscripten_tls_init\"]();Module[\"PThread\"].receiveObjectTransfer(e.data);Module[\"PThread\"].setThreadStatus(Module[\"_pthread_self\"](),1);try{var result=Module[\"dynCall_ii\"](e.data.start_routine,e.data.arg);if(!Module[\"getNoExitRuntime\"]())Module[\"PThread\"].threadExit(result)}catch(ex){if(ex===\"Canceled!\"){Module[\"PThread\"].threadCancel()}else if(ex!=\"unwind\"){Atomics.store(Module[\"HEAPU32\"],threadInfoStruct+4>>2,ex instanceof Module[\"ExitStatus\"]?ex.status:-2);Atomics.store(Module[\"HEAPU32\"],threadInfoStruct+0>>2,1);Module[\"_emscripten_futex_wake\"](threadInfoStruct+0,2147483647);if(!(ex instanceof Module[\"ExitStatus\"]))throw ex}}}else if(e.data.cmd===\"cancel\"){if(threadInfoStruct){Module[\"PThread\"].threadCancel()}}else if(e.data.target===\"setimmediate\"){}else if(e.data.cmd===\"processThreadQueue\"){if(threadInfoStruct){Module[\"_emscripten_current_thread_process_queued_calls\"]()}}else{err(\"worker.js received unknown command \"+e.data.cmd);err(e.data)}}catch(ex){err(\"worker.js onmessage() captured an uncaught exception: \"+ex);if(ex.stack)err(ex.stack);throw ex}};if(typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\"){self={location:{href:__filename}};var onmessage=this.onmessage;var nodeWorkerThreads=require(\"worker_threads\");Worker=nodeWorkerThreads.Worker;var parentPort=nodeWorkerThreads.parentPort;parentPort.on(\"message\",function(data){onmessage({data:data})});var nodeFS=require(\"fs\");var nodeRead=function(filename){return nodeFS.readFileSync(filename,\"utf8\")};function globalEval(x){global.require=require;global.Module=Module;eval.call(null,x)}importScripts=function(f){globalEval(nodeRead(f))};postMessage=function(msg){parentPort.postMessage(msg)};if(typeof performance===\"undefined\"){performance={now:function(){return Date.now()}}}}';", null, null, null, "export * from './drawContour';\nexport * from './drawDetections';\nexport * from './drawFaceExpressions';\nexport * from './DrawBox';\nexport * from './DrawFaceLandmarks';\nexport * from './DrawTextField';\n", "import { Point } from '../classes/index';\n\nexport function drawContour(\n ctx: CanvasRenderingContext2D,\n points: Point[],\n isClosed: boolean = false,\n) {\n ctx.beginPath();\n\n points.slice(1).forEach(({ x, y }, prevIdx) => {\n const from = points[prevIdx];\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(x, y);\n });\n\n if (isClosed) {\n const from = points[points.length - 1];\n const to = points[0];\n if (!from || !to) {\n return;\n }\n\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n }\n\n ctx.stroke();\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Point } from '../classes/index';\nimport { Dimensions, IDimensions } from '../classes/Dimensions';\n\nexport function isTensor(tensor: any, dim: number) {\n return tensor instanceof tf.Tensor && tensor.shape.length === dim;\n}\n\nexport function isTensor1D(tensor: any): tensor is tf.Tensor1D {\n return isTensor(tensor, 1);\n}\n\nexport function isTensor2D(tensor: any): tensor is tf.Tensor2D {\n return isTensor(tensor, 2);\n}\n\nexport function isTensor3D(tensor: any): tensor is tf.Tensor3D {\n return isTensor(tensor, 3);\n}\n\nexport function isTensor4D(tensor: any): tensor is tf.Tensor4D {\n return isTensor(tensor, 4);\n}\n\nexport function isFloat(num: number) {\n return num % 1 !== 0;\n}\n\nexport function isEven(num: number) {\n return num % 2 === 0;\n}\n\nexport function round(num: number, prec: number = 2) {\n const f = 10 ** prec;\n return Math.floor(num * f) / f;\n}\n\nexport function isDimensions(obj: any): boolean {\n return obj && obj.width && obj.height;\n}\n\nexport function computeReshapedDimensions({ width, height }: IDimensions, inputSize: number) {\n const scale = inputSize / Math.max(height, width);\n return new Dimensions(Math.round(width * scale), Math.round(height * scale));\n}\n\nexport function getCenterPoint(pts: Point[]): Point {\n return pts.reduce((sum, pt) => sum.add(pt), new Point(0, 0))\n .div(new Point(pts.length, pts.length));\n}\n\nexport function range(num: number, start: number, step: number): number[] {\n return Array(num).fill(0).map((_, i) => start + (i * step));\n}\n\nexport function isValidNumber(num: any) {\n // eslint-disable-next-line no-mixed-operators\n return !!num && (num !== Infinity) && (num !== -Infinity) && !Number.isNaN(num) || num === 0;\n}\n\nexport function isValidProbablitiy(num: any) {\n return isValidNumber(num) && num >= 0 && num <= 1.0;\n}\n", "import { isValidNumber } from '../utils/index';\n\nexport interface IDimensions {\n width: number\n height: number\n}\n\nexport class Dimensions implements IDimensions {\n private _width: number\n\n private _height: number\n\n constructor(width: number, height: number) {\n if (!isValidNumber(width) || !isValidNumber(height)) {\n throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({ width, height })}`);\n }\n\n this._width = width;\n this._height = height;\n }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public reverse(): Dimensions {\n return new Dimensions(1 / this.width, 1 / this.height);\n }\n}\n", "export interface IPoint {\n x: number\n y: number\n}\n\nexport class Point implements IPoint {\n private _x: number\n\n private _y: number\n\n constructor(x: number, y: number) {\n this._x = x;\n this._y = y;\n }\n\n get x(): number { return this._x; }\n\n get y(): number { return this._y; }\n\n public add(pt: IPoint): Point {\n return new Point(this.x + pt.x, this.y + pt.y);\n }\n\n public sub(pt: IPoint): Point {\n return new Point(this.x - pt.x, this.y - pt.y);\n }\n\n public mul(pt: IPoint): Point {\n return new Point(this.x * pt.x, this.y * pt.y);\n }\n\n public div(pt: IPoint): Point {\n return new Point(this.x / pt.x, this.y / pt.y);\n }\n\n public abs(): Point {\n return new Point(Math.abs(this.x), Math.abs(this.y));\n }\n\n public magnitude(): number {\n return Math.sqrt((this.x ** 2) + (this.y ** 2));\n }\n\n public floor(): Point {\n return new Point(Math.floor(this.x), Math.floor(this.y));\n }\n}\n", "import { isDimensions, isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { IDimensions } from './Dimensions';\nimport { Point } from './Point';\nimport { IRect } from './Rect';\n\nexport class Box implements IBoundingBox, IRect {\n public static isRect(rect: any): boolean {\n return !!rect && [rect.x, rect.y, rect.width, rect.height].every(isValidNumber);\n }\n\n public static assertIsValidBox(box: any, callee: string, allowNegativeDimensions: boolean = false) {\n if (!Box.isRect(box)) {\n throw new Error(`${callee} - invalid box: ${JSON.stringify(box)}, expected object with properties x, y, width, height`);\n }\n\n if (!allowNegativeDimensions && (box.width < 0 || box.height < 0)) {\n throw new Error(`${callee} - width (${box.width}) and height (${box.height}) must be positive numbers`);\n }\n }\n\n private _x: number\n\n private _y: number\n\n private _width: number\n\n private _height: number\n\n constructor(_box: IBoundingBox | IRect, allowNegativeDimensions: boolean = true) {\n const box = (_box || {}) as any;\n\n const isBbox = [box.left, box.top, box.right, box.bottom].every(isValidNumber);\n const isRect = [box.x, box.y, box.width, box.height].every(isValidNumber);\n\n if (!isRect && !isBbox) {\n throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(box)}`);\n }\n\n const [x, y, width, height] = isRect\n ? [box.x, box.y, box.width, box.height]\n : [box.left, box.top, box.right - box.left, box.bottom - box.top];\n\n Box.assertIsValidBox({\n x, y, width, height,\n }, 'Box.constructor', allowNegativeDimensions);\n\n this._x = x;\n this._y = y;\n this._width = width;\n this._height = height;\n }\n\n public get x(): number { return this._x; }\n\n public get y(): number { return this._y; }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public get left(): number { return this.x; }\n\n public get top(): number { return this.y; }\n\n public get right(): number { return this.x + this.width; }\n\n public get bottom(): number { return this.y + this.height; }\n\n public get area(): number { return this.width * this.height; }\n\n public get topLeft(): Point { return new Point(this.left, this.top); }\n\n public get topRight(): Point { return new Point(this.right, this.top); }\n\n public get bottomLeft(): Point { return new Point(this.left, this.bottom); }\n\n public get bottomRight(): Point { return new Point(this.right, this.bottom); }\n\n public round(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.round(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public floor(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.floor(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public toSquare(): Box {\n let {\n x, y, width, height,\n } = this;\n const diff = Math.abs(width - height);\n if (width < height) {\n x -= (diff / 2);\n width += diff;\n }\n if (height < width) {\n y -= (diff / 2);\n height += diff;\n }\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public rescale(s: IDimensions | number): Box {\n const scaleX = isDimensions(s) ? (s as IDimensions).width : s as number;\n const scaleY = isDimensions(s) ? (s as IDimensions).height : s as number;\n return new Box({\n x: this.x * scaleX,\n y: this.y * scaleY,\n width: this.width * scaleX,\n height: this.height * scaleY,\n });\n }\n\n public pad(padX: number, padY: number): Box {\n const [x, y, width, height] = [\n this.x - (padX / 2),\n this.y - (padY / 2),\n this.width + padX,\n this.height + padY,\n ];\n return new Box({\n x, y, width, height,\n });\n }\n\n public clipAtImageBorders(imgWidth: number, imgHeight: number): Box {\n const {\n x, y, right, bottom,\n } = this;\n const clippedX = Math.max(x, 0);\n const clippedY = Math.max(y, 0);\n\n const newWidth = right - clippedX;\n const newHeight = bottom - clippedY;\n const clippedWidth = Math.min(newWidth, imgWidth - clippedX);\n const clippedHeight = Math.min(newHeight, imgHeight - clippedY);\n\n return (new Box({\n x: clippedX, y: clippedY, width: clippedWidth, height: clippedHeight,\n })).floor();\n }\n\n public shift(sx: number, sy: number): Box {\n const { width, height } = this;\n const x = this.x + sx;\n const y = this.y + sy;\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public padAtBorders(imageHeight: number, imageWidth: number) {\n const w = this.width + 1;\n const h = this.height + 1;\n\n const dx = 1;\n const dy = 1;\n let edx = w;\n let edy = h;\n\n let x = this.left;\n let y = this.top;\n let ex = this.right;\n let ey = this.bottom;\n\n if (ex > imageWidth) {\n edx = -ex + imageWidth + w;\n ex = imageWidth;\n }\n if (ey > imageHeight) {\n edy = -ey + imageHeight + h;\n ey = imageHeight;\n }\n if (x < 1) {\n edy = 2 - x;\n x = 1;\n }\n if (y < 1) {\n edy = 2 - y;\n y = 1;\n }\n\n return {\n dy, edy, dx, edx, y, ey, x, ex, w, h,\n };\n }\n\n public calibrate(region: Box) {\n return new Box({\n left: this.left + (region.left * this.width),\n top: this.top + (region.top * this.height),\n right: this.right + (region.right * this.width),\n bottom: this.bottom + (region.bottom * this.height),\n }).toSquare().round();\n }\n}\n", "import { Box } from './Box';\n\nexport interface IBoundingBox {\n left: number\n top: number\n right: number\n bottom: number\n}\n\nexport class BoundingBox extends Box implements IBoundingBox {\n constructor(left: number, top: number, right: number, bottom: number, allowNegativeDimensions: boolean = false) {\n super({\n left, top, right, bottom,\n }, allowNegativeDimensions);\n }\n}\n", "import { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { IRect, Rect } from './Rect';\n\nexport class ObjectDetection {\n private _score: number\n\n private _classScore: number\n\n private _className: string\n\n private _box: Rect\n\n private _imageDims: Dimensions\n\n constructor(\n score: number,\n classScore: number,\n className: string,\n relativeBox: IRect,\n imageDims: IDimensions,\n ) {\n this._imageDims = new Dimensions(imageDims.width, imageDims.height);\n this._score = score;\n this._classScore = classScore;\n this._className = className;\n this._box = new Box(relativeBox).rescale(this._imageDims);\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n\n public get className(): string { return this._className; }\n\n public get box(): Box { return this._box; }\n\n public get imageDims(): Dimensions { return this._imageDims; }\n\n public get imageWidth(): number { return this.imageDims.width; }\n\n public get imageHeight(): number { return this.imageDims.height; }\n\n public get relativeBox(): Box { return new Box(this._box).rescale(this.imageDims.reverse()); }\n\n public forSize(width: number, height: number): ObjectDetection {\n return new ObjectDetection(\n this.score,\n this.classScore,\n this.className,\n this.relativeBox,\n { width, height },\n );\n }\n}\n", "import { Box } from './Box';\nimport { IDimensions } from './Dimensions';\nimport { ObjectDetection } from './ObjectDetection';\nimport { Rect } from './Rect';\n\nexport interface IFaceDetecion {\n score: number\n box: Box\n}\n\nexport class FaceDetection extends ObjectDetection implements IFaceDetecion {\n constructor(\n score: number,\n relativeBox: Rect,\n imageDims: IDimensions,\n ) {\n super(score, score, '', relativeBox, imageDims);\n }\n\n public forSize(width: number, height: number): FaceDetection {\n const { score, relativeBox, imageDims } = super.forSize(width, height);\n return new FaceDetection(score, relativeBox, imageDims);\n }\n}\n", "import { Box } from '../classes/Box';\n\nexport function iou(box1: Box, box2: Box, isIOU: boolean = true) {\n const width = Math.max(0.0, Math.min(box1.right, box2.right) - Math.max(box1.left, box2.left));\n const height = Math.max(0.0, Math.min(box1.bottom, box2.bottom) - Math.max(box1.top, box2.top));\n const interSection = width * height;\n\n return isIOU\n ? interSection / (box1.area + box2.area - interSection)\n : interSection / Math.min(box1.area, box2.area);\n}\n", "import { BoundingBox, IPoint } from '../classes/index';\n\nexport function minBbox(pts: IPoint[]): BoundingBox {\n const xs = pts.map((pt) => pt.x);\n const ys = pts.map((pt) => pt.y);\n const minX = xs.reduce((min, x) => (x < min ? x : min), Infinity);\n const minY = ys.reduce((min, y) => (y < min ? y : min), Infinity);\n const maxX = xs.reduce((max, x) => (max < x ? x : max), 0);\n const maxY = ys.reduce((max, y) => (max < y ? y : max), 0);\n\n return new BoundingBox(minX, minY, maxX, maxY);\n}\n", "import { Box } from '../classes/Box';\nimport { iou } from './iou';\n\nexport function nonMaxSuppression(\n boxes: Box[],\n scores: number[],\n iouThreshold: number,\n isIOU: boolean = true,\n): number[] {\n let indicesSortedByScore = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .sort((c1, c2) => c1.score - c2.score)\n .map((c) => c.boxIndex);\n\n const pick: number[] = [];\n\n while (indicesSortedByScore.length > 0) {\n const curr = indicesSortedByScore.pop() as number;\n pick.push(curr);\n\n const indices = indicesSortedByScore;\n\n const outputs: number[] = [];\n for (let i = 0; i < indices.length; i++) {\n const idx = indices[i];\n\n const currBox = boxes[curr];\n const idxBox = boxes[idx];\n\n outputs.push(iou(currBox, idxBox, isIOU));\n }\n\n indicesSortedByScore = indicesSortedByScore.filter(\n (_, j) => outputs[j] <= iouThreshold,\n );\n }\n\n return pick;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nexport function normalize(x: tf.Tensor4D, meanRgb: number[]): tf.Tensor4D {\n return tf.tidy(() => {\n const [r, g, b] = meanRgb;\n const avg_r = tf.fill([...x.shape.slice(0, 3), 1], r, 'float32');\n const avg_g = tf.fill([...x.shape.slice(0, 3), 1], g, 'float32');\n const avg_b = tf.fill([...x.shape.slice(0, 3), 1], b, 'float32');\n const avg_rgb = tf.concat([avg_r, avg_g, avg_b], 3);\n\n return tf.sub(x, avg_rgb);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\n/**\n * Pads the smaller dimension of an image tensor with zeros, such that width === height.\n *\n * @param imgTensor The image tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The padded tensor with width === height.\n */\nexport function padToSquare(\n imgTensor: tf.Tensor4D,\n isCenterImage: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const [height, width] = imgTensor.shape.slice(1);\n if (height === width) {\n return imgTensor;\n }\n\n const dimDiff = Math.abs(height - width);\n const paddingAmount = Math.round(dimDiff * (isCenterImage ? 0.5 : 1));\n const paddingAxis = height > width ? 2 : 1;\n\n const createPaddingTensor = (paddingAmountLocal: number): tf.Tensor => {\n const paddingTensorShape = imgTensor.shape.slice();\n paddingTensorShape[paddingAxis] = paddingAmountLocal;\n return tf.fill(paddingTensorShape, 0, 'float32');\n };\n\n const paddingTensorAppend = createPaddingTensor(paddingAmount);\n const remainingPaddingAmount = dimDiff - (paddingTensorAppend.shape[paddingAxis] as number);\n\n const paddingTensorPrepend = isCenterImage && remainingPaddingAmount\n ? createPaddingTensor(remainingPaddingAmount)\n : null;\n\n const tensorsToStack = [\n paddingTensorPrepend,\n imgTensor,\n paddingTensorAppend,\n ]\n .filter((t) => !!t)\n // .map((t: tf.Tensor) => t.toFloat()) as tf.Tensor4D[]\n .map((t: tf.Tensor) => tf.cast(t, 'float32')) as tf.Tensor4D[];\n return tf.concat(tensorsToStack, paddingAxis);\n });\n}\n", "export function shuffleArray(inputArray: any[]) {\n const array = inputArray.slice();\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const x = array[i];\n array[i] = array[j];\n array[j] = x;\n }\n return array;\n}\n", "export * from './iou';\nexport * from './minBbox';\nexport * from './nonMaxSuppression';\nexport * from './normalize';\nexport * from './padToSquare';\nexport * from './shuffleArray';\n\nexport function sigmoid(x: number) {\n return 1 / (1 + Math.exp(-x));\n}\n\nexport function inverseSigmoid(x: number) {\n return Math.log(x / (1 - x));\n}\n", "import { Box } from './Box';\n\nexport interface IRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport class Rect extends Box implements IRect {\n constructor(x: number, y: number, width: number, height: number, allowNegativeDimensions: boolean = false) {\n super({\n x, y, width, height,\n }, allowNegativeDimensions);\n }\n}\n", "import { minBbox } from '../ops/index';\nimport { getCenterPoint } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { FaceDetection } from './FaceDetection';\nimport { Point } from './Point';\nimport { IRect, Rect } from './Rect';\n\n// face alignment constants\nconst relX = 0.5;\nconst relY = 0.43;\nconst relScale = 0.45;\n\nexport interface IFaceLandmarks {\n positions: Point[]\n shift: Point\n}\n\nexport class FaceLandmarks implements IFaceLandmarks {\n protected _shift: Point\n\n protected _positions: Point[]\n\n protected _imgDims: Dimensions\n\n constructor(\n relativeFaceLandmarkPositions: Point[],\n imgDims: IDimensions,\n shift: Point = new Point(0, 0),\n ) {\n const { width, height } = imgDims;\n this._imgDims = new Dimensions(width, height);\n this._shift = shift;\n this._positions = relativeFaceLandmarkPositions.map(\n (pt) => pt.mul(new Point(width, height)).add(shift),\n );\n }\n\n public get shift(): Point { return new Point(this._shift.x, this._shift.y); }\n\n public get imageWidth(): number { return this._imgDims.width; }\n\n public get imageHeight(): number { return this._imgDims.height; }\n\n public get positions(): Point[] { return this._positions; }\n\n public get relativePositions(): Point[] {\n return this._positions.map(\n (pt) => pt.sub(this._shift).div(new Point(this.imageWidth, this.imageHeight)),\n );\n }\n\n public forSize(width: number, height: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n { width, height },\n );\n }\n\n public shiftBy(x: number, y: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n this._imgDims,\n new Point(x, y),\n );\n }\n\n public shiftByPoint(pt: Point): T {\n return this.shiftBy(pt.x, pt.y);\n }\n\n /**\n * Aligns the face landmarks after face detection from the relative positions of the faces\n * bounding box, or it's current shift. This function should be used to align the face images\n * after face detection has been performed, before they are passed to the face recognition net.\n * This will make the computed face descriptor more accurate.\n *\n * @param detection (optional) The bounding box of the face or the face detection result. If\n * no argument was passed the position of the face landmarks are assumed to be relative to\n * it's current shift.\n * @returns The bounding box of the aligned face.\n */\n public align(\n detection?: FaceDetection | IRect | IBoundingBox | null,\n options: { useDlibAlignment?: boolean, minBoxPadding?: number } = { },\n ): Box {\n if (detection) {\n const box = detection instanceof FaceDetection\n ? detection.box.floor()\n : new Box(detection);\n\n return this.shiftBy(box.x, box.y).align(null, options);\n }\n\n const { useDlibAlignment, minBoxPadding } = { useDlibAlignment: false, minBoxPadding: 0.2, ...options };\n\n if (useDlibAlignment) {\n return this.alignDlib();\n }\n\n return this.alignMinBbox(minBoxPadding);\n }\n\n private alignDlib(): Box {\n const centers = this.getRefPointsForAlignment();\n\n const [leftEyeCenter, rightEyeCenter, mouthCenter] = centers;\n const distToMouth = (pt: Point) => mouthCenter.sub(pt).magnitude();\n const eyeToMouthDist = (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2;\n\n const size = Math.floor(eyeToMouthDist / relScale);\n\n const refPoint = getCenterPoint(centers);\n // TODO: pad in case rectangle is out of image bounds\n const x = Math.floor(Math.max(0, refPoint.x - (relX * size)));\n const y = Math.floor(Math.max(0, refPoint.y - (relY * size)));\n\n return new Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y));\n }\n\n private alignMinBbox(padding: number): Box {\n const box = minBbox(this.positions);\n return box.pad(box.width * padding, box.height * padding);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n throw new Error('getRefPointsForAlignment not implemented by base class');\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks5 extends FaceLandmarks {\n protected getRefPointsForAlignment(): Point[] {\n const pts = this.positions;\n return [\n pts[0],\n pts[1],\n getCenterPoint([pts[3], pts[4]]),\n ];\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks68 extends FaceLandmarks {\n public getJawOutline(): Point[] {\n return this.positions.slice(0, 17);\n }\n\n public getLeftEyeBrow(): Point[] {\n return this.positions.slice(17, 22);\n }\n\n public getRightEyeBrow(): Point[] {\n return this.positions.slice(22, 27);\n }\n\n public getNose(): Point[] {\n return this.positions.slice(27, 36);\n }\n\n public getLeftEye(): Point[] {\n return this.positions.slice(36, 42);\n }\n\n public getRightEye(): Point[] {\n return this.positions.slice(42, 48);\n }\n\n public getMouth(): Point[] {\n return this.positions.slice(48, 68);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n return [\n this.getLeftEye(),\n this.getRightEye(),\n this.getMouth(),\n ].map(getCenterPoint);\n }\n}\n", "import { round } from '../utils/index';\n\nexport interface IFaceMatch {\n label: string\n distance: number\n}\n\nexport class FaceMatch implements IFaceMatch {\n private _label: string\n\n private _distance: number\n\n constructor(label: string, distance: number) {\n this._label = label;\n this._distance = distance;\n }\n\n public get label(): string { return this._label; }\n\n public get distance(): number { return this._distance; }\n\n public toString(withDistance: boolean = true): string {\n return `${this.label}${withDistance ? ` (${round(this.distance)})` : ''}`;\n }\n}\n", "import { isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { IRect } from './Rect';\n\nexport class LabeledBox extends Box {\n public static assertIsValidLabeledBox(box: any, callee: string) {\n Box.assertIsValidBox(box, callee);\n\n if (!isValidNumber(box.label)) {\n throw new Error(`${callee} - expected property label (${box.label}) to be a number`);\n }\n }\n\n private _label: number\n\n constructor(box: IBoundingBox | IRect | any, label: number) {\n super(box);\n this._label = label;\n }\n\n public get label(): number { return this._label; }\n}\n", "export class LabeledFaceDescriptors {\n private _label: string\n\n private _descriptors: Float32Array[]\n\n constructor(label: string, descriptors: Float32Array[]) {\n if (!(typeof label === 'string')) {\n throw new Error('LabeledFaceDescriptors - constructor expected label to be a string');\n }\n\n if (!Array.isArray(descriptors) || descriptors.some((desc) => !(desc instanceof Float32Array))) {\n throw new Error('LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array');\n }\n\n this._label = label;\n this._descriptors = descriptors;\n }\n\n public get label(): string { return this._label; }\n\n public get descriptors(): Float32Array[] { return this._descriptors; }\n\n public toJSON(): any {\n return {\n label: this.label,\n descriptors: this.descriptors.map((d) => Array.from(d)),\n };\n }\n\n public static fromJSON(json: any): LabeledFaceDescriptors {\n const descriptors = json.descriptors.map((d: any) => new Float32Array(d));\n return new LabeledFaceDescriptors(json.label, descriptors);\n }\n}\n", "import { isValidProbablitiy } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { LabeledBox } from './LabeledBox';\nimport { IRect } from './Rect';\n\nexport class PredictedBox extends LabeledBox {\n public static assertIsValidPredictedBox(box: any, callee: string) {\n LabeledBox.assertIsValidLabeledBox(box, callee);\n\n if (\n !isValidProbablitiy(box.score)\n || !isValidProbablitiy(box.classScore)\n ) {\n throw new Error(`${callee} - expected properties score (${box.score}) and (${box.classScore}) to be a number between [0, 1]`);\n }\n }\n\n private _score: number\n\n private _classScore: number\n\n constructor(box: IBoundingBox | IRect | any, label: number, score: number, classScore: number) {\n super(box, label);\n this._score = score;\n this._classScore = classScore;\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\n\nexport type WithFaceDetection = TSource & {\n detection: FaceDetection\n}\n\nexport function isWithFaceDetection(obj: any): obj is WithFaceDetection<{}> {\n return obj.detection instanceof FaceDetection;\n}\n\nexport function extendWithFaceDetection<\n TSource\n>(\n sourceObj: TSource,\n detection: FaceDetection,\n): WithFaceDetection {\n const extension = { detection };\n return { ...sourceObj, ...extension };\n}\n", "import { Environment } from './types';\n\nexport function createBrowserEnv(): Environment {\n const fetch = window.fetch;\n if (!fetch) throw new Error('fetch - missing fetch implementation for browser environment');\n\n const readFile = () => {\n throw new Error('readFile - filesystem not available for browser environment');\n };\n\n return {\n Canvas: HTMLCanvasElement,\n CanvasRenderingContext2D,\n Image: HTMLImageElement,\n ImageData,\n Video: HTMLVideoElement,\n createCanvasElement: () => document.createElement('canvas'),\n createImageElement: () => document.createElement('img'),\n fetch,\n readFile,\n };\n}\n", "import { FileSystem } from './types';\n\nexport function createFileSystem(fs?: any): FileSystem {\n let requireFsError = '';\n\n if (!fs) {\n try {\n // eslint-disable-next-line global-require\n fs = require('fs');\n } catch (err) {\n requireFsError = err.toString();\n }\n }\n\n const readFile = fs\n ? (filePath: string) => new Promise((resolve, reject) => {\n fs.readFile(filePath, (err: any, buffer: Buffer) => (err ? reject(err) : resolve(buffer)));\n })\n : () => {\n throw new Error(`readFile - failed to require fs in nodejs environment with error: ${requireFsError}`);\n };\n\n return {\n readFile,\n };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { createFileSystem } from './createFileSystem';\nimport { Environment } from './types';\n\nexport function createNodejsEnv(): Environment {\n // eslint-disable-next-line dot-notation\n const Canvas = global['Canvas'] || global.HTMLCanvasElement;\n const Image = global.Image || global.HTMLImageElement;\n\n const createCanvasElement = () => {\n if (Canvas) return new Canvas();\n throw new Error('createCanvasElement - missing Canvas implementation for nodejs environment');\n };\n\n const createImageElement = () => {\n if (Image) return new Image();\n throw new Error('createImageElement - missing Image implementation for nodejs environment');\n };\n\n const fetch = global.fetch;\n // if (!fetch) throw new Error('fetch - missing fetch implementation for nodejs environment');\n\n const fileSystem = createFileSystem();\n\n return {\n Canvas: Canvas || class {},\n CanvasRenderingContext2D: global.CanvasRenderingContext2D || class {},\n Image: Image || class {},\n ImageData: global.ImageData || class {},\n Video: global.HTMLVideoElement || class {},\n createCanvasElement,\n createImageElement,\n fetch,\n ...fileSystem,\n };\n}\n", "export function isBrowser(): boolean {\n return typeof window === 'object'\n && typeof document !== 'undefined'\n && typeof HTMLImageElement !== 'undefined'\n && typeof HTMLCanvasElement !== 'undefined'\n && typeof HTMLVideoElement !== 'undefined'\n && typeof ImageData !== 'undefined'\n && typeof CanvasRenderingContext2D !== 'undefined';\n}\n", "import { createBrowserEnv } from './createBrowserEnv';\nimport { createFileSystem } from './createFileSystem';\nimport { createNodejsEnv } from './createNodejsEnv';\nimport { isBrowser } from './isBrowser';\nimport { isNodejs } from './isNodejs';\nimport { Environment } from './types';\n\nlet environment: Environment | null;\n\nfunction getEnv(): Environment {\n if (!environment) {\n throw new Error('getEnv - environment is not defined, check isNodejs() and isBrowser()');\n }\n return environment;\n}\n\nfunction setEnv(env: Environment) {\n environment = env;\n}\n\nfunction initialize() {\n // check for isBrowser() first to prevent electron renderer process\n // to be initialized with wrong environment due to isNodejs() returning true\n if (isBrowser()) return setEnv(createBrowserEnv());\n if (isNodejs()) return setEnv(createNodejsEnv());\n return null;\n}\n\nfunction monkeyPatch(env: Partial) {\n if (!environment) {\n initialize();\n }\n\n if (!environment) {\n throw new Error('monkeyPatch - environment is not defined, check isNodejs() and isBrowser()');\n }\n\n const { Canvas = environment.Canvas, Image = environment.Image } = env;\n environment.Canvas = Canvas;\n environment.Image = Image;\n environment.createCanvasElement = env.createCanvasElement || (() => new Canvas());\n environment.createImageElement = env.createImageElement || (() => new Image());\n\n environment.ImageData = env.ImageData || environment.ImageData;\n environment.Video = env.Video || environment.Video;\n environment.fetch = env.fetch || environment.fetch;\n environment.readFile = env.readFile || environment.readFile;\n}\n\nexport const env = {\n getEnv,\n setEnv,\n initialize,\n createBrowserEnv,\n createFileSystem,\n createNodejsEnv,\n monkeyPatch,\n isBrowser,\n isNodejs,\n};\n\ninitialize();\n\nexport * from './types';\n", "import { env } from '../env/index';\n\nexport function resolveInput(arg: string | any) {\n if (!env.isNodejs() && typeof arg === 'string') {\n return document.getElementById(arg);\n }\n return arg;\n}\n", "import { env } from '../env/index';\nimport { resolveInput } from './resolveInput';\n\nexport function getContext2dOrThrow(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D): CanvasRenderingContext2D {\n const { Canvas, CanvasRenderingContext2D } = env.getEnv();\n\n if (canvasArg instanceof CanvasRenderingContext2D) {\n return canvasArg;\n }\n\n const canvas = resolveInput(canvasArg);\n\n if (!(canvas instanceof Canvas)) {\n throw new Error('resolveContext2d - expected canvas to be of instance of Canvas');\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('resolveContext2d - canvas 2d context is null');\n }\n\n return ctx;\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IDimensions, IPoint } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { resolveInput } from '../dom/resolveInput';\n\n// eslint-disable-next-line no-shadow\nexport enum AnchorPosition {\n // eslint-disable-next-line no-unused-vars\n TOP_LEFT = 'TOP_LEFT',\n // eslint-disable-next-line no-unused-vars\n TOP_RIGHT = 'TOP_RIGHT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_LEFT = 'BOTTOM_LEFT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_RIGHT = 'BOTTOM_RIGHT'\n}\n\nexport interface IDrawTextFieldOptions {\n anchorPosition?: AnchorPosition\n backgroundColor?: string\n fontColor?: string\n fontSize?: number\n fontStyle?: string\n padding?: number\n}\n\nexport class DrawTextFieldOptions implements IDrawTextFieldOptions {\n public anchorPosition: AnchorPosition\n\n public backgroundColor: string\n\n public fontColor: string\n\n public fontSize: number\n\n public fontStyle: string\n\n public padding: number\n\n constructor(options: IDrawTextFieldOptions = {}) {\n const {\n anchorPosition, backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = options;\n this.anchorPosition = anchorPosition || AnchorPosition.TOP_LEFT;\n this.backgroundColor = backgroundColor || 'rgba(0, 0, 0, 0.5)';\n this.fontColor = fontColor || 'rgba(255, 255, 255, 1)';\n this.fontSize = fontSize || 14;\n this.fontStyle = fontStyle || 'Georgia';\n this.padding = padding || 4;\n }\n}\n\nexport class DrawTextField {\n public text: string[]\n\n public anchor : IPoint\n\n public options: DrawTextFieldOptions\n\n constructor(\n text: string | string[] | DrawTextField,\n anchor: IPoint,\n options: IDrawTextFieldOptions = {},\n ) {\n // eslint-disable-next-line no-nested-ternary\n this.text = typeof text === 'string'\n ? [text]\n : (text instanceof DrawTextField ? text.text : text);\n this.anchor = anchor;\n this.options = new DrawTextFieldOptions(options);\n }\n\n measureWidth(ctx: CanvasRenderingContext2D): number {\n const { padding } = this.options;\n return this.text.map((l) => ctx.measureText(l).width).reduce((w0, w1) => (w0 < w1 ? w1 : w0), 0) + (2 * padding);\n }\n\n measureHeight(): number {\n const { fontSize, padding } = this.options;\n return this.text.length * fontSize + (2 * padding);\n }\n\n getUpperLeft(ctx: CanvasRenderingContext2D, canvasDims?: IDimensions): IPoint {\n const { anchorPosition } = this.options;\n const isShiftLeft = anchorPosition === AnchorPosition.BOTTOM_RIGHT || anchorPosition === AnchorPosition.TOP_RIGHT;\n const isShiftTop = anchorPosition === AnchorPosition.BOTTOM_LEFT || anchorPosition === AnchorPosition.BOTTOM_RIGHT;\n\n const textFieldWidth = this.measureWidth(ctx);\n const textFieldHeight = this.measureHeight();\n const x = (isShiftLeft ? this.anchor.x - textFieldWidth : this.anchor.x);\n const y = isShiftTop ? this.anchor.y - textFieldHeight : this.anchor.y;\n\n // adjust anchor if text box exceeds canvas borders\n if (canvasDims) {\n const { width, height } = canvasDims;\n const newX = Math.max(Math.min(x, width - textFieldWidth), 0);\n const newY = Math.max(Math.min(y, height - textFieldHeight), 0);\n return { x: newX, y: newY };\n }\n return { x, y };\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const canvas = resolveInput(canvasArg);\n const ctx = getContext2dOrThrow(canvas);\n\n const {\n backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = this.options;\n\n ctx.font = `${fontSize}px ${fontStyle}`;\n const maxTextWidth = this.measureWidth(ctx);\n const textHeight = this.measureHeight();\n\n ctx.fillStyle = backgroundColor;\n const upperLeft = this.getUpperLeft(ctx, canvas);\n ctx.fillRect(upperLeft.x, upperLeft.y, maxTextWidth, textHeight);\n\n ctx.fillStyle = fontColor;\n this.text.forEach((textLine, i) => {\n const x = padding + upperLeft.x;\n const y = padding + upperLeft.y + ((i + 1) * fontSize);\n ctx.fillText(textLine, x, y);\n });\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { Box, IBoundingBox, IRect } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport {\n AnchorPosition, DrawTextField, DrawTextFieldOptions, IDrawTextFieldOptions,\n} from './DrawTextField';\n\nexport interface IDrawBoxOptions {\n boxColor?: string\n lineWidth?: number\n drawLabelOptions?: IDrawTextFieldOptions\n label?: string\n}\n\nexport class DrawBoxOptions {\n public boxColor: string\n\n public lineWidth: number\n\n public drawLabelOptions: DrawTextFieldOptions\n\n public label?: string\n\n constructor(options: IDrawBoxOptions = {}) {\n const {\n boxColor, lineWidth, label, drawLabelOptions,\n } = options;\n this.boxColor = boxColor || 'rgba(0, 0, 255, 1)';\n this.lineWidth = lineWidth || 2;\n this.label = label;\n\n const defaultDrawLabelOptions = {\n anchorPosition: AnchorPosition.BOTTOM_LEFT,\n backgroundColor: this.boxColor,\n };\n this.drawLabelOptions = new DrawTextFieldOptions({ ...defaultDrawLabelOptions, ...drawLabelOptions });\n }\n}\n\nexport class DrawBox {\n public box: Box\n\n public options: DrawBoxOptions\n\n constructor(\n box: IBoundingBox | IRect,\n options: IDrawBoxOptions = {},\n ) {\n this.box = new Box(box);\n this.options = new DrawBoxOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const { boxColor, lineWidth } = this.options;\n\n const {\n x, y, width, height,\n } = this.box;\n ctx.strokeStyle = boxColor;\n ctx.lineWidth = lineWidth;\n ctx.strokeRect(x, y, width, height);\n\n const { label } = this.options;\n if (label) {\n new DrawTextField([label], { x: x - (lineWidth / 2), y }, this.options.drawLabelOptions).draw(canvasArg);\n }\n }\n}\n", "import { Box, IBoundingBox, IRect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { round } from '../utils/index';\nimport { DrawBox } from './DrawBox';\n\nexport type TDrawDetectionsInput = IRect | IBoundingBox | FaceDetection | WithFaceDetection<{}>\n\nexport function drawDetections(\n canvasArg: string | HTMLCanvasElement,\n detections: TDrawDetectionsInput | Array,\n) {\n const detectionsArray = Array.isArray(detections) ? detections : [detections];\n\n detectionsArray.forEach((det) => {\n // eslint-disable-next-line no-nested-ternary\n const score = det instanceof FaceDetection\n ? det.score\n : (isWithFaceDetection(det) ? det.detection.score : undefined);\n\n // eslint-disable-next-line no-nested-ternary\n const box = det instanceof FaceDetection\n ? det.box\n : (isWithFaceDetection(det) ? det.detection.box : new Box(det));\n\n const label = score ? `${round(score)}` : undefined;\n new DrawBox(box, { label }).draw(canvasArg);\n });\n}\n", "import { env } from '../env/index';\n\nexport function isMediaLoaded(media: HTMLImageElement | HTMLVideoElement) : boolean {\n const { Image, Video } = env.getEnv();\n\n return (media instanceof Image && media.complete)\n || (media instanceof Video && media.readyState >= 3);\n}\n", "import { env } from '../env/index';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function awaitMediaLoaded(media: HTMLImageElement | HTMLVideoElement | HTMLCanvasElement) {\n // eslint-disable-next-line consistent-return\n return new Promise((resolve, reject) => {\n if (media instanceof env.getEnv().Canvas || isMediaLoaded(media)) {\n return resolve(null);\n }\n\n function onError(e: Event) {\n if (!e.currentTarget) return;\n // eslint-disable-next-line no-use-before-define\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n reject(e);\n }\n\n function onLoad(e: Event) {\n if (!e.currentTarget) return;\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n resolve(e);\n }\n\n media.addEventListener('load', onLoad);\n media.addEventListener('error', onError);\n });\n}\n", "import { env } from '../env/index';\n\nexport function bufferToImage(buf: Blob): Promise {\n return new Promise((resolve, reject) => {\n if (!(buf instanceof Blob)) reject(new Error('bufferToImage - expected buf to be of type: Blob'));\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result !== 'string') reject(new Error('bufferToImage - expected reader.result to be a string, in onload'));\n const img = env.getEnv().createImageElement();\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = reader.result as string;\n };\n reader.onerror = reject;\n reader.readAsDataURL(buf);\n });\n}\n", "import { Dimensions, IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\n\nexport function getMediaDimensions(input: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | IDimensions): Dimensions {\n const { Image, Video } = env.getEnv();\n\n if (input instanceof Image) {\n return new Dimensions(input.naturalWidth, input.naturalHeight);\n }\n if (input instanceof Video) {\n return new Dimensions(input.videoWidth, input.videoHeight);\n }\n return new Dimensions(input.width, input.height);\n}\n", "import { IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function createCanvas({ width, height }: IDimensions): HTMLCanvasElement {\n const { createCanvasElement } = env.getEnv();\n const canvas = createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n\nexport function createCanvasFromMedia(media: HTMLImageElement | HTMLVideoElement | ImageData, dims?: IDimensions): HTMLCanvasElement {\n const { ImageData } = env.getEnv();\n\n if (!(media instanceof ImageData) && !isMediaLoaded(media)) {\n throw new Error('createCanvasFromMedia - media has not finished loading yet');\n }\n\n const { width, height } = dims || getMediaDimensions(media);\n const canvas = createCanvas({ width, height });\n\n if (media instanceof ImageData) {\n getContext2dOrThrow(canvas).putImageData(media, 0, 0);\n } else {\n getContext2dOrThrow(canvas).drawImage(media, 0, 0, width, height);\n }\n return canvas;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { env } from '../env/index';\nimport { isTensor4D } from '../utils/index';\n\nexport async function imageTensorToCanvas(\n imgTensor: tf.Tensor,\n canvas?: HTMLCanvasElement,\n): Promise {\n const targetCanvas = canvas || env.getEnv().createCanvasElement();\n\n const [height, width, numChannels] = imgTensor.shape.slice(isTensor4D(imgTensor) ? 1 : 0);\n const imgTensor3D = tf.tidy(() => imgTensor.as3D(height, width, numChannels).toInt());\n await tf.browser.toPixels(imgTensor3D, targetCanvas);\n\n imgTensor3D.dispose();\n\n return targetCanvas;\n}\n", "import { env } from '../env/index';\n\nexport function isMediaElement(input: any) {\n const { Image, Canvas, Video } = env.getEnv();\n\n return input instanceof Image\n || input instanceof Canvas\n || input instanceof Video;\n}\n", "import { env } from '../env/index';\nimport { createCanvas, createCanvasFromMedia } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function imageToSquare(input: HTMLImageElement | HTMLCanvasElement, inputSize: number, centerImage: boolean = false) {\n const { Image, Canvas } = env.getEnv();\n\n if (!(input instanceof Image || input instanceof Canvas)) {\n throw new Error('imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement');\n }\n\n const dims = getMediaDimensions(input);\n const scale = inputSize / Math.max(dims.height, dims.width);\n const width = scale * dims.width;\n const height = scale * dims.height;\n\n const targetCanvas = createCanvas({ width: inputSize, height: inputSize });\n const inputCanvas = input instanceof Canvas ? input : createCanvasFromMedia(input);\n\n const offset = Math.abs(width - height) / 2;\n const dx = centerImage && width < height ? offset : 0;\n const dy = centerImage && height < width ? offset : 0;\n getContext2dOrThrow(targetCanvas).drawImage(inputCanvas, dx, dy, width, height);\n\n return targetCanvas;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Dimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { padToSquare } from '../ops/padToSquare';\nimport {\n computeReshapedDimensions, isTensor3D, isTensor4D, range,\n} from '../utils/index';\nimport { createCanvasFromMedia } from './createCanvas';\nimport { imageToSquare } from './imageToSquare';\nimport { TResolvedNetInput } from './types';\n\nexport class NetInput {\n private _imageTensors: Array = []\n\n private _canvases: HTMLCanvasElement[] = []\n\n private _batchSize: number\n\n private _treatAsBatchInput: boolean = false\n\n private _inputDimensions: number[][] = []\n\n private _inputSize: number\n\n constructor(\n inputs: Array,\n treatAsBatchInput: boolean = false,\n ) {\n if (!Array.isArray(inputs)) {\n throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${inputs}`);\n }\n\n this._treatAsBatchInput = treatAsBatchInput;\n this._batchSize = inputs.length;\n\n inputs.forEach((input, idx) => {\n if (isTensor3D(input)) {\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = input.shape;\n return;\n }\n\n if (isTensor4D(input)) {\n const batchSize = (input as any).shape[0];\n if (batchSize !== 1) {\n throw new Error(`NetInput - tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = (input as any).shape.slice(1);\n return;\n }\n\n const canvas = (input as any) instanceof env.getEnv().Canvas ? input : createCanvasFromMedia(input);\n this._canvases[idx] = canvas;\n this._inputDimensions[idx] = [canvas.height, canvas.width, 3];\n });\n }\n\n public get imageTensors(): Array {\n return this._imageTensors;\n }\n\n public get canvases(): HTMLCanvasElement[] {\n return this._canvases;\n }\n\n public get isBatchInput(): boolean {\n return this.batchSize > 1 || this._treatAsBatchInput;\n }\n\n public get batchSize(): number {\n return this._batchSize;\n }\n\n public get inputDimensions(): number[][] {\n return this._inputDimensions;\n }\n\n public get inputSize(): number | undefined {\n return this._inputSize;\n }\n\n public get reshapedInputDimensions(): Dimensions[] {\n return range(this.batchSize, 0, 1).map(\n (_, batchIdx) => this.getReshapedInputDimensions(batchIdx),\n );\n }\n\n public getInput(batchIdx: number): tf.Tensor3D | tf.Tensor4D | HTMLCanvasElement {\n return this.canvases[batchIdx] || this.imageTensors[batchIdx];\n }\n\n public getInputDimensions(batchIdx: number): number[] {\n return this._inputDimensions[batchIdx];\n }\n\n public getInputHeight(batchIdx: number): number {\n return this._inputDimensions[batchIdx][0];\n }\n\n public getInputWidth(batchIdx: number): number {\n return this._inputDimensions[batchIdx][1];\n }\n\n public getReshapedInputDimensions(batchIdx: number): Dimensions {\n if (typeof this.inputSize !== 'number') {\n throw new Error('getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet');\n }\n\n const width = this.getInputWidth(batchIdx);\n const height = this.getInputHeight(batchIdx);\n return computeReshapedDimensions({ width, height }, this.inputSize);\n }\n\n /**\n * Create a batch tensor from all input canvases and tensors\n * with size [batchSize, inputSize, inputSize, 3].\n *\n * @param inputSize Height and width of the tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The batch tensor.\n */\n public toBatchTensor(inputSize: number, isCenterInputs: boolean = true): tf.Tensor4D {\n this._inputSize = inputSize;\n\n return tf.tidy(() => {\n const inputTensors = range(this.batchSize, 0, 1).map((batchIdx) => {\n const input = this.getInput(batchIdx);\n\n if (input instanceof tf.Tensor) {\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n let imgTensor = isTensor4D(input) ? input : input.expandDims();\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n imgTensor = padToSquare(imgTensor, isCenterInputs);\n\n if (imgTensor.shape[1] !== inputSize || imgTensor.shape[2] !== inputSize) {\n imgTensor = tf.image.resizeBilinear(imgTensor, [inputSize, inputSize]);\n }\n\n return imgTensor.as3D(inputSize, inputSize, 3);\n }\n\n if (input instanceof env.getEnv().Canvas) {\n return tf.browser.fromPixels(imageToSquare(input, inputSize, isCenterInputs));\n }\n\n throw new Error(`toBatchTensor - at batchIdx ${batchIdx}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${input}`);\n });\n\n // const batchTensor = tf.stack(inputTensors.map(t => t.toFloat())).as4D(this.batchSize, inputSize, inputSize, 3)\n const batchTensor = tf.stack(inputTensors.map((t) => tf.cast(t, 'float32'))).as4D(this.batchSize, inputSize, inputSize, 3);\n // const batchTensor = tf.stack(inputTensors.map(t => tf.Tensor.as4D(tf.cast(t, 'float32'))), this.batchSize, inputSize, inputSize, 3);\n\n return batchTensor;\n });\n }\n}\n", "import { isTensor3D, isTensor4D } from '../utils/index';\nimport { awaitMediaLoaded } from './awaitMediaLoaded';\nimport { isMediaElement } from './isMediaElement';\nimport { NetInput } from './NetInput';\nimport { resolveInput } from './resolveInput';\nimport { TNetInput } from './types';\n\n/**\n * Validates the input to make sure, they are valid net inputs and awaits all media elements\n * to be finished loading.\n *\n * @param input The input, which can be a media element or an array of different media elements.\n * @returns A NetInput instance, which can be passed into one of the neural networks.\n */\nexport async function toNetInput(inputs: TNetInput): Promise {\n if (inputs instanceof NetInput) {\n return inputs;\n }\n\n const inputArgArray = Array.isArray(inputs)\n ? inputs\n : [inputs];\n\n if (!inputArgArray.length) {\n throw new Error('toNetInput - empty array passed as input');\n }\n\n const getIdxHint = (idx: number) => (Array.isArray(inputs) ? ` at input index ${idx}:` : '');\n\n const inputArray = inputArgArray.map(resolveInput);\n\n inputArray.forEach((input, i) => {\n if (!isMediaElement(input) && !isTensor3D(input) && !isTensor4D(input)) {\n if (typeof inputArgArray[i] === 'string') {\n throw new Error(`toNetInput -${getIdxHint(i)} string passed, but could not resolve HTMLElement for element id ${inputArgArray[i]}`);\n }\n\n throw new Error(`toNetInput -${getIdxHint(i)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);\n }\n\n if (isTensor4D(input)) {\n // if tf.Tensor4D is passed in the input array, the batch size has to be 1\n const batchSize = input.shape[0];\n if (batchSize !== 1) {\n throw new Error(`toNetInput -${getIdxHint(i)} tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n }\n });\n\n // wait for all media elements being loaded\n await Promise.all(\n inputArray.map((input) => isMediaElement(input) && awaitMediaLoaded(input)),\n );\n\n return new NetInput(inputArray, Array.isArray(inputs));\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { Rect } from '../classes/Rect';\nimport { env } from '../env/index';\nimport { createCanvas } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { imageTensorToCanvas } from './imageTensorToCanvas';\nimport { toNetInput } from './toNetInput';\nimport { TNetInput } from './types';\n\n/**\n * Extracts the image regions containing the detected faces.\n *\n * @param input The image that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns The Canvases of the corresponding image region for each detected face.\n */\nexport async function extractFaces(\n input: TNetInput,\n detections: Array,\n): Promise {\n const { Canvas } = env.getEnv();\n\n let canvas = input as HTMLCanvasElement;\n\n if (!(input instanceof Canvas)) {\n const netInput = await toNetInput(input);\n\n if (netInput.batchSize > 1) {\n throw new Error('extractFaces - batchSize > 1 not supported');\n }\n\n const tensorOrCanvas = netInput.getInput(0);\n canvas = tensorOrCanvas instanceof Canvas\n ? tensorOrCanvas\n : await imageTensorToCanvas(tensorOrCanvas);\n }\n\n const ctx = getContext2dOrThrow(canvas);\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(canvas.width, canvas.height).box.floor()\n : det),\n )\n .map((box) => box.clipAtImageBorders(canvas.width, canvas.height));\n\n return boxes.map(({\n x, y, width, height,\n }) => {\n const faceImg = createCanvas({ width, height });\n getContext2dOrThrow(faceImg)\n .putImageData(ctx.getImageData(x, y, width, height), 0, 0);\n return faceImg;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isTensor3D, isTensor4D } from '../utils/index';\n\n/**\n * Extracts the tensors of the image regions containing the detected faces.\n * Useful if you want to compute the face descriptors for the face images.\n * Using this method is faster then extracting a canvas for each face and\n * converting them to tensors individually.\n *\n * @param imageTensor The image tensor that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns Tensors of the corresponding image region for each detected face.\n */\nexport async function extractFaceTensors(\n imageTensor: tf.Tensor3D | tf.Tensor4D,\n detections: Array,\n): Promise {\n if (!isTensor3D(imageTensor) && !isTensor4D(imageTensor)) {\n throw new Error('extractFaceTensors - expected image tensor to be 3D or 4D');\n }\n\n if (isTensor4D(imageTensor) && imageTensor.shape[0] > 1) {\n throw new Error('extractFaceTensors - batchSize > 1 not supported');\n }\n\n return tf.tidy(() => {\n const [imgHeight, imgWidth, numChannels] = imageTensor.shape.slice(isTensor4D(imageTensor) ? 1 : 0);\n\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(imgWidth, imgHeight).box\n : det),\n )\n .map((box) => box.clipAtImageBorders(imgWidth, imgHeight));\n\n const faceTensors = boxes.map(({\n x, y, width, height,\n }) => tf.slice3d(imageTensor.as3D(imgHeight, imgWidth, numChannels), [y, x, 0], [height, width, numChannels]));\n\n return faceTensors;\n });\n}\n", "import { env } from '../env/index';\n\nexport async function fetchOrThrow(\n url: string,\n // eslint-disable-next-line no-undef\n init?: RequestInit,\n): Promise {\n const { fetch } = env.getEnv();\n const res = await fetch(url, init);\n if (!(res.status < 400)) {\n throw new Error(`failed to fetch: (${res.status}) ${res.statusText}, from url: ${res.url}`);\n }\n return res;\n}\n", "import { bufferToImage } from './bufferToImage';\nimport { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchImage(uri: string): Promise {\n const res = await fetchOrThrow(uri);\n const blob = await (res).blob();\n\n if (!blob.type.startsWith('image/')) {\n throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${blob.type}, for url: ${res.url}`);\n }\n return bufferToImage(blob);\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchJson(uri: string): Promise {\n return (await fetchOrThrow(uri)).json();\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchNetWeights(uri: string): Promise {\n return new Float32Array(await (await fetchOrThrow(uri)).arrayBuffer());\n}\n", "export function getModelUris(uri: string | undefined, defaultModelName: string) {\n const defaultManifestFilename = `${defaultModelName}-weights_manifest.json`;\n\n if (!uri) {\n return {\n modelBaseUri: '',\n manifestUri: defaultManifestFilename,\n };\n }\n\n if (uri === '/') {\n return {\n modelBaseUri: '/',\n manifestUri: `/${defaultManifestFilename}`,\n };\n }\n // eslint-disable-next-line no-nested-ternary\n const protocol = uri.startsWith('http://') ? 'http://' : uri.startsWith('https://') ? 'https://' : '';\n uri = uri.replace(protocol, '');\n\n const parts = uri.split('/').filter((s) => s);\n\n const manifestFile = uri.endsWith('.json')\n ? parts[parts.length - 1]\n : defaultManifestFilename;\n\n let modelBaseUri = protocol + (uri.endsWith('.json') ? parts.slice(0, parts.length - 1) : parts).join('/');\n modelBaseUri = uri.startsWith('/') ? `/${modelBaseUri}` : modelBaseUri;\n\n return {\n modelBaseUri,\n manifestUri: modelBaseUri === '/' ? `/${manifestFile}` : `${modelBaseUri}/${manifestFile}`,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { getModelUris } from '../common/getModelUris';\nimport { fetchJson } from './fetchJson';\n\nexport async function loadWeightMap(\n uri: string | undefined,\n defaultModelName: string,\n): Promise {\n const { manifestUri, modelBaseUri } = getModelUris(uri, defaultModelName);\n const manifest = await fetchJson(manifestUri);\n // if (manifest['weightsManifest']) manifest = manifest['weightsManifest'];\n return tf.io.loadWeights(manifest, modelBaseUri);\n}\n", "import { IDimensions } from '../classes/index';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function matchDimensions(input: IDimensions, reference: IDimensions, useMediaDimensions: boolean = false) {\n const { width, height } = useMediaDimensions\n ? getMediaDimensions(reference)\n : reference;\n input.width = width;\n input.height = height;\n return { width, height };\n}\n", "import * as tf from '../dist/tfjs.esm';\n\nimport { ParamMapping } from './common/index';\nimport { getModelUris } from './common/getModelUris';\nimport { loadWeightMap } from './dom/index';\nimport { env } from './env/index';\n\nexport abstract class NeuralNetwork {\n\n protected _params: TNetParams | undefined = undefined\n protected _paramMappings: ParamMapping[] = []\n\n constructor(protected _name: string) {\n }\n\n public get params(): TNetParams | undefined { return this._params }\n public get paramMappings(): ParamMapping[] { return this._paramMappings }\n public get isLoaded(): boolean { return !!this.params }\n\n public getParamFromPath(paramPath: string): tf.Tensor {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n return obj[objProp]\n }\n\n public reassignParamFromPath(paramPath: string, tensor: tf.Tensor) {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n obj[objProp].dispose()\n obj[objProp] = tensor\n }\n\n public getParamList() {\n return this._paramMappings.map(({ paramPath }) => ({\n path: paramPath,\n tensor: this.getParamFromPath(paramPath)\n }))\n }\n\n public getTrainableParams() {\n return this.getParamList().filter(param => param.tensor instanceof tf.Variable)\n }\n\n public getFrozenParams() {\n return this.getParamList().filter(param => !(param.tensor instanceof tf.Variable))\n }\n\n public variable() {\n this.getFrozenParams().forEach(({ path, tensor }) => {\n this.reassignParamFromPath(path, tensor.variable())\n })\n }\n\n public freeze() {\n this.getTrainableParams().forEach(({ path, tensor: variable }) => {\n const tensor = tf.tensor(variable.dataSync())\n variable.dispose()\n this.reassignParamFromPath(path, tensor)\n })\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.getParamList().forEach(param => {\n if (throwOnRedispose && param.tensor.isDisposed) {\n throw new Error(`param tensor has already been disposed for path ${param.path}`)\n }\n param.tensor.dispose()\n })\n this._params = undefined\n }\n\n public serializeParams(): Float32Array {\n return new Float32Array(\n this.getParamList()\n .map(({ tensor }) => Array.from(tensor.dataSync()) as number[])\n .reduce((flat, arr) => flat.concat(arr))\n )\n }\n\n public async load(weightsOrUrl: Float32Array | string | undefined): Promise {\n if (weightsOrUrl instanceof Float32Array) {\n this.extractWeights(weightsOrUrl)\n return\n }\n\n await this.loadFromUri(weightsOrUrl)\n }\n\n public async loadFromUri(uri: string | undefined) {\n if (uri && typeof uri !== 'string') {\n throw new Error(`${this._name}.loadFromUri - expected model uri`)\n }\n\n const weightMap = await loadWeightMap(uri, this.getDefaultModelName())\n this.loadFromWeightMap(weightMap)\n }\n\n public async loadFromDisk(filePath: string | undefined) {\n if (filePath && typeof filePath !== 'string') {\n throw new Error(`${this._name}.loadFromDisk - expected model file path`)\n }\n\n const { readFile } = env.getEnv()\n\n const { manifestUri, modelBaseUri } = getModelUris(filePath, this.getDefaultModelName())\n\n const fetchWeightsFromDisk = (filePaths: string[]) => Promise.all(\n filePaths.map(filePath => readFile(filePath).then(buf => buf.buffer))\n )\n const loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk)\n const manifest = JSON.parse((await readFile(manifestUri)).toString())\n const weightMap = await loadWeights(manifest, modelBaseUri)\n\n this.loadFromWeightMap(weightMap)\n }\n\n public loadFromWeightMap(weightMap: tf.NamedTensorMap) {\n const {\n paramMappings,\n params\n } = this.extractParamsFromWeigthMap(weightMap)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n public extractWeights(weights: Float32Array) {\n const {\n paramMappings,\n params\n } = this.extractParams(weights)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n private traversePropertyPath(paramPath: string) {\n if (!this.params) {\n throw new Error(`traversePropertyPath - model has no loaded params`)\n }\n\n const result = paramPath.split('/').reduce((res: { nextObj: any, obj?: any, objProp?: string }, objProp) => {\n if (!res.nextObj.hasOwnProperty(objProp)) {\n throw new Error(`traversePropertyPath - object does not have property ${objProp}, for path ${paramPath}`)\n }\n\n return { obj: res.nextObj, objProp, nextObj: res.nextObj[objProp] }\n }, { nextObj: this.params })\n\n const { obj, objProp } = result\n if (!obj || !objProp || !(obj[objProp] instanceof tf.Tensor)) {\n throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${paramPath}`)\n }\n\n return { obj, objProp }\n }\n\n protected abstract getDefaultModelName(): string\n protected abstract extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TNetParams, paramMappings: ParamMapping[] }\n protected abstract extractParams(weights: Float32Array): { params: TNetParams, paramMappings: ParamMapping[] }\n}", "import * as tf from '../../dist/tfjs.esm';\n\nimport { SeparableConvParams } from './types';\n\nexport function depthwiseSeparableConv(\n x: tf.Tensor4D,\n params: SeparableConvParams,\n stride: [number, number],\n): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same');\n out = tf.add(out, params.bias);\n return out;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams, SeparableConvParams } from '../common/index';\nimport { depthwiseSeparableConv } from '../common/depthwiseSeparableConv';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function denseBlock3(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock3Params,\n isFirstLayer: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, [2, 2], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, [2, 2]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n });\n}\n\nexport function denseBlock4(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock4Params,\n isFirstLayer: boolean = false,\n isScaleDown: boolean = true,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, isScaleDown ? [2, 2] : [1, 1], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, isScaleDown ? [2, 2] : [1, 1]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n const in4 = tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n const out4 = depthwiseSeparableConv(in4, denseBlockParams.conv3, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, tf.add(out3, out4)))) as tf.Tensor4D;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams } from './types';\n\nexport function convLayer(\n x: tf.Tensor4D,\n params: ConvParams,\n padding: 'valid' | 'same' = 'same',\n withRelu: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out = tf.add(\n tf.conv2d(x, params.filters, [1, 1], padding),\n params.bias,\n ) as tf.Tensor4D;\n\n return withRelu ? tf.relu(out) : out;\n });\n}\n", "import { ParamMapping } from './types';\n\nexport function disposeUnusedWeightTensors(weightMap: any, paramMappings: ParamMapping[]) {\n Object.keys(weightMap).forEach((path) => {\n if (!paramMappings.some((pm) => pm.originalPath === path)) {\n weightMap[path].dispose();\n }\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams, ExtractWeightsFunction, ParamMapping } from './types';\n\nexport function extractConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams => {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ExtractWeightsFunction, FCParams, ParamMapping } from './types';\n\nexport function extractFCParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): FCParams => {\n const fc_weights = tf.tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]);\n const fc_bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return {\n weights: fc_weights,\n bias: fc_bias,\n };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\n// eslint-disable-next-line no-unused-vars\nexport type ExtractWeightsFunction = (numWeights: number) => Float32Array\n\nexport type ParamMapping = {\n originalPath?: string\n paramPath: string\n}\n\nexport type ConvParams = {\n filters: tf.Tensor4D\n bias: tf.Tensor1D\n}\n\nexport type FCParams = {\n weights: tf.Tensor2D\n bias: tf.Tensor1D\n}\n\nexport class SeparableConvParams {\n // eslint-disable-next-line no-useless-constructor\n constructor(\n // eslint-disable-next-line no-unused-vars\n public depthwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public pointwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public bias: tf.Tensor1D,\n // eslint-disable-next-line no-empty-function\n ) {}\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ExtractWeightsFunction, ParamMapping, SeparableConvParams } from './types';\n\nexport function extractSeparableConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (channelsIn: number, channelsOut: number, mappedPrefix: string): SeparableConvParams => {\n const depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]);\n const pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]);\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/depthwise_filter` },\n { paramPath: `${mappedPrefix}/pointwise_filter` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n\nexport function loadSeparableConvParamsFactory(\n // eslint-disable-next-line no-unused-vars\n extractWeightEntry: (originalPath: string, paramRank: number) => T,\n) {\n return (prefix: string): SeparableConvParams => {\n const depthwise_filter = extractWeightEntry(`${prefix}/depthwise_filter`, 4);\n const pointwise_filter = extractWeightEntry(`${prefix}/pointwise_filter`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n", "import { isTensor } from '../utils/index';\nimport { ParamMapping } from './types';\n\nexport function extractWeightEntryFactory(weightMap: any, paramMappings: ParamMapping[]) {\n return (originalPath: string, paramRank: number, mappedPath?: string) => {\n const tensor = weightMap[originalPath];\n\n if (!isTensor(tensor, paramRank)) {\n throw new Error(`expected weightMap[${originalPath}] to be a Tensor${paramRank}D, instead have ${tensor}`);\n }\n\n paramMappings.push(\n { originalPath, paramPath: mappedPath || originalPath },\n );\n\n return tensor;\n };\n}\n", "export function extractWeightsFactory(weights: Float32Array) {\n let remainingWeights = weights;\n\n function extractWeights(numWeights: number): Float32Array {\n const ret = remainingWeights.slice(0, numWeights);\n remainingWeights = remainingWeights.slice(numWeights);\n return ret;\n }\n\n function getRemainingWeights(): Float32Array {\n return remainingWeights;\n }\n\n return {\n extractWeights,\n getRemainingWeights,\n };\n}\n", "import {\n extractConvParamsFactory,\n extractSeparableConvParamsFactory,\n ExtractWeightsFunction,\n ParamMapping,\n} from '../common/index';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractDenseBlock3Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv0`)\n : extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/conv0`);\n const conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv1`);\n const conv2 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const { conv0, conv1, conv2 } = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer);\n const conv3 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock4Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock4Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock4Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock4Params(64, 128, 'dense2');\n const dense3 = extractDenseBlock4Params(128, 256, 'dense3');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: {\n dense0, dense1, dense2, dense3,\n },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams } from './types';\n\n// eslint-disable-next-line no-unused-vars\nexport function loadConvParamsFactory(extractWeightEntry: (originalPath: string, paramRank: number) => T) {\n return (prefix: string): ConvParams => {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return { filters, bias };\n };\n}\n", "import { extractWeightEntryFactory, loadSeparableConvParamsFactory, ParamMapping } from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractDenseBlock3Params(prefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(prefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n const conv3 = extractSeparableConvParams(`${prefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock4Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock4Params('dense0', true),\n dense1: extractDenseBlock4Params('dense1'),\n dense2: extractDenseBlock4Params('dense2'),\n dense3: extractDenseBlock4Params('dense3'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock4 } from './denseBlock';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { FaceFeatureExtractorParams, IFaceFeatureExtractor } from './types';\n\nexport class FaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('FaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock4(normalized, params.dense0, true);\n out = denseBlock4(out, params.dense1);\n out = denseBlock4(out, params.dense2);\n out = denseBlock4(out, params.dense3);\n out = tf.avgPool(out, [7, 7], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FCParams } from './types';\n\nexport function fullyConnectedLayer(\n x: tf.Tensor2D,\n params: FCParams,\n): tf.Tensor2D {\n return tf.tidy(() => tf.add(\n tf.matMul(x, params.weights),\n params.bias,\n ));\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array, channelsIn: number, channelsOut: number): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const fc = extractFCParams(channelsIn, channelsOut, 'fc');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: extractFcParams('fc'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nexport function seperateWeightMaps(weightMap: tf.NamedTensorMap) {\n const featureExtractorMap: tf.NamedTensorMap = {};\n const classifierMap: tf.NamedTensorMap = {};\n\n Object.keys(weightMap).forEach((key) => {\n const map = key.startsWith('fc') ? classifierMap : featureExtractorMap;\n map[key] = weightMap[key];\n });\n\n return { featureExtractorMap, classifierMap };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { NetInput } from '../dom/index';\nimport {\n FaceFeatureExtractorParams,\n IFaceFeatureExtractor,\n TinyFaceFeatureExtractorParams,\n} from '../faceFeatureExtractor/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { NetParams } from './types';\nimport { seperateWeightMaps } from './util';\n\nexport abstract class FaceProcessor<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends NeuralNetwork {\n protected _faceFeatureExtractor: IFaceFeatureExtractor\n\n constructor(_name: string, faceFeatureExtractor: IFaceFeatureExtractor) {\n super(_name);\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): IFaceFeatureExtractor {\n return this._faceFeatureExtractor;\n }\n\n protected abstract getDefaultModelName(): string\n\n protected abstract getClassifierChannelsIn(): number\n\n protected abstract getClassifierChannelsOut(): number\n\n public runNet(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n return fullyConnectedLayer(bottleneckFeatures.as2D(bottleneckFeatures.shape[0], -1), params.fc);\n });\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights, this.getClassifierChannelsIn(), this.getClassifierChannelsOut());\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const cIn = this.getClassifierChannelsIn();\n const cOut = this.getClassifierChannelsOut();\n const classifierWeightSize = (cOut * cIn) + cOut;\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "export const FACE_EXPRESSION_LABELS = ['neutral', 'happy', 'sad', 'angry', 'fearful', 'disgusted', 'surprised'];\n\nexport class FaceExpressions {\n public neutral: number\n\n public happy: number\n\n public sad: number\n\n public angry: number\n\n public fearful: number\n\n public disgusted: number\n\n public surprised: number\n\n constructor(probabilities: number[] | Float32Array) {\n if (probabilities.length !== 7) {\n throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${probabilities.length}`);\n }\n\n FACE_EXPRESSION_LABELS.forEach((expression, idx) => {\n this[expression] = probabilities[idx];\n });\n }\n\n asSortedArray() {\n return FACE_EXPRESSION_LABELS\n .map((expression) => ({ expression, probability: this[expression] as number }))\n .sort((e0, e1) => e1.probability - e0.probability);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { FaceExpressions } from './FaceExpressions';\n\nexport class FaceExpressionNet extends FaceProcessor {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceExpressionNet', faceFeatureExtractor);\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n return tf.tidy(() => tf.softmax(this.runNet(input)));\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictExpressions(input: TNetInput) {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n const probabilitesByBatch = await Promise.all(tf.unstack(out).map(async (t) => {\n const data = await t.data();\n t.dispose();\n return data;\n }));\n out.dispose();\n\n const predictionsByBatch = probabilitesByBatch\n .map((probabilites) => new FaceExpressions(probabilites as Float32Array));\n\n return netInput.isBatchInput\n ? predictionsByBatch\n : predictionsByBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_expression_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n\n protected getClassifierChannelsOut(): number {\n return 7;\n }\n}\n", "import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\n\nexport type WithFaceExpressions = TSource & {\n expressions: FaceExpressions\n}\n\nexport function isWithFaceExpressions(obj: any): obj is WithFaceExpressions<{}> {\n return obj.expressions instanceof FaceExpressions;\n}\n\nexport function extendWithFaceExpressions<\n TSource\n>(\n sourceObj: TSource,\n expressions: FaceExpressions,\n): WithFaceExpressions {\n const extension = { expressions };\n return { ...sourceObj, ...extension };\n}\n", "import { IPoint, Point } from '../classes/index';\nimport { FaceExpressions } from '../faceExpressionNet/index';\nimport { isWithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { round } from '../utils/index';\nimport { DrawTextField } from './DrawTextField';\n\nexport type DrawFaceExpressionsInput = FaceExpressions | WithFaceExpressions<{}>\n\nexport function drawFaceExpressions(\n canvasArg: string | HTMLCanvasElement,\n faceExpressions: DrawFaceExpressionsInput | Array,\n minConfidence = 0.1,\n textFieldAnchor?: IPoint,\n) {\n const faceExpressionsArray = Array.isArray(faceExpressions) ? faceExpressions : [faceExpressions];\n\n faceExpressionsArray.forEach((e) => {\n // eslint-disable-next-line no-nested-ternary\n const expr = e instanceof FaceExpressions\n ? e\n : (isWithFaceExpressions(e) ? e.expressions : undefined);\n if (!expr) {\n throw new Error('drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof');\n }\n\n const sorted = expr.asSortedArray();\n const resultsToDisplay = sorted.filter((exprLocal) => exprLocal.probability > minConfidence);\n\n const anchor = isWithFaceDetection(e)\n ? e.detection.box.bottomLeft\n : (textFieldAnchor || new Point(0, 0));\n\n const drawTextField = new DrawTextField(\n resultsToDisplay.map((exprLocal) => `${exprLocal.expression} (${round(exprLocal.probability)})`),\n anchor,\n );\n drawTextField.draw(canvasArg);\n });\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { isWithFaceDetection, WithFaceDetection } from './WithFaceDetection';\n\nexport type WithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 > = TSource & {\n landmarks: TFaceLandmarks\n unshiftedLandmarks: TFaceLandmarks\n alignedRect: FaceDetection\n }\n\nexport function isWithFaceLandmarks(obj: any): obj is WithFaceLandmarks, FaceLandmarks> {\n return isWithFaceDetection(obj)\n // eslint-disable-next-line dot-notation\n && obj['landmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['unshiftedLandmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['alignedRect'] instanceof FaceDetection;\n}\n\nexport function extendWithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 >(sourceObj: TSource, unshiftedLandmarks: TFaceLandmarks): WithFaceLandmarks {\n const { box: shift } = sourceObj.detection;\n const landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y);\n\n const rect = landmarks.align();\n const { imageDims } = sourceObj.detection;\n const alignedRect = new FaceDetection(sourceObj.detection.score, rect.rescale(imageDims.reverse()), imageDims);\n\n const extension = {\n landmarks,\n unshiftedLandmarks,\n alignedRect,\n };\n\n return { ...sourceObj, ...extension };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IPoint } from '../classes/index';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { drawContour } from './drawContour';\n\nexport interface IDrawFaceLandmarksOptions {\n drawLines?: boolean\n drawPoints?: boolean\n lineWidth?: number\n pointSize?: number\n lineColor?: string\n pointColor?: string\n}\n\nexport class DrawFaceLandmarksOptions {\n public drawLines: boolean\n\n public drawPoints: boolean\n\n public lineWidth: number\n\n public pointSize: number\n\n public lineColor: string\n\n public pointColor: string\n\n constructor(options: IDrawFaceLandmarksOptions = {}) {\n const {\n drawLines = true, drawPoints = true, lineWidth, lineColor, pointSize, pointColor,\n } = options;\n this.drawLines = drawLines;\n this.drawPoints = drawPoints;\n this.lineWidth = lineWidth || 1;\n this.pointSize = pointSize || 2;\n this.lineColor = lineColor || 'rgba(0, 255, 255, 1)';\n this.pointColor = pointColor || 'rgba(255, 0, 255, 1)';\n }\n}\n\nexport class DrawFaceLandmarks {\n public faceLandmarks: FaceLandmarks\n\n public options: DrawFaceLandmarksOptions\n\n constructor(\n faceLandmarks: FaceLandmarks,\n options: IDrawFaceLandmarksOptions = {},\n ) {\n this.faceLandmarks = faceLandmarks;\n this.options = new DrawFaceLandmarksOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const {\n drawLines, drawPoints, lineWidth, lineColor, pointSize, pointColor,\n } = this.options;\n\n if (drawLines && this.faceLandmarks instanceof FaceLandmarks68) {\n ctx.strokeStyle = lineColor;\n ctx.lineWidth = lineWidth;\n drawContour(ctx, this.faceLandmarks.getJawOutline());\n drawContour(ctx, this.faceLandmarks.getLeftEyeBrow());\n drawContour(ctx, this.faceLandmarks.getRightEyeBrow());\n drawContour(ctx, this.faceLandmarks.getNose());\n drawContour(ctx, this.faceLandmarks.getLeftEye(), true);\n drawContour(ctx, this.faceLandmarks.getRightEye(), true);\n drawContour(ctx, this.faceLandmarks.getMouth(), true);\n }\n\n if (drawPoints) {\n ctx.strokeStyle = pointColor;\n ctx.fillStyle = pointColor;\n\n const drawPoint = (pt: IPoint) => {\n ctx.beginPath();\n ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI);\n ctx.fill();\n };\n this.faceLandmarks.positions.forEach(drawPoint);\n }\n }\n}\n\nexport type DrawFaceLandmarksInput = FaceLandmarks | WithFaceLandmarks>\n\nexport function drawFaceLandmarks(\n canvasArg: string | HTMLCanvasElement,\n faceLandmarks: DrawFaceLandmarksInput | Array,\n) {\n const faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks];\n faceLandmarksArray.forEach((f) => {\n // eslint-disable-next-line no-nested-ternary\n const landmarks = f instanceof FaceLandmarks\n ? f\n : (isWithFaceLandmarks(f) ? f.landmarks : undefined);\n if (!landmarks) {\n throw new Error('drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof');\n }\n\n new DrawFaceLandmarks(landmarks).draw(canvasArg);\n });\n}\n", "import { extractConvParamsFactory, extractSeparableConvParamsFactory, extractWeightsFactory } from '../common/index';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractReductionBlockParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(channels: number, mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParams(weights: Float32Array, numMainBlocks: number): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const entry_flow_conv_in = extractConvParams(3, 32, 3, 'entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams(32, 64, 'entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams(64, 128, 'entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(128, `middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams(128, 256, 'exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams(256, 512, 'exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { entry_flow, middle_flow, exit_flow },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n disposeUnusedWeightTensors,\n extractWeightEntryFactory,\n loadSeparableConvParamsFactory,\n ParamMapping,\n} from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractReductionBlockParams(mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(`${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(`${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n numMainBlocks: number,\n): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const entry_flow_conv_in = extractConvParams('entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams('entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams('entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(`middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams('exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams('exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params: { entry_flow, middle_flow, exit_flow }, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams, depthwiseSeparableConv } from '../common/index';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { range } from '../utils/index';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction conv(x: tf.Tensor4D, params: ConvParams, stride: [number, number]): tf.Tensor4D {\n return tf.add(tf.conv2d(x, params.filters, stride, 'same'), params.bias);\n}\n\nfunction reductionBlock(x: tf.Tensor4D, params: ReductionBlockParams, isActivateInput: boolean = true): tf.Tensor4D {\n let out = isActivateInput ? tf.relu(x) : x;\n out = depthwiseSeparableConv(out, params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = tf.maxPool(out, [3, 3], [2, 2], 'same');\n out = tf.add(out, conv(x, params.expansion_conv, [2, 2]));\n return out;\n}\n\nfunction mainBlock(x: tf.Tensor4D, params: MainBlockParams): tf.Tensor4D {\n let out = depthwiseSeparableConv(tf.relu(x), params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv2, [1, 1]);\n out = tf.add(out, x);\n return out;\n}\n\nexport class TinyXception extends NeuralNetwork {\n private _numMainBlocks: number\n\n constructor(numMainBlocks: number) {\n super('TinyXception');\n this._numMainBlocks = numMainBlocks;\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyXception - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = tf.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));\n out = reductionBlock(out, params.entry_flow.reduction_block_0, false);\n out = reductionBlock(out, params.entry_flow.reduction_block_1);\n\n range(this._numMainBlocks, 0, 1).forEach((idx) => {\n out = mainBlock(out, params.middle_flow[`main_block_${idx}`]);\n });\n\n out = reductionBlock(out, params.exit_flow.reduction_block);\n out = tf.relu(depthwiseSeparableConv(out, params.exit_flow.separable_conv, [1, 1]));\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_xception_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this._numMainBlocks);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights, this._numMainBlocks);\n }\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const age = extractFCParams(512, 1, 'fc/age');\n const gender = extractFCParams(512, 2, 'fc/gender');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc: { age, gender } },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: {\n age: extractFcParams('fc/age'),\n gender: extractFcParams('fc/gender'),\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FCParams } from '../common/index';\n\n// eslint-disable-next-line no-shadow\nexport enum Gender {\n // eslint-disable-next-line no-unused-vars\n FEMALE = 'female',\n // eslint-disable-next-line no-unused-vars\n MALE = 'male'\n}\n\nexport type AgeAndGenderPrediction = {\n age: number\n gender: Gender\n genderProbability: number\n}\n\nexport type NetOutput = { age: tf.Tensor1D, gender: tf.Tensor2D }\n\nexport type NetParams = {\n fc: {\n age: FCParams\n gender: FCParams\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { seperateWeightMaps } from '../faceProcessor/util';\nimport { TinyXception } from '../xception/TinyXception';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport {\n AgeAndGenderPrediction, Gender, NetOutput, NetParams,\n} from './types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\n\nexport class AgeGenderNet extends NeuralNetwork {\n private _faceFeatureExtractor: TinyXception\n\n constructor(faceFeatureExtractor: TinyXception = new TinyXception(2)) {\n super('AgeGenderNet');\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): TinyXception {\n return this._faceFeatureExtractor;\n }\n\n public runNet(input: NetInput | tf.Tensor4D): NetOutput {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n\n const pooled = tf.avgPool(bottleneckFeatures, [7, 7], [2, 2], 'valid').as2D(bottleneckFeatures.shape[0], -1);\n const age = fullyConnectedLayer(pooled, params.fc.age).as1D();\n const gender = fullyConnectedLayer(pooled, params.fc.gender);\n return { age, gender };\n });\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): NetOutput {\n return tf.tidy(() => {\n const { age, gender } = this.runNet(input);\n return { age, gender: tf.softmax(gender) };\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictAgeAndGender(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n\n const ages = tf.unstack(out.age);\n const genders = tf.unstack(out.gender);\n const ageAndGenderTensors = ages.map((ageTensor, i) => ({\n ageTensor,\n genderTensor: genders[i],\n }));\n\n const predictionsByBatch = await Promise.all(\n ageAndGenderTensors.map(async ({ ageTensor, genderTensor }) => {\n const age = (await ageTensor.data())[0];\n const probMale = (await genderTensor.data())[0];\n const isMale = probMale > 0.5;\n const gender = isMale ? Gender.MALE : Gender.FEMALE;\n const genderProbability = isMale ? probMale : (1 - probMale);\n\n ageTensor.dispose();\n genderTensor.dispose();\n return { age, gender, genderProbability };\n }),\n );\n out.age.dispose();\n out.gender.dispose();\n\n return netInput.isBatchInput ? predictionsByBatch as AgeAndGenderPrediction[] : predictionsByBatch[0] as AgeAndGenderPrediction;\n }\n\n protected getDefaultModelName(): string {\n return 'age_gender_model';\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights);\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const classifierWeightSize = (512 * 1 + 1) + (512 * 2 + 2);\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { IDimensions, Point } from '../classes/index';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractorParams, TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { isEven } from '../utils/index';\n\nexport abstract class FaceLandmark68NetBase<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends FaceProcessor {\n public postProcess(output: tf.Tensor2D, inputSize: number, originalDimensions: IDimensions[]): tf.Tensor2D {\n const inputDimensions = originalDimensions.map(({ width, height }) => {\n const scale = inputSize / Math.max(height, width);\n return {\n width: width * scale,\n height: height * scale,\n };\n });\n\n const batchSize = inputDimensions.length;\n\n return tf.tidy(() => {\n const createInterleavedTensor = (fillX: number, fillY: number) => tf.stack([tf.fill([68], fillX, 'float32'), tf.fill([68], fillY, 'float32')], 1).as2D(1, 136).as1D();\n\n // eslint-disable-next-line no-unused-vars\n const getPadding = (batchIdx: number, cond: (w: number, h: number) => boolean): number => {\n const { width, height } = inputDimensions[batchIdx];\n return cond(width, height) ? Math.abs(width - height) / 2 : 0;\n };\n\n const getPaddingX = (batchIdx: number) => getPadding(batchIdx, (w, h) => w < h);\n const getPaddingY = (batchIdx: number) => getPadding(batchIdx, (w, h) => h < w);\n\n const landmarkTensors = output\n .mul(tf.fill([batchSize, 136], inputSize, 'float32'))\n .sub(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n getPaddingX(batchIdx),\n getPaddingY(batchIdx),\n ))))\n .div(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n inputDimensions[batchIdx].width,\n inputDimensions[batchIdx].height,\n ))));\n\n return landmarkTensors as tf.Tensor2D;\n });\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n return tf.tidy(() => {\n const out = this.runNet(input);\n return this.postProcess(\n out,\n input.inputSize as number,\n input.inputDimensions.map(([height, width]) => ({ height, width })),\n );\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async detectLandmarks(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const landmarkTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const landmarksForBatch = await Promise.all(landmarkTensors.map(\n async (landmarkTensor, batchIdx) => {\n const landmarksArray = Array.from(await landmarkTensor.data());\n const xCoords = landmarksArray.filter((_, i) => isEven(i));\n const yCoords = landmarksArray.filter((_, i) => !isEven(i));\n\n return new FaceLandmarks68(\n Array(68).fill(0).map((_, i) => new Point(xCoords[i] as number, yCoords[i] as number)),\n {\n height: netInput.getInputHeight(batchIdx),\n width: netInput.getInputWidth(batchIdx),\n },\n );\n },\n ));\n\n landmarkTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput ? landmarksForBatch as FaceLandmarks68[] : landmarksForBatch[0] as FaceLandmarks68;\n }\n\n protected getClassifierChannelsOut(): number {\n return 136;\n }\n}\n", "import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68Net extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceLandmark68Net', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMapTiny(\n weightMap: tf.NamedTensorMap,\n): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock3Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock3Params('dense0', true),\n dense1: extractDenseBlock3Params('dense1'),\n dense2: extractDenseBlock3Params('dense2'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsTiny(weights: Float32Array): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock3Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock3Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock3Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock3Params(64, 128, 'dense2');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { dense0, dense1, dense2 },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock3 } from './denseBlock';\nimport { extractParamsFromWeigthMapTiny } from './extractParamsFromWeigthMapTiny';\nimport { extractParamsTiny } from './extractParamsTiny';\nimport { IFaceFeatureExtractor, TinyFaceFeatureExtractorParams } from './types';\n\nexport class TinyFaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('TinyFaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyFaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock3(normalized, params.dense0, true);\n out = denseBlock3(out, params.dense1);\n out = denseBlock3(out, params.dense2);\n out = tf.avgPool(out, [14, 14], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_tiny_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMapTiny(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParamsTiny(weights);\n }\n}\n", "import { TinyFaceFeatureExtractor } from '../faceFeatureExtractor/TinyFaceFeatureExtractor';\nimport { TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68TinyNet extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: TinyFaceFeatureExtractor = new TinyFaceFeatureExtractor()) {\n super('FaceLandmark68TinyNet', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_tiny_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 128;\n }\n}\n", "import { FaceLandmark68Net } from './FaceLandmark68Net';\n\nexport * from './FaceLandmark68Net';\nexport * from './FaceLandmark68TinyNet';\n\nexport class FaceLandmarkNet extends FaceLandmark68Net {}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ScaleLayerParams } from './types';\n\nexport function scale(x: tf.Tensor4D, params: ScaleLayerParams): tf.Tensor4D {\n return tf.add(tf.mul(x, params.weights), params.biases);\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { scale } from './scaleLayer';\nimport { ConvLayerParams } from './types';\n\nfunction convLayer(\n x: tf.Tensor4D,\n params: ConvLayerParams,\n strides: [number, number],\n withRelu: boolean,\n padding: 'valid' | 'same' = 'same',\n): tf.Tensor4D {\n const { filters, bias } = params.conv;\n\n let out = tf.conv2d(x, filters, strides, padding);\n out = tf.add(out, bias);\n out = scale(out, params.scale);\n return withRelu ? tf.relu(out) : out;\n}\n\nexport function conv(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], true);\n}\n\nexport function convNoRelu(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], false);\n}\n\nexport function convDown(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [2, 2], true, 'valid');\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n ConvParams, extractWeightsFactory, ExtractWeightsFunction, ParamMapping,\n} from '../common/index';\nimport { isFloat } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractFilterValues(numFilterValues: number, numFilters: number, filterSize: number): tf.Tensor4D {\n const weights = extractWeights(numFilterValues);\n const depth = weights.length / (numFilters * filterSize * filterSize);\n\n if (isFloat(depth)) {\n throw new Error(`depth has to be an integer: ${depth}, weights.length: ${weights.length}, numFilters: ${numFilters}, filterSize: ${filterSize}`);\n }\n\n return tf.tidy(\n () => tf.transpose(\n tf.tensor4d(weights, [numFilters, depth, filterSize, filterSize]),\n [2, 3, 1, 0],\n ),\n );\n }\n\n function extractConvParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams {\n const filters = extractFilterValues(numFilterValues, numFilters, filterSize);\n const bias = tf.tensor1d(extractWeights(numFilters));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n }\n\n function extractScaleLayerParams(numWeights: number, mappedPrefix: string): ScaleLayerParams {\n const weights = tf.tensor1d(extractWeights(numWeights));\n const biases = tf.tensor1d(extractWeights(numWeights));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/biases` },\n );\n\n return {\n weights,\n biases,\n };\n }\n\n function extractConvLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvLayerParams {\n const conv = extractConvParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv`);\n const scale = extractScaleLayerParams(numFilters, `${mappedPrefix}/scale`);\n\n return { conv, scale };\n }\n\n function extractResidualLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n isDown: boolean = false,\n ): ResidualLayerParams {\n const conv1 = extractConvLayerParams((isDown ? 0.5 : 1) * numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv1`);\n const conv2 = extractConvLayerParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv2`);\n\n return { conv1, conv2 };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const conv32_down = extractConvLayerParams(4704, 32, 7, 'conv32_down');\n const conv32_1 = extractResidualLayerParams(9216, 32, 3, 'conv32_1');\n const conv32_2 = extractResidualLayerParams(9216, 32, 3, 'conv32_2');\n const conv32_3 = extractResidualLayerParams(9216, 32, 3, 'conv32_3');\n\n const conv64_down = extractResidualLayerParams(36864, 64, 3, 'conv64_down', true);\n const conv64_1 = extractResidualLayerParams(36864, 64, 3, 'conv64_1');\n const conv64_2 = extractResidualLayerParams(36864, 64, 3, 'conv64_2');\n const conv64_3 = extractResidualLayerParams(36864, 64, 3, 'conv64_3');\n\n const conv128_down = extractResidualLayerParams(147456, 128, 3, 'conv128_down', true);\n const conv128_1 = extractResidualLayerParams(147456, 128, 3, 'conv128_1');\n const conv128_2 = extractResidualLayerParams(147456, 128, 3, 'conv128_2');\n\n const conv256_down = extractResidualLayerParams(589824, 256, 3, 'conv256_down', true);\n const conv256_1 = extractResidualLayerParams(589824, 256, 3, 'conv256_1');\n const conv256_2 = extractResidualLayerParams(589824, 256, 3, 'conv256_2');\n const conv256_down_out = extractResidualLayerParams(589824, 256, 3, 'conv256_down_out');\n\n const fc = tf.tidy(\n () => tf.transpose(tf.tensor2d(extractWeights(256 * 128), [128, 256]), [1, 0]),\n );\n paramMappings.push({ paramPath: 'fc' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping } from '../common/index';\nimport { isTensor2D } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractScaleLayerParams(prefix: string): ScaleLayerParams {\n const weights = extractWeightEntry(`${prefix}/scale/weights`, 1);\n const biases = extractWeightEntry(`${prefix}/scale/biases`, 1);\n\n return { weights, biases };\n }\n\n function extractConvLayerParams(prefix: string): ConvLayerParams {\n const filters = extractWeightEntry(`${prefix}/conv/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/conv/bias`, 1);\n const scale = extractScaleLayerParams(prefix);\n\n return { conv: { filters, bias }, scale };\n }\n\n function extractResidualLayerParams(prefix: string): ResidualLayerParams {\n return {\n conv1: extractConvLayerParams(`${prefix}/conv1`),\n conv2: extractConvLayerParams(`${prefix}/conv2`),\n };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const conv32_down = extractConvLayerParams('conv32_down');\n const conv32_1 = extractResidualLayerParams('conv32_1');\n const conv32_2 = extractResidualLayerParams('conv32_2');\n const conv32_3 = extractResidualLayerParams('conv32_3');\n\n const conv64_down = extractResidualLayerParams('conv64_down');\n const conv64_1 = extractResidualLayerParams('conv64_1');\n const conv64_2 = extractResidualLayerParams('conv64_2');\n const conv64_3 = extractResidualLayerParams('conv64_3');\n\n const conv128_down = extractResidualLayerParams('conv128_down');\n const conv128_1 = extractResidualLayerParams('conv128_1');\n const conv128_2 = extractResidualLayerParams('conv128_2');\n\n const conv256_down = extractResidualLayerParams('conv256_down');\n const conv256_1 = extractResidualLayerParams('conv256_1');\n const conv256_2 = extractResidualLayerParams('conv256_2');\n const conv256_down_out = extractResidualLayerParams('conv256_down_out');\n\n const { fc } = weightMap;\n paramMappings.push({ originalPath: 'fc', paramPath: 'fc' });\n\n if (!isTensor2D(fc)) {\n throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${fc}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { conv, convDown, convNoRelu } from './convLayer';\nimport { ResidualLayerParams } from './types';\n\nexport function residual(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = conv(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n out = tf.add(out, x);\n out = tf.relu(out);\n return out;\n}\n\nexport function residualDown(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = convDown(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n\n let pooled = tf.avgPool(x, 2, 2, 'valid') as tf.Tensor4D;\n const zeros = tf.zeros(pooled.shape);\n const isPad = pooled.shape[3] !== out.shape[3];\n const isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2];\n\n if (isAdjustShape) {\n const padShapeX = [...out.shape] as [number, number, number, number];\n padShapeX[1] = 1;\n const zerosW = tf.zeros(padShapeX);\n out = tf.concat([out, zerosW], 1);\n\n const padShapeY = [...out.shape] as [number, number, number, number];\n padShapeY[2] = 1;\n const zerosH = tf.zeros(padShapeY);\n out = tf.concat([out, zerosH], 2);\n }\n\n pooled = isPad ? tf.concat([pooled, zeros], 3) : pooled;\n out = tf.add(pooled, out) as tf.Tensor4D;\n\n out = tf.relu(out);\n return out;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { convDown } from './convLayer';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { residual, residualDown } from './residualLayer';\nimport { NetParams } from './types';\n\nexport class FaceRecognitionNet extends NeuralNetwork {\n constructor() {\n super('FaceRecognitionNet');\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceRecognitionNet - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(150, true).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(150, true), 'float32');\n\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = convDown(normalized, params.conv32_down);\n out = tf.maxPool(out, 3, 2, 'valid');\n\n out = residual(out, params.conv32_1);\n out = residual(out, params.conv32_2);\n out = residual(out, params.conv32_3);\n\n out = residualDown(out, params.conv64_down);\n out = residual(out, params.conv64_1);\n out = residual(out, params.conv64_2);\n out = residual(out, params.conv64_3);\n\n out = residualDown(out, params.conv128_down);\n out = residual(out, params.conv128_1);\n out = residual(out, params.conv128_2);\n\n out = residualDown(out, params.conv256_down);\n out = residual(out, params.conv256_1);\n out = residual(out, params.conv256_2);\n out = residualDown(out, params.conv256_down_out);\n\n const globalAvg = out.mean([1, 2]) as tf.Tensor2D;\n const fullyConnected = tf.matMul(globalAvg, params.fc);\n\n return fullyConnected;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async computeFaceDescriptor(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n\n const faceDescriptorTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const faceDescriptorsForBatch = await Promise.all(faceDescriptorTensors.map(\n (t) => t.data(),\n )) as Float32Array[];\n\n faceDescriptorTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput\n ? faceDescriptorsForBatch\n : faceDescriptorsForBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_recognition_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import { FaceRecognitionNet } from './FaceRecognitionNet';\n\nexport * from './FaceRecognitionNet';\n\nexport function createFaceRecognitionNet(weights: Float32Array) {\n const net = new FaceRecognitionNet();\n net.extractWeights(weights);\n return net;\n}\n", "export type WithFaceDescriptor = TSource & {\n descriptor: Float32Array\n}\n\nexport function extendWithFaceDescriptor<\n TSource\n>(\n sourceObj: TSource,\n descriptor: Float32Array,\n): WithFaceDescriptor {\n const extension = { descriptor };\n return { ...sourceObj, ...extension };\n}\n", "export type WithAge = TSource & {\n age: number\n}\n\nexport function isWithAge(obj: any): obj is WithAge<{}> {\n return typeof obj.age === 'number';\n}\n\nexport function extendWithAge<\n TSource\n>(\n sourceObj: TSource,\n age: number,\n): WithAge {\n const extension = { age };\n return { ...sourceObj, ...extension };\n}\n", "import { Gender } from '../ageGenderNet/types';\nimport { isValidProbablitiy } from '../utils/index';\n\nexport type WithGender = TSource & {\n gender: Gender\n genderProbability: number\n}\n\nexport function isWithGender(obj: any): obj is WithGender<{}> {\n return (obj.gender === Gender.MALE || obj.gender === Gender.FEMALE)\n && isValidProbablitiy(obj.genderProbability);\n}\n\nexport function extendWithGender<\n TSource\n>(\n sourceObj: TSource,\n gender: Gender,\n genderProbability: number,\n): WithGender {\n const extension = { gender, genderProbability };\n return { ...sourceObj, ...extension };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n ExtractWeightsFunction, ParamMapping, ConvParams, extractWeightsFactory,\n} from '../common/index';\nimport {\n MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractDepthwiseConvParams(numChannels: number, mappedPrefix: string): MobileNetV1.DepthwiseConvParams {\n const filters = tf.tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]);\n const batch_norm_scale = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_offset = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_mean = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_variance = tf.tensor1d(extractWeights(numChannels));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/batch_norm_scale` },\n { paramPath: `${mappedPrefix}/batch_norm_offset` },\n { paramPath: `${mappedPrefix}/batch_norm_mean` },\n { paramPath: `${mappedPrefix}/batch_norm_variance` },\n );\n\n return {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n };\n }\n\n function extractConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n isPointwiseConv?: boolean,\n ): ConvParams {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/${isPointwiseConv ? 'batch_norm_offset' : 'bias'}` },\n );\n\n return { filters, bias };\n }\n\n function extractPointwiseConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): PointwiseConvParams {\n const {\n filters,\n bias,\n } = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true);\n\n return {\n filters,\n batch_norm_offset: bias,\n };\n }\n\n function extractConvPairParams(\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): MobileNetV1.ConvPairParams {\n const depthwise_conv = extractDepthwiseConvParams(channelsIn, `${mappedPrefix}/depthwise_conv`);\n const pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/pointwise_conv`);\n\n return { depthwise_conv, pointwise_conv };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n const conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0');\n\n const conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1');\n const conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2');\n const conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3');\n const conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4');\n const conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5');\n const conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6');\n const conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7');\n const conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8');\n const conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9');\n const conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10');\n const conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11');\n const conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12');\n const conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13');\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n conv_8,\n conv_9,\n conv_10,\n conv_11,\n conv_12,\n conv_13,\n };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n const conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0');\n const conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1');\n const conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2');\n const conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3');\n const conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4');\n const conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5');\n const conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6');\n const conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7');\n\n const box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor');\n const class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor');\n const box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor');\n const class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor');\n const box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor');\n const class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor');\n const box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor');\n const class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor');\n const box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor');\n const class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor');\n const box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor');\n const class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor');\n\n const box_predictor_0 = {\n box_encoding_predictor: box_encoding_0_predictor,\n class_predictor: class_predictor_0,\n };\n const box_predictor_1 = {\n box_encoding_predictor: box_encoding_1_predictor,\n class_predictor: class_predictor_1,\n };\n const box_predictor_2 = {\n box_encoding_predictor: box_encoding_2_predictor,\n class_predictor: class_predictor_2,\n };\n const box_predictor_3 = {\n box_encoding_predictor: box_encoding_3_predictor,\n class_predictor: class_predictor_3,\n };\n const box_predictor_4 = {\n box_encoding_predictor: box_encoding_4_predictor,\n class_predictor: class_predictor_4,\n };\n const box_predictor_5 = {\n box_encoding_predictor: box_encoding_5_predictor,\n class_predictor: class_predictor_5,\n };\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n box_predictor_0,\n box_predictor_1,\n box_predictor_2,\n box_predictor_3,\n box_predictor_4,\n box_predictor_5,\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const mobilenetv1 = extractMobilenetV1Params();\n const prediction_layer = extractPredictionLayerParams();\n const extra_dim = tf.tensor3d(\n extractWeights(5118 * 4),\n [1, 5118, 4],\n );\n const output_layer = {\n extra_dim,\n };\n\n paramMappings.push({ paramPath: 'output_layer/extra_dim' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n params: {\n mobilenetv1,\n prediction_layer,\n output_layer,\n },\n paramMappings,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n ConvParams, disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping,\n} from '../common/index';\nimport { isTensor3D } from '../utils/index';\nimport {\n BoxPredictionParams, MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractPointwiseConvParams(prefix: string, idx: number, mappedPrefix: string): PointwiseConvParams {\n const filters = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/weights`, 4, `${mappedPrefix}/filters`);\n const batch_norm_offset = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/convolution_bn_offset`, 1, `${mappedPrefix}/batch_norm_offset`);\n\n return { filters, batch_norm_offset };\n }\n\n function extractConvPairParams(idx: number): MobileNetV1.ConvPairParams {\n const mappedPrefix = `mobilenetv1/conv_${idx}`;\n const prefixDepthwiseConv = `MobilenetV1/Conv2d_${idx}_depthwise`;\n const mappedPrefixDepthwiseConv = `${mappedPrefix}/depthwise_conv`;\n const mappedPrefixPointwiseConv = `${mappedPrefix}/pointwise_conv`;\n\n const filters = extractWeightEntry(`${prefixDepthwiseConv}/depthwise_weights`, 4, `${mappedPrefixDepthwiseConv}/filters`);\n const batch_norm_scale = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/gamma`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_scale`);\n const batch_norm_offset = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/beta`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_offset`);\n const batch_norm_mean = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_mean`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_mean`);\n const batch_norm_variance = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_variance`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_variance`);\n\n return {\n depthwise_conv: {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n },\n pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv),\n };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n return {\n conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'),\n conv_1: extractConvPairParams(1),\n conv_2: extractConvPairParams(2),\n conv_3: extractConvPairParams(3),\n conv_4: extractConvPairParams(4),\n conv_5: extractConvPairParams(5),\n conv_6: extractConvPairParams(6),\n conv_7: extractConvPairParams(7),\n conv_8: extractConvPairParams(8),\n conv_9: extractConvPairParams(9),\n conv_10: extractConvPairParams(10),\n conv_11: extractConvPairParams(11),\n conv_12: extractConvPairParams(12),\n conv_13: extractConvPairParams(13),\n };\n }\n\n function extractConvParams(prefix: string, mappedPrefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/weights`, 4, `${mappedPrefix}/filters`);\n const bias = extractWeightEntry(`${prefix}/biases`, 1, `${mappedPrefix}/bias`);\n\n return { filters, bias };\n }\n\n function extractBoxPredictorParams(idx: number): BoxPredictionParams {\n const box_encoding_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/BoxEncodingPredictor`,\n `prediction_layer/box_predictor_${idx}/box_encoding_predictor`,\n );\n const class_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/ClassPredictor`,\n `prediction_layer/box_predictor_${idx}/class_predictor`,\n );\n\n return { box_encoding_predictor, class_predictor };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n return {\n conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'),\n conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'),\n conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'),\n conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'),\n conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'),\n conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'),\n conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'),\n conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'),\n box_predictor_0: extractBoxPredictorParams(0),\n box_predictor_1: extractBoxPredictorParams(1),\n box_predictor_2: extractBoxPredictorParams(2),\n box_predictor_3: extractBoxPredictorParams(3),\n box_predictor_4: extractBoxPredictorParams(4),\n box_predictor_5: extractBoxPredictorParams(5),\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const extra_dim = weightMap['Output/extra_dim'];\n paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' });\n\n if (!isTensor3D(extra_dim)) {\n throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${extra_dim}`);\n }\n\n const params = {\n mobilenetv1: extractMobilenetV1Params(),\n prediction_layer: extractPredictionLayerParams(),\n output_layer: {\n extra_dim,\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { PointwiseConvParams } from './types';\n\nexport function pointwiseConvLayer(\n x: tf.Tensor4D,\n params: PointwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.conv2d(x, params.filters, strides, 'same');\n out = tf.add(out, params.batch_norm_offset);\n return tf.clipByValue(out, 0, 6);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { MobileNetV1 } from './types';\n\nconst epsilon = 0.0010000000474974513;\n\nfunction depthwiseConvLayer(\n x: tf.Tensor4D,\n params: MobileNetV1.DepthwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.depthwiseConv2d(x, params.filters, strides, 'same');\n out = tf.batchNorm(\n out,\n params.batch_norm_mean,\n params.batch_norm_variance,\n params.batch_norm_offset,\n params.batch_norm_scale,\n epsilon,\n );\n return tf.clipByValue(out, 0, 6);\n });\n}\n\nfunction getStridesForLayerIdx(layerIdx: number): [number, number] {\n return [2, 4, 6, 12].some((idx) => idx === layerIdx) ? [2, 2] : [1, 1];\n}\n\nexport function mobileNetV1(x: tf.Tensor4D, params: MobileNetV1.Params) {\n return tf.tidy(() => {\n let conv11;\n let out = pointwiseConvLayer(x, params.conv_0, [2, 2]);\n\n const convPairParams = [\n params.conv_1,\n params.conv_2,\n params.conv_3,\n params.conv_4,\n params.conv_5,\n params.conv_6,\n params.conv_7,\n params.conv_8,\n params.conv_9,\n params.conv_10,\n params.conv_11,\n params.conv_12,\n params.conv_13,\n ];\n\n convPairParams.forEach((param, i) => {\n const layerIdx = i + 1;\n const depthwiseConvStrides = getStridesForLayerIdx(layerIdx);\n out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides);\n out = pointwiseConvLayer(out, param.pointwise_conv, [1, 1]);\n if (layerIdx === 11) {\n conv11 = out;\n }\n });\n\n if (conv11 === null) {\n throw new Error('mobileNetV1 - output of conv layer 11 is null');\n }\n\n return {\n out,\n conv11: conv11 as any,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nfunction IOU(boxes: tf.Tensor2D, i: number, j: number) {\n const boxesData = boxes.arraySync();\n const yminI = Math.min(boxesData[i][0], boxesData[i][2]);\n const xminI = Math.min(boxesData[i][1], boxesData[i][3]);\n const ymaxI = Math.max(boxesData[i][0], boxesData[i][2]);\n const xmaxI = Math.max(boxesData[i][1], boxesData[i][3]);\n const yminJ = Math.min(boxesData[j][0], boxesData[j][2]);\n const xminJ = Math.min(boxesData[j][1], boxesData[j][3]);\n const ymaxJ = Math.max(boxesData[j][0], boxesData[j][2]);\n const xmaxJ = Math.max(boxesData[j][1], boxesData[j][3]);\n const areaI = (ymaxI - yminI) * (xmaxI - xminI);\n const areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ);\n if (areaI <= 0 || areaJ <= 0) {\n return 0.0;\n }\n const intersectionYmin = Math.max(yminI, yminJ);\n const intersectionXmin = Math.max(xminI, xminJ);\n const intersectionYmax = Math.min(ymaxI, ymaxJ);\n const intersectionXmax = Math.min(xmaxI, xmaxJ);\n const intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0)\n * Math.max(intersectionXmax - intersectionXmin, 0.0);\n return intersectionArea / (areaI + areaJ - intersectionArea);\n}\n\nexport function nonMaxSuppression(\n boxes: tf.Tensor2D,\n scores: number[],\n maxOutputSize: number,\n iouThreshold: number,\n scoreThreshold: number,\n): number[] {\n const numBoxes = boxes.shape[0];\n const outputSize = Math.min(\n maxOutputSize,\n numBoxes,\n );\n\n const candidates = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .filter((c) => c.score > scoreThreshold)\n .sort((c1, c2) => c2.score - c1.score);\n\n const suppressFunc = (x: number) => (x <= iouThreshold ? 1 : 0);\n\n const selected: number[] = [];\n\n candidates.forEach((c) => {\n if (selected.length >= outputSize) {\n return;\n }\n const originalScore = c.score;\n\n for (let j = selected.length - 1; j >= 0; --j) {\n const iou = IOU(boxes, c.boxIndex, selected[j]);\n if (iou === 0.0) continue;\n c.score *= suppressFunc(iou);\n if (c.score <= scoreThreshold) break;\n }\n if (originalScore === c.score) {\n selected.push(c.boxIndex);\n }\n });\n\n return selected;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { OutputLayerParams } from './types';\n\nfunction getCenterCoordinatesAndSizesLayer(x: tf.Tensor2D) {\n const vec = tf.unstack(tf.transpose(x, [1, 0]));\n\n const sizes = [\n tf.sub(vec[2], vec[0]),\n tf.sub(vec[3], vec[1]),\n ];\n\n const centers = [\n tf.add(vec[0], tf.div(sizes[0], tf.scalar(2))),\n tf.add(vec[1], tf.div(sizes[1], tf.scalar(2))),\n ];\n\n return {\n sizes,\n centers,\n };\n}\n\nfunction decodeBoxesLayer(x0: tf.Tensor2D, x1: tf.Tensor2D) {\n const {\n sizes,\n centers,\n } = getCenterCoordinatesAndSizesLayer(x0);\n\n const vec = tf.unstack(tf.transpose(x1, [1, 0]));\n\n const div0_out = tf.div(tf.mul(tf.exp(tf.div(vec[2], tf.scalar(5))), sizes[0]), tf.scalar(2));\n const add0_out = tf.add(tf.mul(tf.div(vec[0], tf.scalar(10)), sizes[0]), centers[0]);\n\n const div1_out = tf.div(tf.mul(tf.exp(tf.div(vec[3], tf.scalar(5))), sizes[1]), tf.scalar(2));\n const add1_out = tf.add(tf.mul(tf.div(vec[1], tf.scalar(10)), sizes[1]), centers[1]);\n\n return tf.transpose(\n tf.stack([\n tf.sub(add0_out, div0_out),\n tf.sub(add1_out, div1_out),\n tf.add(add0_out, div0_out),\n tf.add(add1_out, div1_out),\n ]),\n [1, 0],\n );\n}\n\nexport function outputLayer(\n boxPredictions: tf.Tensor4D,\n classPredictions: tf.Tensor4D,\n params: OutputLayerParams,\n) {\n return tf.tidy(() => {\n const batchSize = boxPredictions.shape[0];\n\n let boxes = decodeBoxesLayer(\n tf.reshape(tf.tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]) as tf.Tensor2D,\n tf.reshape(boxPredictions, [-1, 4]) as tf.Tensor2D,\n );\n boxes = tf.reshape(\n boxes,\n [batchSize, (boxes.shape[0] / batchSize), 4],\n );\n\n const scoresAndClasses = tf.sigmoid(tf.slice(classPredictions, [0, 0, 1], [-1, -1, -1]));\n let scores = tf.slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]) as tf.Tensor;\n\n scores = tf.reshape(\n scores,\n [batchSize, scores.shape[1] as number],\n );\n\n const boxesByBatch = tf.unstack(boxes) as tf.Tensor2D[];\n const scoresByBatch = tf.unstack(scores) as tf.Tensor1D[];\n\n return {\n boxes: boxesByBatch,\n scores: scoresByBatch,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { convLayer } from '../common/index';\nimport { BoxPredictionParams } from './types';\n\nexport function boxPredictionLayer(\n x: tf.Tensor4D,\n params: BoxPredictionParams,\n) {\n return tf.tidy(() => {\n const batchSize = x.shape[0];\n\n const boxPredictionEncoding = tf.reshape(\n convLayer(x, params.box_encoding_predictor),\n [batchSize, -1, 1, 4],\n );\n const classPrediction = tf.reshape(\n convLayer(x, params.class_predictor),\n [batchSize, -1, 3],\n );\n\n return {\n boxPredictionEncoding,\n classPrediction,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { boxPredictionLayer } from './boxPredictionLayer';\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { PredictionLayerParams } from './types';\n\nexport function predictionLayer(\n x: tf.Tensor4D,\n conv11: tf.Tensor4D,\n params: PredictionLayerParams,\n) {\n return tf.tidy(() => {\n const conv0 = pointwiseConvLayer(x, params.conv_0, [1, 1]);\n const conv1 = pointwiseConvLayer(conv0, params.conv_1, [2, 2]);\n const conv2 = pointwiseConvLayer(conv1, params.conv_2, [1, 1]);\n const conv3 = pointwiseConvLayer(conv2, params.conv_3, [2, 2]);\n const conv4 = pointwiseConvLayer(conv3, params.conv_4, [1, 1]);\n const conv5 = pointwiseConvLayer(conv4, params.conv_5, [2, 2]);\n const conv6 = pointwiseConvLayer(conv5, params.conv_6, [1, 1]);\n const conv7 = pointwiseConvLayer(conv6, params.conv_7, [2, 2]);\n\n const boxPrediction0 = boxPredictionLayer(conv11, params.box_predictor_0);\n const boxPrediction1 = boxPredictionLayer(x, params.box_predictor_1);\n const boxPrediction2 = boxPredictionLayer(conv1, params.box_predictor_2);\n const boxPrediction3 = boxPredictionLayer(conv3, params.box_predictor_3);\n const boxPrediction4 = boxPredictionLayer(conv5, params.box_predictor_4);\n const boxPrediction5 = boxPredictionLayer(conv7, params.box_predictor_5);\n\n const boxPredictions = tf.concat([\n boxPrediction0.boxPredictionEncoding,\n boxPrediction1.boxPredictionEncoding,\n boxPrediction2.boxPredictionEncoding,\n boxPrediction3.boxPredictionEncoding,\n boxPrediction4.boxPredictionEncoding,\n boxPrediction5.boxPredictionEncoding,\n ], 1) as tf.Tensor4D;\n\n const classPredictions = tf.concat([\n boxPrediction0.classPrediction,\n boxPrediction1.classPrediction,\n boxPrediction2.classPrediction,\n boxPrediction3.classPrediction,\n boxPrediction4.classPrediction,\n boxPrediction5.classPrediction,\n ], 1) as tf.Tensor4D;\n\n return {\n boxPredictions,\n classPredictions,\n };\n });\n}\n", "export interface ISsdMobilenetv1Options {\n minConfidence?: number\n maxResults?: number\n}\n\nexport class SsdMobilenetv1Options {\n protected _name: string = 'SsdMobilenetv1Options'\n\n private _minConfidence: number\n\n private _maxResults: number\n\n constructor({ minConfidence, maxResults }: ISsdMobilenetv1Options = {}) {\n this._minConfidence = minConfidence || 0.5;\n this._maxResults = maxResults || 100;\n\n if (typeof this._minConfidence !== 'number' || this._minConfidence <= 0 || this._minConfidence >= 1) {\n throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);\n }\n\n if (typeof this._maxResults !== 'number') {\n throw new Error(`${this._name} - expected maxResults to be a number`);\n }\n }\n\n get minConfidence(): number { return this._minConfidence; }\n\n get maxResults(): number { return this._maxResults; }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { mobileNetV1 } from './mobileNetV1';\nimport { nonMaxSuppression } from './nonMaxSuppression';\nimport { outputLayer } from './outputLayer';\nimport { predictionLayer } from './predictionLayer';\nimport { ISsdMobilenetv1Options, SsdMobilenetv1Options } from './SsdMobilenetv1Options';\nimport { NetParams } from './types';\n\nexport class SsdMobilenetv1 extends NeuralNetwork {\n constructor() {\n super('SsdMobilenetv1');\n }\n\n public forwardInput(input: NetInput) {\n const { params } = this;\n\n if (!params) {\n throw new Error('SsdMobilenetv1 - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(512, false).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(512, false), 'float32');\n\n const x = tf.sub(tf.mul(batchTensor, tf.scalar(0.007843137718737125)), tf.scalar(1)) as tf.Tensor4D;\n const features = mobileNetV1(x, params.mobilenetv1);\n\n const {\n boxPredictions,\n classPredictions,\n } = predictionLayer(features.out, features.conv11, params.prediction_layer);\n\n return outputLayer(boxPredictions, classPredictions, params.output_layer);\n });\n }\n\n public async forward(input: TNetInput) {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async locateFaces(\n input: TNetInput,\n options: ISsdMobilenetv1Options = {},\n ): Promise {\n const { maxResults, minConfidence } = new SsdMobilenetv1Options(options);\n\n const netInput = await toNetInput(input);\n\n const {\n boxes: _boxes,\n scores: _scores,\n } = this.forwardInput(netInput);\n\n // TODO batches\n const boxes = _boxes[0];\n const scores = _scores[0];\n for (let i = 1; i < _boxes.length; i++) {\n _boxes[i].dispose();\n _scores[i].dispose();\n }\n\n // TODO find a better way to filter by minConfidence\n const scoresData = Array.from(await scores.data());\n\n const iouThreshold = 0.5;\n const indices = nonMaxSuppression(\n boxes,\n scoresData as number[],\n maxResults,\n iouThreshold,\n minConfidence,\n );\n\n const reshapedDims = netInput.getReshapedInputDimensions(0);\n const inputSize = netInput.inputSize as number;\n const padX = inputSize / reshapedDims.width;\n const padY = inputSize / reshapedDims.height;\n\n const boxesData = boxes.arraySync();\n const results = indices\n .map((idx) => {\n const [top, bottom] = [\n Math.max(0, boxesData[idx][0]),\n Math.min(1.0, boxesData[idx][2]),\n ].map((val) => val * padY);\n const [left, right] = [\n Math.max(0, boxesData[idx][1]),\n Math.min(1.0, boxesData[idx][3]),\n ].map((val) => val * padX);\n return new FaceDetection(\n scoresData[idx] as number,\n new Rect(\n left,\n top,\n right - left,\n bottom - top,\n ),\n {\n height: netInput.getInputHeight(0),\n width: netInput.getInputWidth(0),\n },\n );\n });\n\n boxes.dispose();\n scores.dispose();\n\n return results;\n }\n\n protected getDefaultModelName(): string {\n return 'ssd_mobilenetv1_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import { SsdMobilenetv1 } from './SsdMobilenetv1';\n\nexport * from './SsdMobilenetv1';\nexport * from './SsdMobilenetv1Options';\n\nexport function createSsdMobilenetv1(weights: Float32Array) {\n const net = new SsdMobilenetv1();\n net.extractWeights(weights);\n return net;\n}\n\nexport function createFaceDetectionNet(weights: Float32Array) {\n return createSsdMobilenetv1(weights);\n}\n\n// alias for backward compatibily\nexport class FaceDetectionNet extends SsdMobilenetv1 {}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(0.738768, 0.874946),\n new Point(2.42204, 2.65704),\n new Point(4.30971, 7.04493),\n new Point(10.246, 4.59428),\n new Point(12.6868, 11.8741),\n];\n\nexport const BOX_ANCHORS_SEPARABLE = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB_SEPARABLE: [number, number, number] = [117.001, 114.697, 97.404];\n\nexport const DEFAULT_MODEL_NAME = 'tiny_yolov2_model';\nexport const DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model';\n", "import { Point } from '../classes/Point';\n\nexport type TinyYolov2Config = {\n withSeparableConvs: boolean\n iouThreshold: number\n anchors: Point[]\n classes: string[]\n meanRgb?: [number, number, number]\n withClassScores?: boolean,\n filterSizes?: number[]\n isFirstLayerConv2d?: boolean\n}\n\nconst isNumber = (arg: any) => typeof arg === 'number';\n\nexport function validateConfig(config: any) {\n if (!config) {\n throw new Error(`invalid config: ${config}`);\n }\n\n if (typeof config.withSeparableConvs !== 'boolean') {\n throw new Error(`config.withSeparableConvs has to be a boolean, have: ${config.withSeparableConvs}`);\n }\n\n if (!isNumber(config.iouThreshold) || config.iouThreshold < 0 || config.iouThreshold > 1.0) {\n throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${config.iouThreshold}`);\n }\n\n if (\n !Array.isArray(config.classes)\n || !config.classes.length\n || !config.classes.every((c: any) => typeof c === 'string')\n ) {\n throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(config.classes)}`);\n }\n\n if (\n !Array.isArray(config.anchors)\n || !config.anchors.length\n || !config.anchors.map((a: any) => a || {}).every((a: any) => isNumber(a.x) && isNumber(a.y))\n ) {\n throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(config.anchors)}`);\n }\n\n if (config.meanRgb && (\n !Array.isArray(config.meanRgb)\n || config.meanRgb.length !== 3\n || !config.meanRgb.every(isNumber)\n )) {\n throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(config.meanRgb)}`);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nexport function leaky(x: tf.Tensor4D): tf.Tensor4D {\n return tf.tidy(() => {\n const min = tf.mul(x, tf.scalar(0.10000000149011612));\n return tf.add(tf.relu(tf.sub(x, min)), min);\n // return tf.maximum(x, min)\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { leaky } from './leaky';\nimport { ConvWithBatchNorm } from './types';\n\nexport function convWithBatchNorm(x: tf.Tensor4D, params: ConvWithBatchNorm): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.conv2d(out, params.conv.filters, [1, 1], 'valid');\n out = tf.sub(out, params.bn.sub);\n out = tf.mul(out, params.bn.truediv);\n out = tf.add(out, params.conv.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { SeparableConvParams } from '../common/types';\nimport { leaky } from './leaky';\n\nexport function depthwiseSeparableConv(x: tf.Tensor4D, params: SeparableConvParams): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.separableConv2d(out, params.depthwise_filter, params.pointwise_filter, [1, 1], 'valid');\n out = tf.add(out, params.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { extractConvParamsFactory } from '../common/index';\nimport { extractSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightsFactory } from '../common/extractWeightsFactory';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n\n function extractBatchNormParams(size: number, mappedPrefix: string): BatchNorm {\n const sub = tf.tensor1d(extractWeights(size));\n const truediv = tf.tensor1d(extractWeights(size));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/sub` },\n { paramPath: `${mappedPrefix}/truediv` },\n );\n\n return { sub, truediv };\n }\n\n function extractConvWithBatchNormParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv`);\n const bn = extractBatchNormParams(channelsOut, `${mappedPrefix}/bn`);\n\n return { conv, bn };\n }\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParams(\n weights: Float32Array,\n config: TinyYolov2Config,\n boxEncodingSize: number,\n filterSizes: number[],\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n\n const conv0 = config.isFirstLayerConv2d\n ? extractConvParams(s0, s1, 3, 'conv0')\n : extractSeparableConvParams(s0, s1, 'conv0');\n const conv1 = extractSeparableConvParams(s1, s2, 'conv1');\n const conv2 = extractSeparableConvParams(s2, s3, 'conv2');\n const conv3 = extractSeparableConvParams(s3, s4, 'conv3');\n const conv4 = extractSeparableConvParams(s4, s5, 'conv4');\n const conv5 = extractSeparableConvParams(s5, s6, 'conv5');\n const conv6 = s7 ? extractSeparableConvParams(s6, s7, 'conv6') : undefined;\n const conv7 = s8 ? extractSeparableConvParams(s7, s8, 'conv7') : undefined;\n const conv8 = extractConvParams(s8 || s7 || s6, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n } else {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n const conv0 = extractConvWithBatchNormParams(s0, s1, 'conv0');\n const conv1 = extractConvWithBatchNormParams(s1, s2, 'conv1');\n const conv2 = extractConvWithBatchNormParams(s2, s3, 'conv2');\n const conv3 = extractConvWithBatchNormParams(s3, s4, 'conv3');\n const conv4 = extractConvWithBatchNormParams(s4, s5, 'conv4');\n const conv5 = extractConvWithBatchNormParams(s5, s6, 'conv5');\n const conv6 = extractConvWithBatchNormParams(s6, s7, 'conv6');\n const conv7 = extractConvWithBatchNormParams(s7, s8, 'conv7');\n const conv8 = extractConvParams(s8, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n }\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams } from '../common/index';\nimport { disposeUnusedWeightTensors } from '../common/disposeUnusedWeightTensors';\nimport { loadSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightEntryFactory } from '../common/extractWeightEntryFactory';\nimport { ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractBatchNormParams(prefix: string): BatchNorm {\n const sub = extractWeightEntry(`${prefix}/sub`, 1);\n const truediv = extractWeightEntry(`${prefix}/truediv`, 1);\n return { sub, truediv };\n }\n\n function extractConvParams(prefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { filters, bias };\n }\n\n function extractConvWithBatchNormParams(prefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(`${prefix}/conv`);\n const bn = extractBatchNormParams(`${prefix}/bn`);\n return { conv, bn };\n }\n\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n config: TinyYolov2Config,\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n // eslint-disable-next-line no-mixed-operators\n const numFilters = (config.filterSizes && config.filterSizes.length || 9);\n params = {\n conv0: config.isFirstLayerConv2d ? extractConvParams('conv0') : extractSeparableConvParams('conv0'),\n conv1: extractSeparableConvParams('conv1'),\n conv2: extractSeparableConvParams('conv2'),\n conv3: extractSeparableConvParams('conv3'),\n conv4: extractSeparableConvParams('conv4'),\n conv5: extractSeparableConvParams('conv5'),\n conv6: numFilters > 7 ? extractSeparableConvParams('conv6') : undefined,\n conv7: numFilters > 8 ? extractSeparableConvParams('conv7') : undefined,\n conv8: extractConvParams('conv8'),\n };\n } else {\n params = {\n conv0: extractConvWithBatchNormParams('conv0'),\n conv1: extractConvWithBatchNormParams('conv1'),\n conv2: extractConvWithBatchNormParams('conv2'),\n conv3: extractConvWithBatchNormParams('conv3'),\n conv4: extractConvWithBatchNormParams('conv4'),\n conv5: extractConvWithBatchNormParams('conv5'),\n conv6: extractConvWithBatchNormParams('conv6'),\n conv7: extractConvWithBatchNormParams('conv7'),\n conv8: extractConvParams('conv8'),\n };\n }\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "export interface ITinyYolov2Options {\n inputSize?: number\n scoreThreshold?: number\n}\n\nexport class TinyYolov2Options {\n protected _name: string = 'TinyYolov2Options'\n\n private _inputSize: number\n\n private _scoreThreshold: number\n\n constructor({ inputSize, scoreThreshold }: ITinyYolov2Options = {}) {\n this._inputSize = inputSize || 416;\n this._scoreThreshold = scoreThreshold || 0.5;\n\n if (typeof this._inputSize !== 'number' || this._inputSize % 32 !== 0) {\n throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);\n }\n\n if (typeof this._scoreThreshold !== 'number' || this._scoreThreshold <= 0 || this._scoreThreshold >= 1) {\n throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`);\n }\n }\n\n get inputSize(): number { return this._inputSize; }\n\n get scoreThreshold(): number { return this._scoreThreshold; }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { BoundingBox } from '../classes/BoundingBox';\nimport { Dimensions } from '../classes/Dimensions';\nimport { ObjectDetection } from '../classes/ObjectDetection';\nimport { convLayer } from '../common/index';\nimport { ConvParams, SeparableConvParams } from '../common/types';\nimport { toNetInput } from '../dom/index';\nimport { NetInput } from '../dom/NetInput';\nimport { TNetInput } from '../dom/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { sigmoid } from '../ops/index';\nimport { nonMaxSuppression } from '../ops/nonMaxSuppression';\nimport { normalize } from '../ops/normalize';\nimport { TinyYolov2Config, validateConfig } from './config';\nimport { convWithBatchNorm } from './convWithBatchNorm';\nimport { depthwiseSeparableConv } from './depthwiseSeparableConv';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { leaky } from './leaky';\nimport { ITinyYolov2Options, TinyYolov2Options } from './TinyYolov2Options';\nimport { DefaultTinyYolov2NetParams, MobilenetParams, TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2Base extends NeuralNetwork {\n public static DEFAULT_FILTER_SIZES = [\n 3, 16, 32, 64, 128, 256, 512, 1024, 1024,\n ]\n\n private _config: TinyYolov2Config\n\n constructor(config: TinyYolov2Config) {\n super('TinyYolov2');\n validateConfig(config);\n this._config = config;\n }\n\n public get config(): TinyYolov2Config {\n return this._config;\n }\n\n public get withClassScores(): boolean {\n return this.config.withClassScores || this.config.classes.length > 1;\n }\n\n public get boxEncodingSize(): number {\n return 5 + (this.withClassScores ? this.config.classes.length : 0);\n }\n\n public runTinyYolov2(x: tf.Tensor4D, params: DefaultTinyYolov2NetParams): tf.Tensor4D {\n let out = convWithBatchNorm(x, params.conv0);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = convWithBatchNorm(out, params.conv6);\n out = convWithBatchNorm(out, params.conv7);\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public runMobilenet(x: tf.Tensor4D, params: MobilenetParams): tf.Tensor4D {\n let out = this.config.isFirstLayerConv2d\n ? leaky(convLayer(x, params.conv0 as ConvParams, 'valid', false))\n : depthwiseSeparableConv(x, params.conv0 as SeparableConvParams);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = params.conv6 ? depthwiseSeparableConv(out, params.conv6) : out;\n out = params.conv7 ? depthwiseSeparableConv(out, params.conv7) : out;\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public forwardInput(input: NetInput, inputSize: number): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyYolov2 - load model before inference');\n }\n\n return tf.tidy(() => {\n // let batchTensor = input.toBatchTensor(inputSize, false).toFloat()\n let batchTensor = tf.cast(input.toBatchTensor(inputSize, false), 'float32');\n batchTensor = this.config.meanRgb\n ? normalize(batchTensor, this.config.meanRgb)\n : batchTensor;\n batchTensor = batchTensor.div(tf.scalar(256)) as tf.Tensor4D;\n\n return this.config.withSeparableConvs\n ? this.runMobilenet(batchTensor, params as MobilenetParams)\n : this.runTinyYolov2(batchTensor, params as DefaultTinyYolov2NetParams);\n });\n }\n\n public async forward(input: TNetInput, inputSize: number): Promise {\n return this.forwardInput(await toNetInput(input), inputSize);\n }\n\n public async detect(input: TNetInput, forwardParams: ITinyYolov2Options = {}): Promise {\n const { inputSize, scoreThreshold } = new TinyYolov2Options(forwardParams);\n\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput, inputSize);\n const out0 = tf.tidy(() => tf.unstack(out)[0].expandDims()) as tf.Tensor4D;\n\n const inputDimensions = {\n width: netInput.getInputWidth(0),\n height: netInput.getInputHeight(0),\n };\n\n const results = await this.extractBoxes(out0, netInput.getReshapedInputDimensions(0), scoreThreshold);\n out.dispose();\n out0.dispose();\n\n const boxes = results.map((res) => res.box);\n const scores = results.map((res) => res.score);\n const classScores = results.map((res) => res.classScore);\n const classNames = results.map((res) => this.config.classes[res.label]);\n\n const indices = nonMaxSuppression(\n boxes.map((box) => box.rescale(inputSize)),\n scores,\n this.config.iouThreshold,\n true,\n );\n\n const detections = indices.map((idx) => new ObjectDetection(\n scores[idx],\n classScores[idx],\n classNames[idx],\n boxes[idx],\n inputDimensions,\n ));\n\n return detections;\n }\n\n protected getDefaultModelName(): string {\n return '';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this.config);\n }\n\n protected extractParams(weights: Float32Array) {\n const filterSizes = this.config.filterSizes || TinyYolov2Base.DEFAULT_FILTER_SIZES;\n\n const numFilters = filterSizes ? filterSizes.length : undefined;\n if (numFilters !== 7 && numFilters !== 8 && numFilters !== 9) {\n throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${numFilters} filterSizes in config`);\n }\n return extractParams(weights, this.config, this.boxEncodingSize, filterSizes);\n }\n\n protected async extractBoxes(\n outputTensor: tf.Tensor4D,\n inputBlobDimensions: Dimensions,\n scoreThreshold?: number,\n ) {\n const { width, height } = inputBlobDimensions;\n const inputSize = Math.max(width, height);\n const correctionFactorX = inputSize / width;\n const correctionFactorY = inputSize / height;\n\n const numCells = outputTensor.shape[1];\n const numBoxes = this.config.anchors.length;\n\n const [boxesTensor, scoresTensor, classScoresTensor] = tf.tidy(() => {\n const reshaped = outputTensor.reshape([numCells, numCells, numBoxes, this.boxEncodingSize]);\n\n const boxes = reshaped.slice([0, 0, 0, 0], [numCells, numCells, numBoxes, 4]);\n const scores = reshaped.slice([0, 0, 0, 4], [numCells, numCells, numBoxes, 1]);\n const classScores = this.withClassScores\n ? tf.softmax(reshaped.slice([0, 0, 0, 5], [numCells, numCells, numBoxes, this.config.classes.length]), 3)\n : tf.scalar(0);\n return [boxes, scores, classScores];\n });\n\n const results = [] as any;\n\n const scoresData = await scoresTensor.array();\n const boxesData = await boxesTensor.array();\n for (let row = 0; row < numCells; row++) {\n for (let col = 0; col < numCells; col++) {\n for (let anchor = 0; anchor < numBoxes; anchor++) {\n const score = sigmoid(scoresData[row][col][anchor][0]);\n if (!scoreThreshold || score > scoreThreshold) {\n const ctX = ((col + sigmoid(boxesData[row][col][anchor][0])) / numCells) * correctionFactorX;\n const ctY = ((row + sigmoid(boxesData[row][col][anchor][1])) / numCells) * correctionFactorY;\n const widthLocal = ((Math.exp(boxesData[row][col][anchor][2]) * this.config.anchors[anchor].x) / numCells) * correctionFactorX;\n const heightLocal = ((Math.exp(boxesData[row][col][anchor][3]) * this.config.anchors[anchor].y) / numCells) * correctionFactorY;\n\n const x = (ctX - (widthLocal / 2));\n const y = (ctY - (heightLocal / 2));\n\n const pos = { row, col, anchor };\n const { classScore, label } = this.withClassScores\n ? await this.extractPredictedClass(classScoresTensor as tf.Tensor4D, pos)\n : { classScore: 1, label: 0 };\n\n results.push({\n box: new BoundingBox(x, y, x + widthLocal, y + heightLocal),\n score,\n classScore: score * classScore,\n label,\n ...pos,\n });\n }\n }\n }\n }\n\n boxesTensor.dispose();\n scoresTensor.dispose();\n classScoresTensor.dispose();\n\n return results;\n }\n\n private async extractPredictedClass(classesTensor: tf.Tensor4D, pos: { row: number, col: number, anchor: number }) {\n const { row, col, anchor } = pos;\n const classesData = await classesTensor.array();\n return Array(this.config.classes.length).fill(0)\n .map((_, i) => classesData[row][col][anchor][i])\n .map((classScore, label) => ({\n classScore,\n label,\n }))\n .reduce((max, curr) => (max.classScore > curr.classScore ? max : curr));\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/types';\nimport { TNetInput } from '../dom/types';\nimport {\n BOX_ANCHORS,\n BOX_ANCHORS_SEPARABLE,\n DEFAULT_MODEL_NAME,\n DEFAULT_MODEL_NAME_SEPARABLE_CONV,\n IOU_THRESHOLD,\n MEAN_RGB_SEPARABLE,\n} from './const';\nimport { TinyYolov2Base } from './TinyYolov2Base';\nimport { ITinyYolov2Options } from './TinyYolov2Options';\nimport { TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2 extends TinyYolov2Base {\n constructor(withSeparableConvs: boolean = true) {\n const config = {\n withSeparableConvs,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n ...(withSeparableConvs\n ? {\n anchors: BOX_ANCHORS_SEPARABLE,\n meanRgb: MEAN_RGB_SEPARABLE,\n }\n : {\n anchors: BOX_ANCHORS,\n withClassScores: true,\n }),\n };\n\n super(config);\n }\n\n public get withSeparableConvs(): boolean {\n return this.config.withSeparableConvs;\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME;\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { TinyYolov2 } from './TinyYolov2';\n\nexport * from './TinyYolov2Options';\n\nexport * from './config';\nexport * from './types';\n\nexport { TinyYolov2 };\n\nexport function createTinyYolov2(weights: Float32Array, withSeparableConvs: boolean = true) {\n const net = new TinyYolov2(withSeparableConvs);\n net.extractWeights(weights);\n return net;\n}\n", "import { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\n\nexport interface ITinyFaceDetectorOptions extends ITinyYolov2Options {}\n\nexport class TinyFaceDetectorOptions extends TinyYolov2Options {\n protected _name: string = 'TinyFaceDetectorOptions'\n}\n", "export class ComposableTask {\n public async then(\n // eslint-disable-next-line no-unused-vars\n onfulfilled: (value: T) => T | PromiseLike,\n ): Promise {\n return onfulfilled(await this.run());\n }\n\n public async run(): Promise {\n throw new Error('ComposableTask - run is not implemented');\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\n\nexport async function extractAllFacesAndComputeResults, TResult>(\n parentResults: TSource[],\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResults: (faces: Array) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment: (parentResult: WithFaceLandmarks) => FaceDetection = ({ alignedRect }) => alignedRect,\n) {\n const faceBoxes = parentResults.map((parentResult) => (isWithFaceLandmarks(parentResult)\n ? getRectForAlignment(parentResult)\n : parentResult.detection));\n const faces: Array = extractedFaces || (\n input instanceof tf.Tensor\n ? await extractFaceTensors(input, faceBoxes)\n : await extractFaces(input, faceBoxes)\n );\n\n const results = await computeResults(faces);\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return results;\n}\n\nexport async function extractSingleFaceAndComputeResult, TResult>(\n parentResult: TSource,\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResult: (face: HTMLCanvasElement | tf.Tensor3D) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment?: (parentResultLocal: WithFaceLandmarks) => FaceDetection,\n) {\n return extractAllFacesAndComputeResults(\n [parentResult],\n input,\n async (faces) => computeResult(faces[0]),\n extractedFaces,\n getRectForAlignment,\n );\n}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB: [number, number, number] = [117.001, 114.697, 97.404];\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/index';\nimport { TNetInput } from '../dom/index';\nimport { ITinyYolov2Options } from '../tinyYolov2/index';\nimport { TinyYolov2Base } from '../tinyYolov2/TinyYolov2Base';\nimport { TinyYolov2NetParams } from '../tinyYolov2/types';\nimport { BOX_ANCHORS, IOU_THRESHOLD, MEAN_RGB } from './const';\n\nexport class TinyFaceDetector extends TinyYolov2Base {\n constructor() {\n const config = {\n withSeparableConvs: true,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n anchors: BOX_ANCHORS,\n meanRgb: MEAN_RGB,\n isFirstLayerConv2d: true,\n filterSizes: [3, 16, 32, 64, 128, 256, 512],\n };\n\n super(config);\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_face_detector_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { AgeGenderNet } from '../ageGenderNet/AgeGenderNet';\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet';\nimport { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { ITinyYolov2Options, TinyYolov2 } from '../tinyYolov2/index';\n\nexport const nets = {\n ssdMobilenetv1: new SsdMobilenetv1(),\n tinyFaceDetector: new TinyFaceDetector(),\n tinyYolov2: new TinyYolov2(),\n faceLandmark68Net: new FaceLandmark68Net(),\n faceLandmark68TinyNet: new FaceLandmark68TinyNet(),\n faceRecognitionNet: new FaceRecognitionNet(),\n faceExpressionNet: new FaceExpressionNet(),\n ageGenderNet: new AgeGenderNet(),\n};\n\n/**\n * Attempts to detect all faces in an image using SSD Mobilenetv1 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const ssdMobilenetv1 = (input: TNetInput, options: SsdMobilenetv1Options): Promise => nets.ssdMobilenetv1.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Face Detector.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyFaceDetector = (input: TNetInput, options: TinyFaceDetectorOptions): Promise => nets.tinyFaceDetector.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Yolov2 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyYolov2Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyYolov2 = (input: TNetInput, options: ITinyYolov2Options): Promise => nets.tinyYolov2.locateFaces(input, options);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarks = (input: TNetInput): Promise => nets.faceLandmark68Net.detectLandmarks(input);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image\n * using a tinier version of the 68 point face landmark model, which is slightly\n * faster at inference, but also slightly less accurate.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarksTiny = (input: TNetInput): Promise => nets.faceLandmark68TinyNet.detectLandmarks(input);\n\n/**\n * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image,\n * which uniquely represents the features of that persons face. The computed face descriptor can\n * be used to measure the similarity between faces, by computing the euclidean distance of two\n * face descriptors.\n *\n * @param inputs The face image extracted from the aligned bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Face descriptor with 128 entries or array thereof in case of batch input.\n */\nexport const computeFaceDescriptor = (input: TNetInput): Promise => nets.faceRecognitionNet.computeFaceDescriptor(input);\n\n/**\n * Recognizes the facial expressions from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Facial expressions with corresponding probabilities or array thereof in case of batch input.\n */\nexport const recognizeFaceExpressions = (input: TNetInput): Promise => nets.faceExpressionNet.predictExpressions(input);\n\n/**\n * Predicts age and gender from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Predictions with age, gender and gender probability or array thereof in case of batch input.\n */\nexport const predictAgeAndGender = (input: TNetInput): Promise => nets.ageGenderNet.predictAgeAndGender(input);\n\nexport const loadSsdMobilenetv1Model = (url: string) => nets.ssdMobilenetv1.load(url);\nexport const loadTinyFaceDetectorModel = (url: string) => nets.tinyFaceDetector.load(url);\nexport const loadTinyYolov2Model = (url: string) => nets.tinyYolov2.load(url);\nexport const loadFaceLandmarkModel = (url: string) => nets.faceLandmark68Net.load(url);\nexport const loadFaceLandmarkTinyModel = (url: string) => nets.faceLandmark68TinyNet.load(url);\nexport const loadFaceRecognitionModel = (url: string) => nets.faceRecognitionNet.load(url);\nexport const loadFaceExpressionModel = (url: string) => nets.faceExpressionNet.load(url);\nexport const loadAgeGenderModel = (url: string) => nets.ageGenderNet.load(url);\n\n// backward compatibility\nexport const loadFaceDetectionModel = loadSsdMobilenetv1Model;\nexport const locateFaces = ssdMobilenetv1;\nexport const detectLandmarks = detectFaceLandmarks;\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm';\n\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderTask,\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\n\nexport class PredictFaceExpressionsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const faceExpressionsByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map(\n (parentResult, i) => extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]),\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const faceExpressions = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithFaceExpressions(parentResult, faceExpressions);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictAllFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm';\n\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { TNetInput } from '../dom/index';\nimport { extendWithAge, WithAge } from '../factories/WithAge';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { extendWithGender, WithGender } from '../factories/WithGender';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllFaceExpressionsTask,\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class PredictAgeAndGenderTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase>[], TSource[]> {\n public async run(): Promise>[]> {\n const parentResults = await this.parentTask;\n\n const ageAndGenderByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map((parentResult, i) => {\n const { age, gender, genderProbability } = ageAndGenderByFace[i];\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n });\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase> | undefined, TSource | undefined> {\n public async run(): Promise> | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { age, gender, genderProbability } = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictAllAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDescriptor, WithFaceDescriptor } from '../factories/WithFaceDescriptor';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class ComputeFaceDescriptorsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n ) {\n super();\n }\n}\n\nexport class ComputeAllFaceDescriptorsTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const descriptors = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n (faces) => Promise.all(faces.map((face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise)),\n null,\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return descriptors.map((descriptor, i) => extendWithFaceDescriptor(parentResults[i], descriptor));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n\nexport class ComputeSingleFaceDescriptorTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n const descriptor = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise,\n null,\n // eslint-disable-next-line no-shadow\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return extendWithFaceDescriptor(parentResult, descriptor);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm';\n\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class DetectFaceLandmarksTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected useTinyLandmarkNet: boolean,\n ) {\n super();\n }\n\n protected get landmarkNet(): FaceLandmark68Net | FaceLandmark68TinyNet {\n return this.useTinyLandmarkNet\n ? nets.faceLandmark68TinyNet\n : nets.faceLandmark68Net;\n }\n}\n\nexport class DetectAllFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n const detections = parentResults.map((res) => res.detection);\n\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, detections)\n : await extractFaces(this.input, detections);\n\n const faceLandmarksByFace = await Promise.all(faces.map(\n (face) => this.landmarkNet.detectLandmarks(face),\n )) as FaceLandmarks68[];\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return parentResults.map((parentResult, i) => extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i]));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class DetectSingleFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { detection } = parentResult;\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, [detection])\n : await extractFaces(this.input, [detection]);\n\n const landmarks = await this.landmarkNet.detectLandmarks(faces[0]) as FaceLandmarks68;\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return extendWithFaceLandmarks(parentResult, landmarks);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { TinyYolov2Options } from '../tinyYolov2/index';\nimport { ComposableTask } from './ComposableTask';\nimport { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';\nimport { nets } from './nets';\nimport { PredictAllAgeAndGenderTask, PredictSingleAgeAndGenderTask } from './PredictAgeAndGenderTask';\nimport { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionsTask } from './PredictFaceExpressionsTask';\nimport { FaceDetectionOptions } from './types';\n\nexport class DetectFacesTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n ) {\n super();\n }\n}\n\nexport class DetectAllFacesTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const { input, options } = this;\n\n // eslint-disable-next-line no-nested-ternary\n const faceDetectionFunction = options instanceof TinyFaceDetectorOptions\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyFaceDetector.locateFaces(input, options)\n : (\n // eslint-disable-next-line no-nested-ternary\n options instanceof SsdMobilenetv1Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.ssdMobilenetv1.locateFaces(input, options)\n : (\n options instanceof TinyYolov2Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyYolov2.locateFaces(input, options)\n : null\n )\n );\n\n if (!faceDetectionFunction) {\n throw new Error('detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options');\n }\n\n return faceDetectionFunction(input);\n }\n\n private runAndExtendWithFaceDetections(): Promise[]> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise[]>(async (resolve) => {\n const detections = await this.run();\n resolve(detections.map((detection) => extendWithFaceDetection({}, detection)));\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectAllFaceLandmarksTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n}\n\nexport class DetectSingleFaceTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const faceDetections = await new DetectAllFacesTask(this.input, this.options);\n let faceDetectionWithHighestScore = faceDetections[0];\n faceDetections.forEach((faceDetection) => {\n if (faceDetection.score > faceDetectionWithHighestScore.score) {\n faceDetectionWithHighestScore = faceDetection;\n }\n });\n return faceDetectionWithHighestScore;\n }\n\n private runAndExtendWithFaceDetection(): Promise | undefined> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise | undefined>(async (resolve) => {\n const detection = await this.run();\n resolve(detection ? extendWithFaceDetection<{}>({}, detection) : undefined);\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectSingleFaceLandmarksTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n}\n", "import { TNetInput } from '../dom/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { DetectAllFacesTask, DetectSingleFaceTask } from './DetectFacesTasks';\nimport { FaceDetectionOptions } from './types';\n\nexport function detectSingleFace(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectSingleFaceTask {\n return new DetectSingleFaceTask(input, options);\n}\n\nexport function detectAllFaces(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectAllFacesTask {\n return new DetectAllFacesTask(input, options);\n}\n", "import { TNetInput } from '../dom/index';\nimport { WithFaceDescriptor, WithFaceDetection, WithFaceLandmarks } from '../factories/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/index';\nimport { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\nimport { detectAllFaces } from './detectFaces';\n\n// export allFaces API for backward compatibility\n\nexport async function allFacesSsdMobilenetv1(\n input: TNetInput,\n minConfidence?: number,\n): Promise>>[]> {\n return detectAllFaces(input, new SsdMobilenetv1Options(minConfidence ? { minConfidence } : {}))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport async function allFacesTinyYolov2(\n input: TNetInput,\n forwardParams: ITinyYolov2Options = {},\n): Promise>>[]> {\n return detectAllFaces(input, new TinyYolov2Options(forwardParams))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport const allFaces = allFacesSsdMobilenetv1;\n", "export function euclideanDistance(arr1: number[] | Float32Array, arr2: number[] | Float32Array) {\n if (arr1.length !== arr2.length)\n throw new Error('euclideanDistance: arr1.length !== arr2.length')\n\n const desc1 = Array.from(arr1)\n const desc2 = Array.from(arr2)\n\n return Math.sqrt(\n desc1\n .map((val, i) => val - desc2[i])\n .reduce((res, diff) => res + Math.pow(diff, 2), 0)\n )\n}", "import { FaceMatch } from '../classes/FaceMatch';\nimport { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors';\nimport { euclideanDistance } from '../euclideanDistance';\nimport { WithFaceDescriptor } from '../factories/index';\n\nexport class FaceMatcher {\n private _labeledDescriptors: LabeledFaceDescriptors[]\n\n private _distanceThreshold: number\n\n constructor(\n inputs: LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>,\n distanceThreshold: number = 0.6,\n ) {\n this._distanceThreshold = distanceThreshold;\n\n const inputArray = Array.isArray(inputs) ? inputs : [inputs];\n\n if (!inputArray.length) {\n throw new Error('FaceRecognizer.constructor - expected atleast one input');\n }\n\n let count = 1;\n const createUniqueLabel = () => `person ${count++}`;\n\n this._labeledDescriptors = inputArray.map((desc) => {\n if (desc instanceof LabeledFaceDescriptors) {\n return desc;\n }\n\n if (desc instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc]);\n }\n\n if (desc.descriptor && desc.descriptor instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]);\n }\n\n throw new Error('FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>');\n });\n }\n\n public get labeledDescriptors(): LabeledFaceDescriptors[] { return this._labeledDescriptors; }\n\n public get distanceThreshold(): number { return this._distanceThreshold; }\n\n public computeMeanDistance(queryDescriptor: Float32Array, descriptors: Float32Array[]): number {\n return descriptors\n .map((d) => euclideanDistance(d, queryDescriptor))\n .reduce((d1, d2) => d1 + d2, 0)\n / (descriptors.length || 1);\n }\n\n public matchDescriptor(queryDescriptor: Float32Array): FaceMatch {\n return this.labeledDescriptors\n .map(({ descriptors, label }) => new FaceMatch(\n label,\n this.computeMeanDistance(queryDescriptor, descriptors),\n ))\n .reduce((best, curr) => (best.distance < curr.distance ? best : curr));\n }\n\n public findBestMatch(queryDescriptor: Float32Array): FaceMatch {\n const bestMatch = this.matchDescriptor(queryDescriptor);\n return bestMatch.distance < this.distanceThreshold\n ? bestMatch\n : new FaceMatch('unknown', bestMatch.distance);\n }\n\n public toJSON(): any {\n return {\n distanceThreshold: this.distanceThreshold,\n labeledDescriptors: this.labeledDescriptors.map((ld) => ld.toJSON()),\n };\n }\n\n public static fromJSON(json: any): FaceMatcher {\n const labeledDescriptors = json.labeledDescriptors\n .map((ld: any) => LabeledFaceDescriptors.fromJSON(ld));\n return new FaceMatcher(labeledDescriptors, json.distanceThreshold);\n }\n}\n", "import { TinyFaceDetector } from './TinyFaceDetector';\n\nexport * from './TinyFaceDetector';\nexport * from './TinyFaceDetectorOptions';\n\nexport function createTinyFaceDetector(weights: Float32Array) {\n const net = new TinyFaceDetector();\n net.extractWeights(weights);\n return net;\n}\n", "import { Dimensions, IDimensions } from './classes/index';\nimport { FaceDetection } from './classes/FaceDetection';\nimport { FaceLandmarks } from './classes/FaceLandmarks';\nimport { extendWithFaceDetection, isWithFaceDetection } from './factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, isWithFaceLandmarks } from './factories/WithFaceLandmarks';\n\nexport function resizeResults(results: T, dimensions: IDimensions): T {\n\n const { width, height } = new Dimensions(dimensions.width, dimensions.height)\n\n if (width <= 0 || height <= 0) {\n throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({ width, height })}`)\n }\n\n if (Array.isArray(results)) {\n // return results.map(obj => resizeResults(obj, { width, height })) as any as T\n return (results as Array).map(obj => resizeResults(obj, { width, height } as IDimensions)) as any as T\n }\n\n if (isWithFaceLandmarks(results)) {\n const resizedDetection = results.detection.forSize(width, height)\n const resizedLandmarks = results.unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height)\n return extendWithFaceLandmarks(extendWithFaceDetection(results, resizedDetection), resizedLandmarks)\n }\n\n if (isWithFaceDetection(results)) {\n return extendWithFaceDetection(results, results.detection.forSize(width, height))\n }\n\n if (results instanceof FaceLandmarks || results instanceof FaceDetection) {\n return (results as any).forSize(width, height)\n }\n\n return results\n}"], "mappings": "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,EAAI,KAC7D,YAAc,SACd,cAAc,KAAK,UAGrB,UAAa,EAAG,EAAI,YAAa,EAAE,GACjC,gBAAoB,aAAK,kBAAkB,EAAoB,mBAC7C,SAAQ,eAAe,GAAI,QAAS,kBAElD,OAAM,CAAC,OAAQ,CAAC,EAAG,UAAW,EAAG,aAAc,QAAA,sBAE/C,OAAK,CAAC,OAAQ,CAAC,EAAG,MAAO,QAAA,SAAS,MAAO,CAAC,MAAO,mBAEjD,UAAS,CAAC,OAAQ,CAAC,EAAG,WAAY,EAAG,GAAI,QAAA,yBAEzC,MAAI,CAAC,OAAQ,CAAC,EAAG,OAAM,QAAA,SAAS,MAAO,CAAC,KAAM,EAAG,SAAU,MAC/D,IAAI,KAAK,eACT,cAAc,KAAK,WACnB,cAAc,KAAK,MACnB,cAAc,KAAK,YACnB,cAAc,KAAK,OACnB,cAAc,KAAK,eAGrB,WAAe,KAAK,CAAC,OAAQ,IAAK,QAAA,SAAS,MAAO,CAAC,KAAM,KAEzD,MAAA,eAAc,QAAQ,GAAK,SAAQ,8BAA8B,IAE1D,OAGF,6BAA+C,CACpD,WAAY,mBACZ,YAAa,MACb,WAAY,mCC2FwB,CACpC,mBACA,UACA,WACA,YACA,UACA,WACA,UACA,UACA,aACA,aACA,WACA,YACA,WACA,YACA,YACA,cACA,gBACA,qBACA,mBACA,kBACA,gBACA,qBACA,eACA,WACA,WACA,WACA,cACA,iBACA,aACA,2BACA,0BACA,aACA,6BACA,4BACA,aACA,UACA,WACA,oBACA,aACA,oBACA,mBACA,4BACA,0CACA,yCACA,WACA,iBACA,8BACA,+BACA,cACA,UACA,eACA,YACA,UACA,UACA,iBACA,YACA,UACA,WACA,oBACA,YACA,eACA,kBACA,2BACA,eACA,eACA,cACA,mBACA,eACA,WACA,WACA,eACA,YACA,YACA,gBACA,WACA,gBACA,eACA,UACA,YACA,iBACA,iBACA,gBACA,UACA,cACA,cACA,cACA,gBACA,qBACA,mBACA,wBACA,UACA,WACA,UACA,cACA,gBACA,UACA,kBACA,eACA,UACA,0BACA,0BACA,0BACA,eACA,aACA,eACA,WACA,YACA,UACA,YACA,WAC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AAiB,UAAW,kBACjC,SAAQ,cAAc,QAAS,CAAC,GAAG,aAAa,OAG/D,GAFA,UAAU,KAAK,QAEX,OAAO,MAAM,KAAO,aACtB,MAAO,QAET,cAAkB,OAAM,CACtB,QAAA,SACA,MAAO,CAAC,MAAO,EAAG,KAAM,aAAa,KAAM,EAAG,MAAO,sBAEtC,MAAK,CACpB,OAAQ,CAAC,EAAG,WACZ,QAAA,SACA,MAAO,CAAC,KAAM,CAAC,QAAS,eAG1B,UAAU,KAAK,WACf,UAAU,KAAK,UAEf,YACI,aAAa,OAAQ,UAAW,SAAU,MAAO,cACrD,MAAO,sBAGO,aAChB,IAAK,qBAAsB,WAAY,YAAa,sBAGpD,UAAQ,CAAC,OAAQ,CAAC,EAAG,aAAc,QAAA,SAAS,MAAO,CAAC,MAAO,mBAElD,SACb,GAAI,aAAe,MACjB,UAAU,KAAK,UACf,SAAa,qBAAa,uBAAuB,aACjD,OAAS,YAAU,CAAC,OAAQ,CAAC,EAAG,QAAS,QAAA,SAAS,MAAO,CAAC,QAG5D,MAAA,WAAU,QAAQ,GAAK,SAAQ,8BAA8B,IACtD,OAGF,8BAA+C,CACpD,WAAY,mBACZ,YAAa,QACb,WAAY,oCC4DwB,CACpC,UACA,cACA,oBACA,WACA,YACA,aACA,WACA,YACA,WACA,WACA,cACA,cACA,YACA,aACA,aACA,YACA,aACA,iBACA,eACA,oBACA,mBACA,mBACA,iBACA,sBACA,gBACA,YACA,YACA,kBACA,kBACA,eACA,cACA,4BACA,2BACA,cACA,8BACA,0BACA,cACA,WACA,YACA,qBACA,cACA,qBACA,oBACA,2CACA,0CACA,6BACA,YACA,iBACA,WACA,eACA,aACA,WACA,WACA,kBACA,aACA,WACA,YACA,qBACA,aACA,gBACA,iBACA,mBACA,4BACA,gBACA,gBACA,eACA,oBACA,gBACA,YACA,YACA,gBACA,aACA,aACA,iBACA,YACA,iBACA,gBACA,aACA,WACA,kBACA,kBACA,iBACA,WACA,iBACA,eACA,oBACA,mBACA,yBACA,eACA,YACA,WACA,eACA,iBACA,WACA,mBACA,gBACA,WACA,2BACA,2BACA,2BACA,gBACA,cACA,gBACA,YACA,aACA,WACA,aACA,YACA,aACA,YACA,eACA,kBACA,aACA,YACA,eACA,sBACA,0BACA,6BACA,iCACA,eACA,wBACA,aACA,aACA,iBACA,cACA,YACA,eACA,YACA,WACA,YACA,aACA,eACA,gBACA,sBACA,qBACA,cACA,YACA,cACA,yBACA,YACA,oBACA,WACA,WACA,WACA,YACA,YACA,YACA,iBACA,cACA,cACA,0BACA,kBAGF,uBAA2B,gBACzB,eAAe,cErUjB,cAAgB,kBCmCO,CACrB,YAAa,QACb,mBAAoB,UACpB,qBAAsB,UACtB,YAAa,SACb,cAAe,SACf,iBAAkB,SAClB,KAAQ,oBC3BV,AAAA,qBACE,UAAA,UAAA,QAAA,GAAA,UACA,UAAA,UAAA,MAAA,GAAA,QACA,UAAA,UAAA,KAAA,GAAA,OACA,UAAA,UAAA,OAAA,GAAA,SACA,UAAA,UAAA,UAAA,GAAA,cALU,UAAA,UAAQ,KASpB,sBAAA,AAAA,8BACE,mBAAA,mBAAA,OAAA,GAAA,SACA,mBAAA,mBAAA,KAAA,GAAA,OACA,mBAAA,mBAAA,MAAA,GAAA,QACA,mBAAA,mBAAA,MAAA,GAAA,QACA,mBAAA,mBAAA,UAAA,GAAA,cALU,mBAAA,mBAAiB,KCJ7B,oBAOA,yBACE,gBAAkB,SAAQ,KAAK,MAAM,aAAc,KAAiB,CAClE,SACA,QACA,SACA,SACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,WAIJ,gCAKE,IAAO,OAAQ,iBAAS,OAAS,MAC1B,EAAG,EAAG,KAAM,wBAA0B,OAE7C,GAAI,EAAE,QAAU,WAAa,EAAE,QAAU,UACvC,KAAM,IAAI,OACN,+DAGN,IAAO,WAAY,WAAY,uBAAY,gBAAkB,UACjD,SAAQ,UAAU,IAAI,EAAE,QAAQ,OAChC,SAAQ,UAAU,IAAI,EAAE,QAAQ,UAE/B,EACb,GAAI,MAAQ,MACV,aAAiB,SAAQ,UAAU,IAAI,KAAK,QAC5C,GAAI,SAAS,MAAM,SAAW,EAC5B,KAAM,IAAI,OACN,uDACQ,SAAS,MAAM,WAE7B,OAAS,SAAS,GAEpB,6BAAiC,wBAA0B,KACvD,EACA,SAAQ,UAAU,IAAI,uBAAuB,QAAQ,mBAErD,kBAAkB,aACtB,GAAI,iBAAmB,KACrB,KAAM,IAAI,OACN,GAAG,iFAIT,YAAgB,WAAa,EAAE,MAAM,GAAK,EAAE,MAAM,YACjC,WAAa,EAAE,MAAM,GAAK,EAAE,MAAM,YAClC,EAAE,MAAM,OAEb,SAAQ,WAAW,CAAC,SAAU,QAAS,UAAW,EAAE,aAClD,SAAQ,UAAU,IAAI,IAAI,QAAQ,eAE5B,GAAI,YAAW,GAAI,YAAW,EAAE,OAAO,oBACvC,GAAI,YAAW,GAAI,YAAW,EAAE,OAAO,QAE3D,MAAA,iBACI,IAAK,YAAa,EAAE,MAAM,OAAQ,IAAK,YAAa,EAAE,MAAM,OAC5D,WAAY,WAAY,gBAAiB,OAAQ,yBACjD,gBAAkB,EAAG,OAElB,IAGF,sBAAwC,CAC7C,WAAY,aACZ,YAAa,OACb,UAAW,MACX,WAAY,kBCvFR,6CACJ,cAEA,8BACE,UACI,SAAQ,KAAK,MAAM,WAAY,KAAiB,CAAC,SAAU,WAGjE,2BAEE,IAAO,iBAAS,QAAS,IAAM,SACnB,SAAQ,UAAU,IAAI,EAAE,QAAQ,OAChC,SAAQ,WAAW,EAAE,MAAO,EAAE,aAC5B,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAGhD,MAAI,cAAK,cAAc,IAAI,SAAW,GAItC,UAAS,IAAK,OACP,IAGT,MAAO,CAAC,WAAY,YAAa,OAAQ,UAAA,WAAW,WAAA,aCzB/C,eAAgC,wBAAwB,KCGzD,4EAGJ,cAKA,8BACE,UAAW,SAAQ,KAAK,MAAM,WAAY,KAAiB,CACzD,SACA,QACA,SACA,SACA,QACA,SACA,SACA,WAIJ,2BAEE,IAAO,iBAAS,QAAU,MACnB,EAAG,GAAK,WACH,SAAQ,UAAU,IAAI,EAAE,QAAQ,OAChC,SAAQ,UAAU,IAAI,EAAE,QAAQ,cAEzB,OAAS,KAAO,MAAQ,EAAE,eAC5B,qBAAa,2BAA2B,EAAE,MAAO,EAAE,WACxD,SAAQ,WAAW,SAAU,YAGzC,GAAI,aAAK,cAAc,YAAc,EACnC,MAAO,KAGT,gBAAoB,GAAI,YAAW,GAAI,YAAW,EAAE,OAAO,oBACvC,GAAI,YAAW,GAAI,YAAW,EAAE,OAAO,cAC7C,SAAQ,UAAU,IAAI,IAAI,QAAQ,eAC7B,IAAM,UACrB,IAAK,YAAa,EAAE,MAAM,OAAQ,IAAK,YAAa,EAAE,MAAM,OAC5D,SAAS,EAAE,OAAQ,OAGvB,GAAI,yBAAyB,EAAE,QAAU,UACvC,MAAA,eACO,IAGT,mBAAuB,qBAAa,iBAAiB,EAAE,MAAO,yBACvC,qBAAa,iBAAiB,EAAE,MAAO,0BACtC,eAAe,MAAM,OAAU,IAAM,mBACrC,eAAe,MAAM,OAAU,IAAM,GAC7D,GAAI,iBAAmB,gBACrB,MAAA,eACO,IAEP,KAAM,IAAI,OACN,0DACiB,EAAE,SAAS,eAIpC,MAAO,CAAC,WAAY,YAAa,OAAQ,UAAA,WAAW,WAAA,aClEtD,0BAA8B,cAG1B,yBAAyB,IAAK,gCCGlC,6BACE,SAAW,SAAQ,KAAK,MAAM,KAAM,KAAiB,CACnD,QACA,SACA,SACA,WAIJ,oBACE,IAAO,OAAQ,kBAAW,SACd,SAAQ,WAAW,OAAO,GAAG,MAAO,OAAO,GAAG,OAG1D,GAAI,aAAK,cAAc,IAAI,SAAW,EACpC,MAAO,KAGT,aAAiB,OAAO,IAAI,GAAK,SAAQ,UAAU,IAAI,EAAE,QAAQ,kBAC3C,GAAI,YAAW,GAAI,YAAW,UAAU,cAChD,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAChD,MAAA,UAAS,cAAe,SAAS,OAAQ,SAAS,IAAI,OAAQ,OAEvD,IAGF,gBAAiC,CACtC,WAAY,KACZ,YAAa,OACb,UACA,WAAY,MCnCR,yBAEJ,IAAO,QAAS,GAAI,kBAAW,SACnB,SAAQ,WAAW,EAAE,MAAO,EAAE,cAC3B,SAAQ,mBAAmB,WAC1B,SAAQ,mBAAmB,KAC3C,MAAA,SAAQ,IAAI,QACL,IAGF,oBAAqC,CAC1C,WAAY,SACZ,YAAa,OACb,WAAY,yBCPd,0BACE,cAAgB,SAAQ,KAAK,MAAM,UAAW,KAAiB,CAC7D,SACA,QACA,SACA,SACA,SACA,QACA,WAIE,2BAIJ,IAAO,OAAQ,iBAAS,OAAS,yBAGJ,kBAAkB,OAAO,EAAE,MAAO,MAAM,iBAEpD,GACjB,UAAa,EAAG,EAAI,KAAK,OAAQ,IAC3B,KAAK,KAAO,GACd,YAAa,IAGjB,aAAiB,iBAAgB,OAAO,EAAE,MAAO,MAAM,QAC7C,CACR,OAAQ,OAAO,EAAE,OACjB,MAAO,aACP,MAAO,OAAO,EAAE,OAGlB,GAAI,YACF,WAAe,UAAS,CAAC,OAAQ,QAAA,WACjC,MAAA,QAAO,MAAQ,SACR,OAGT,QAAY,SAAQ,WAAW,SAAU,EAAE,WAC/B,SAAQ,UAAU,IAAI,EAAE,QAAQ,SAC9B,SAAQ,UAAU,IAAI,IAAI,QAAQ,aAC9B,GAAI,YAAW,GAAI,YAAW,MAAM,oBAClC,GAAI,YAAW,GAAI,YAAW,EAAE,OAAO,QAE3D,MAAA,eACI,IAAK,YAAa,EAAE,MAAM,OAAQ,SAAS,EAAE,OAAQ,MAAO,UAC5D,KAAK,QACF,IAGT,wCACE,aAAiB,GAAI,OAAM,QAAQ,QACnC,UAAa,EAAG,EAAI,SAAS,OAAQ,IACnC,SAAS,GAAK,QAAQ,KAAK,IAE7B,MAAO,UAGT,uCAEE,aAA2B,WACD,GAC1B,UAAa,EAAG,EAAI,MAAM,OAAQ,EAAE,EAC9B,MAAM,KAAO,GACf,SAAS,KAAK,MAAM,IAElB,MAAM,KAAK,MAAQ,GACrB,QAAQ,KAAK,KAAK,IAGtB,UAAa,EAAG,EAAI,QAAQ,OAAQ,EAAE,GACpC,cAAgB,GAChB,UAAa,EAAG,EAAI,QAAQ,OAAQ,EAAE,EAChC,QAAQ,IAAM,GACb,aAAc,IAAM,QAAQ,WAAa,QAAQ,KACpD,WAAY,GAGhB,QAAQ,WAAa,EAEvB,MAAO,CAAC,SAAU,SAGb,qBAAsC,CAC3C,WAAY,UACZ,YAAa,OACb,WAAY,YACZ,UAAW,QCxFP,kDAOJ,WAAe,EAAE,YACH,EAAE,MAAM,oBAED,aAAK,eAAe,KAAM,aACpC,0BACU,qBAAa,mBAAmB,KAAM,mBACzC,wBACO,GACzB,GAAI,cAAgB,MAClB,aAA2B,GAAI,OAAM,OACrC,UAAa,EAAG,EAAI,SAAS,OAAQ,IACnC,SAAS,GAAK,OAAO,aAAa,IAGpC,KAAO,qBAAa,iBAAiB,KAAK,OAAQ,OAClD,YACI,YAAU,CAAC,OAAQ,CAAC,GAAI,MAAO,CAAC,KAAM,cAAe,QAAA,WAEzD,QAAY,SAAQ,UAAU,IAAI,EAAE,QAAQ,gBACvB,SAAQ,UAAU,IAAI,YAAY,QAAQ,GAC3D,eAAiB,KACnB,oBAAqB,IAIzB,MAAO,CAAC,WAAY,YAAa,aAAc,KAAM,oBCrCvD,cAIA,0BACE,UAAW,SAAQ,KAAK,MAAM,OAAQ,KAAiB,CACrD,SACA,SACA,SACA,SACA,WAIJ,sBAEE,IAAO,iBAAS,OAAQ,OAAS,MAC1B,MAAQ,OACR,GAAK,WACA,SAAQ,UAAU,IAAI,EAAE,QAAQ,WAC9B,WACF,GAEL,WAAY,KAAM,oBACrB,wBAAwB,EAAG,KAAM,UAErC,GAAI,oBACF,iBAAqB,SAAQ,UAAU,IAAI,WAAW,QAAQ,GAC1D,eAAiB,KAGnB,QAAQ,WACR,QAAU,cAId,aAAiB,OAAM,MAAM,MAAM,EAAG,QAC1B,SAAQ,WAAW,SAAU,eAC3B,SAAQ,UAAU,IAAI,IAAI,QAAQ,aAC9B,aAAK,cAAc,IAAI,iBACvB,OAAM,MAAM,KAAK,IACnC,MAAA,WAAS,QAAS,SAAS,OAAM,OAAQ,UAAW,UAAW,OAE3D,oBAEF,SAAQ,YAAY,WAAW,QAG1B,IAGF,kBAAmC,CACxC,WAAY,OACZ,YAAa,OACb,WAAY,OACZ,UAAW,oBCpDb,0BACE,YAAc,SAAQ,KAAK,MAAM,QAAS,KAAiB,CACzD,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,WAIJ,wBAEE,IAAO,OAAQ,MAAO,kBAAW,OAEvB,OAAO,MACL,SAAQ,UAAU,IAAI,EAAE,QAAQ,IAErC,WAAY,QAAS,UAAK,iBAAmB,eACnC,qBAAa,kBAC1B,EAAE,MAAO,WAAY,QAAS,EAAmB,MAAK,8BAErC,SAAS,yBACV,SAAS,mBACd,SAAS,QAAQ,aACf,SAAS,QAAQ,gBAChB,SAAS,QAAQ,eACnB,SAAS,QAAQ,kBACZ,SAAS,yBACV,SAAS,qBACZ,SAAS,WAE1B,GAAI,SAAS,aAAe,eAC1B,KAAM,IAAI,OACN,6CACG,SAAS,2CAGlB,GAAI,SAAS,gBAAkB,GAAK,SAAS,iBAAmB,EAC9D,KAAM,IAAI,OACN,0EACQ,SAAS,mBAAmB,SAAS,mBAGnD,QAAY,SAAQ,WAAW,SAAS,SAAU,iBACpC,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAEhD,MAAA,aACI,IAAK,EAAE,MAAM,GAAI,EAAE,MAAM,GAAI,EAAE,MAAM,GAAI,aAAc,YACvD,OAAQ,SAAU,UAAW,QAAS,aAAc,YAAa,SACjE,OACG,IAGF,mBAAoC,CACzC,WAAY,QACZ,YAAa,OACb,UAAW,OACX,WAAY,UCxER,yBAKJ,IAAO,OAAQ,OAAS,MACjB,GAAK,QACL,OAAS,YAEF,aAAK,cAAc,EAAE,cACpB,aAAK,uBAAuB,MAAO,OAElD,MAAA,cAAK,OACD,QAAU,aAAK,cAAc,QAC7B,IAAM,cAAc,sBAAsB,EAAE,yEAGzC,CAAC,OAAQ,EAAE,OAAQ,MAAO,OAAQ,MAAO,EAAE,OAG7C,mBAAoC,CACzC,WAAY,QACZ,YAAa,OACb,WAAY,2BChBd,0BACE,gBAAkB,SAAQ,KAAK,MAAM,YAAa,KAAiB,CACjE,SACA,QACA,SACA,SACA,QACA,SACA,SACA,SACA,WAIJ,4BAKE,IAAO,OAAQ,iBAAS,OAAS,MAC1B,EAAG,GAAK,QACR,WAAY,YAAc,MAEjC,GAAI,EAAE,QAAU,WAAa,EAAE,QAAU,UACvC,KAAM,IAAI,OACN,8DAGN,UAAc,EAAE,MAAM,aACR,EAAE,MAAM,mBAEF,WAAa,EAAE,MAAM,MAAQ,GAAK,EAAE,MAAM,MAAQ,eAClD,WAAa,EAAE,MAAM,MAAQ,GAAK,EAAE,MAAM,MAAQ,eAElD,WAAa,EAAE,MAAM,MAAQ,GAAK,EAAE,MAAM,MAAQ,eAClD,WAAa,EAAE,MAAM,MAAQ,GAAK,EAAE,MAAM,MAAQ,cAEnD,EAAE,MAAM,MAAM,EAAG,eACjB,EAAE,MAAM,MAAM,EAAG,cAElB,aAAK,cAAc,sBACnB,aAAK,cAAc,gCAGjC,YAAc,WAAa,YAAc,GAAK,YAAc,EAEhE,aAAK,OACD,OAAS,GAAK,OAAS,GAAK,oBAC5B,IAAM,uJAEsB,oBAAoB,gBAEpD,sBACI,UAAY,UAAY,EAAE,MAAM,MAAM,EAAG,IAAM,EAAE,MAAM,MAAM,EAAG,aACnD,kBAAkB,OAAO,CAAC,YAAa,cAExD,aAAK,OACD,cAAgB,YAChB,IAAM,kCAAkC,qBACjC,uCAAuC,EAAE,aACzC,EAAE,wBAAwB,6BACV,0BAE3B,aAAiB,WAAa,CAAC,UAAW,YAAa,aACzB,CAAC,UAAW,YAAa,sBACtC,WAAa,CAAC,UAAW,YAAa,aACzB,CAAC,UAAW,YAAa,iBAG3C,UAAQ,CAAC,OAAQ,CAAC,EAAG,GAAI,QAAA,SAAS,MAAO,CAAC,MAAO,gBACjD,UAAQ,CAAC,OAAQ,CAAC,EAAG,GAAI,QAAA,SAAS,MAAO,CAAC,MAAO,kBAE/C,SAAQ,UAAU,IAAI,IAAI,QAAQ,SAClC,SAAQ,UAAU,IAAI,IAAI,QAAQ,WAEhC,WAAa,IAAI,MAAM,GAAK,IAAI,MAAM,YACrC,WAAa,IAAI,MAAM,GAAK,IAAI,MAAM,YACtC,KAAK,IAAI,UAAW,eAEzB,SAAQ,WAAW,CAAC,SAAU,QAAS,UAAW,IAAI,aACpD,SAAQ,UAAU,IAAI,IAAI,QAAQ,eAE5B,GAAI,YAAW,GAAI,YAAW,IAAI,OAAO,oBACzC,GAAI,YAAW,GAAI,YAAW,IAAI,OAAO,QAE7D,MAAA,iBACI,MAAO,YAAa,IAAI,MAAM,OAAQ,MAAO,YAC7C,IAAI,MAAM,OAAQ,WAAY,WAAY,OAE9C,IAAI,MAAQ,SACL,IAGF,uBAAwC,CAC7C,WAAY,YACZ,YAAa,OACb,UAAW,OACX,WAAY,cCvGR,sBAGJ,IAAO,QAAS,GAAI,OAAQ,OAAQ,kBAAW,SACnC,SAAQ,WAAW,EAAE,MAAO,cACzB,SAAQ,mBAAmB,WAC1B,SAAQ,mBAAmB,KAC3C,MAAA,SAAQ,IAAI,QACL,IAGF,gBAAiC,CACtC,WAAY,KACZ,YAAa,OACb,WAAY,iBCbd,0BACE,SAAW,SAAQ,KAAK,MAAM,YAAa,KAAiB,CAC1D,SACA,SACA,SACA,WAIJ,qBAKE,IAAO,OAAQ,iBAAS,OAAS,MAC1B,GAAK,QACL,aAAc,cAAgB,UACzB,SAAQ,UAAU,IAAI,EAAE,QAAQ,OAChC,SAAQ,WAAW,EAAE,MAAO,EAAE,aAC5B,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAChD,MAAA,UAAS,IAAK,aAAc,aAAc,OACnC,IAGF,uBAAwC,CAC7C,WAAY,YACZ,YAAa,OACb,UAAW,OACX,WAAY,OC7BR,wBAEJ,IAAO,OAAQ,kBAAW,UAEb,aAAK,eAAe,KAAK,MAAM,KAAM,OAAO,GAAG,OAAO,YAElD,qBAAa,gBAAgB,OAAO,IAAI,GAAK,EAAE,OAAQ,cAGxD,OAAO,OAAO,GAAK,aAAK,cAAc,EAAE,OAAS,GACjE,GAAI,QAAQ,SAAW,EACrB,MAAO,WAAS,CAAC,OAAQ,CAAC,EAAG,QAAQ,IAAK,QAAA,WAG5C,QAAY,SAAQ,WAAW,SAAU,OAAO,GAAG,OAEnD,GAAI,aAAK,cAAc,YAAc,EACnC,MAAO,KAGT,WAAe,QAAQ,IAAI,GAAK,EAAE,OAClC,qBAAa,uBAAuB,OAAQ,MAE5C,aAAiB,aAAK,cAAc,QAAQ,GAAG,MAAM,MAAM,EAAG,oBAC3C,YACD,QAAQ,IAAI,SAC5B,aAAiB,aAAK,cAAc,OAAM,MAAM,MAAM,OACtD,MAAA,eAAgB,SACT,kBAEM,QAAQ,IAAI,QAAS,SAAQ,mBAAmB,iBAC/C,SAAQ,mBAAmB,KAC3C,UAAa,EAAG,EAAI,SAAU,KAC5B,cAAgB,EAAI,aACpB,UAAa,EAAG,EAAI,OAAO,OAAQ,KACjC,aAAiB,UAAU,YACV,EAAI,cACR,OAAO,GAAG,SAAS,SAAU,SAAW,UACrD,QAAQ,IAAI,KAAM,WAClB,WAAa,UAGjB,MAAO,KAGF,kBAAmC,CACxC,WAAY,OACZ,YAAa,OACb,WAAY,qBCzCd,0BACE,WAAa,SAAQ,KAAK,MAAM,OAAQ,KAAiB,CACvD,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,WAIJ,wBAEE,IAAO,OAAQ,MAAO,kBAAW,MAE1B,EAAG,QAAU,WACR,SAAQ,UAAU,IAAI,EAAE,QAAQ,YAC3B,SAAQ,UAAU,IAAI,OAAO,QAAQ,IAE/C,QAAS,UAAW,UAAK,gBAAiB,YAAc,kBAC3C,qBAAa,wBAAwB,qBACxC,qBAAa,kBACzB,EAAe,MAAQ,OAAoB,MAAO,QAAS,UAC5D,MAAK,gBAAiB,GAAO,0BAEZ,SAAS,yBACV,SAAS,mBACd,SAAS,QAAQ,aACf,SAAS,QAAQ,gBAChB,SAAS,QAAQ,eACnB,SAAS,QAAQ,oBACV,SAAS,6BACV,SAAS,2BACV,SAAS,yBACV,SAAS,0BACP,SAAS,0BACR,SAAS,sBACd,SAAS,QAAQ,OAAS,OAAS,EAAI,EAEzD,GAAI,SAAS,aAAe,eAC1B,KAAM,IAAI,OACN,oDACG,SAAS,2CAGlB,QAAY,SAAQ,WAAW,SAAS,SAAU,iBACpC,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAChD,MAAA,YACI,IAAK,EAAE,MAAM,GAAI,EAAE,MAAM,GAAI,EAAE,MAAM,GAAI,SAAU,aACnD,YAAa,OAAQ,SAAU,UAAW,QAAS,UACnD,eAAgB,cAAe,aAAc,YAAa,cAC1D,eAAgB,OACb,IAGF,kBAAmC,CACxC,WAAY,OACZ,YAAa,OACb,UAAW,OACX,WAAY,kCCtEd,0BACE,wBAA0B,SAAQ,KAAK,MAAM,oBAAqB,KAAM,CACtE,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,WAIJ,oCAKE,IAAO,iBAAS,OAAQ,OAAS,MAC1B,GAAI,QAAU,QACd,QAAS,UAAK,WAAY,gBAAiB,YAAc,gBAE9C,cAEE,qBAAa,wBAAwB,qBACxC,qBAAa,kBAC1B,WAAY,OAAO,MAA2C,QAC9D,UAAW,MAAK,gBAAiB,GAAuB,cAE1D,UACA,aACA,YACA,WACA,SACA,QACA,YACA,UACA,SACA,aACA,aACE,gBAEW,aAAe,EAAI,SAAS,QAAQ,YACnC,YAAc,EAAI,SAAS,QAAQ,oBAE5B,SAAS,aAAe,yBAC7B,aAAK,eAAe,SAAS,mBAC7B,aAAK,eAAe,GAAG,2BACX,aAAK,eAAe,OAAO,oBACpC,UAAU,cACZ,eAAiB,UAAU,GAAK,UAAU,cAC1C,eAAiB,UAAU,GAAK,iBAC5B,eAAiB,EAAI,UAAU,gBACjC,UAAU,cACZ,eAAiB,UAAU,GAAK,UAAU,cAC1C,eAAiB,UAAU,GAAK,iBAC5B,eAAiB,EAAI,UAAU,OAE1C,SAAQ,WAAW,SAAS,QAAS,iBACnC,SAAQ,UAAU,IAAI,IAAI,QAAQ,QACnC,SAAQ,UAAU,IAAI,GAAG,QAAQ,YAC7B,SAAQ,UAAU,IAAI,OAAO,QAAQ,GAEtD,MAAA,yBACI,KAAM,SAAU,UAAW,aAAc,YAAa,SAAU,QAChE,WAAY,UAAW,SAAU,YAAa,aAAc,YAC5D,OAAQ,QAAS,MAAO,MAAO,MAAO,aAAc,WACpD,WAAY,eAAgB,aAAc,WAAY,WACtD,eAAgB,OACb,IAGF,+BAAgD,CACrD,WAAY,oBACZ,YAAa,OACb,UAAW,OACX,WAAY,iCCzGyB,wBAAwB,yBCG/D,AAAA,gCACE,qBAAA,qBAAA,SAAA,GAAA,WACA,qBAAA,qBAAA,QAAA,GAAA,YAFG,qBAAA,qBAAmB,KAKxB,sBAKA,0BACE,kBAAoB,SAAQ,KAAK,MAAM,cAAe,KAAe,CACnE,SACA,SACA,SACA,SACA,QACA,SACA,SACA,SACA,SACA,WAIJ,8BAKE,IAAO,iBAAS,OAAQ,OAAS,MAC1B,OAAQ,mBAAoB,UAAY,OACxC,aAAO,MAAO,QAAU,gBAEd,MAAM,MAAM,0BAEG,kBACf,CAAC,SAAU,WAAY,UAAW,OAAM,MAAM,eAE9C,SAAQ,UAAU,IAAI,OAAM,mBAEzC,OAAM,QAAU,WAClB,YAAa,OAAK,CAAC,QAAA,SAAS,OAAQ,CAAC,EAAG,QAAQ,MAAO,CAAC,MAAO,aAC/D,WAAa,SAAQ,UAAU,IAAI,WAAW,SAGhD,aAAiB,WAAW,WACZ,SAAQ,UAAU,IAAI,MAAM,QAAQ,YACnC,SAAQ,UAAU,IAAI,OAAO,QAAQ,OAE1C,SAAQ,WAAW,SAAU,iBAC3B,SAAQ,UAAU,IAAI,IAAI,QAAQ,oBAEvB,GAAI,YAAW,GAAI,YAAW,OAAM,OAAO,QAEpE,MAAA,mBACI,SAAU,QAAS,SAAU,SAAU,iBAAkB,WACzD,UACA,oBAAoB,QACpB,mBAAoB,OAEpB,YAAc,MAChB,SAAQ,YAAY,WAAW,QAG1B,IAGF,yBAA0C,CAC/C,WAAY,cACZ,YAAa,OACb,UAAW,OACX,WAAY,2BCpEd,2BACE,WAAa,SAAQ,KAAK,MAAM,OAAQ,KAAiB,CACvD,SACA,SACA,SACA,SACA,SACA,WAIE,uBAGJ,IAAO,OAAQ,iBAAS,OAAS,MAC1B,GAAK,QACL,KAAM,UAAW,mBAAW,YACrB,EAAE,MAAM,OAEtB,aAAK,OAAO,EAAE,QAAU,WAAa,EAAE,QAAU,QAC/C,IAAM,2BAA2B,EAAE,qCAErC,gBAAoB,qBAAa,mBAAmB,CAAC,MAAO,iBAC5C,EACZ,cAAgB,MAClB,WAAY,YAAU,CAAC,OAAQ,CAAC,GAAI,MAAO,CAAC,KAAM,aAAc,QAAA,YAElE,iBAAqB,qBAAa,iBAAiB,EAAG,OAAO,GAC7D,qBAAa,2BAA2B,SAAU,CAAC,cAAe,OAElE,gBAAoB,SAAQ,WAAW,UAAU,MAAO,UAAU,gBACjD,UAAU,MAAM,0BACb,SAAQ,UAAU,IAAI,UAAU,QAAQ,iBACtC,SAAQ,UAAU,IAAI,YAAY,QAAQ,GAChE,WAAW,YAAa,UAAY,EAAI,EAAG,UAAU,EAAI,EAAG,SACjD,cAAe,SAAS,EAAE,QAGrC,QAAU,YACV,GAAI,cAAgB,MAClB,oBAAwB,qBAAa,uBAAuB,aAC5D,IAAM,YACJ,CAAC,OAAQ,CAAC,EAAG,aAAc,MAAO,CAAC,KAAM,iBAAkB,QAAA,WAC7D,SAAQ,YAAY,UAAU,QAC9B,SAAQ,YAAY,YAAY,QAElC,MAAO,KAGF,kBAAmC,CACxC,WAAY,OACZ,YAAa,OACb,UAAW,QACX,WAAY,0BCvDd,2BACE,iBAAmB,SAAQ,KAAK,MAAM,aAAc,KAAe,CACjE,SACA,SACA,SACA,QACA,SACA,QACA,QACA,SACA,WAIE,6BAKJ,IAAO,iBAAS,OAAQ,OAAS,MAC1B,GAAK,QACL,UAAW,YAAc,MAEhC,aAAK,OACD,UAAY,EACZ,IAAM,sDAAsD,aAEhE,cAAkB,EAAE,MAAM,eACL,aAAe,OAAU,EAAE,MAAM,GAAK,EAAE,MAAM,cAC/C,aAAe,OAAU,EAAE,MAAM,GAAK,EAAE,MAAM,cAC9C,aAAe,OAAU,EAAE,MAAM,GAAK,EAAE,MAAM,gBAE7C,YAAc,sBACf,WAAa,sBACb,WAAc,WAAY,uBAEzB,aAAe,OAChC,CAAC,UAAW,aAAc,YAAa,aACvC,CAAC,UAAW,YAAa,aAAc,iBAE/B,SAAQ,WAAW,YAAa,iBAE9B,SAAQ,UAAU,IAAI,EAAE,YAC1B,MAAM,iBAEd,GAAI,YAAW,GAAI,YAAW,aAAK,eAAe,EAAE,QAAQ,yBAEvC,GAAI,YAAW,GAAI,YAAW,aAAa,wBAEhE,GAAI,YAAW,GAAI,YAAW,aAAK,eAAe,cAAc,cAEtD,SAAQ,UAAU,IAAI,IAAI,QAAQ,gBAC3B,aAAe,OAAS,EAAI,EACjD,MAAA,kBACI,IAAK,UAAW,aAAc,cAAe,EAAE,MAAM,OAAS,EAC9D,iBAAkB,gBAAiB,YAAY,OAAQ,OAEpD,IAGF,wBAAyC,CAC9C,WAAY,aACZ,YAAa,OACb,UAAW,QACX,WAAY,mCC7Dd,2BACE,oBACI,SAAQ,KAAK,MAAM,sBAAuB,KAAiB,CACzD,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,WAIR,gCAKE,IAAO,OAAQ,MAAO,kBAAW,MAE1B,EAAG,QAAU,WACR,SAAQ,UAAU,IAAI,EAAE,QAAQ,YAC3B,SAAQ,UAAU,IAAI,OAAO,QAAQ,IAE/C,QAAS,UAAW,UAAK,iBAAmB,iBAEhC,WAAa,KAAO,CAAC,EAAG,GAAK,mBAE/B,qBAAa,kBACzB,EAAe,MAAQ,OAAoB,MAAO,QAClD,WAA0C,MAAK,gBAChD,iBAEiB,SAAS,yBACV,SAAS,mBACd,SAAS,QAAQ,aACf,SAAS,QAAQ,gBAChB,SAAS,QAAQ,eACnB,SAAS,QAAQ,oBACV,SAAS,6BACV,SAAS,2BACV,SAAS,yBACV,SAAS,0BACP,SAAS,0BACR,SAAS,sBACd,SAAS,QAAQ,OAAS,OAAS,EAAI,EAEzD,GAAI,SAAS,aAAe,eAC1B,KAAM,IAAI,OACN,mEACG,SAAS,2CAGlB,QAAY,SAAQ,WAAW,SAAS,SAAU,iBACpC,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAChD,MAAA,qBACI,IAAK,EAAE,MAAM,GAAI,EAAE,MAAM,GAAI,EAAE,MAAM,GAAI,SAAU,aACnD,YAAa,OAAQ,SAAU,UAAW,QAAS,UACnD,eAAgB,cAAe,aAAc,YAAa,cAC1D,eAAgB,OACb,IAGF,iCAAkD,CACvD,WAAY,sBACZ,YAAa,OACb,UAAW,QACX,WAAY,yCCxFgB,gBAE1B,yBAAyB,MAAO,uBAAuB,mBCFpB,wBAAwB,KCEzD,2BAKJ,IAAO,OAAQ,MAAO,kBAAW,MAC1B,cAAS,QACT,KAAO,gBAEI,OAAM,MAAM,gBACb,OAAM,MAAM,aAClB,IACX,MAAI,KAAM,GAER,cAAK,OACD,CAAE,WAAY,IAAM,IACpB,IAAM,iCAAiC,CAAG,WAAY,OAClD,cACR,KAAO,UAAY,IAAM,GAE3B,SAAS,OAAO,KAAM,EAAG,GAElB,UAAQ,CAAC,OAAQ,CAAC,EAAG,QAAQ,QAAA,SAAS,MAAO,CAAC,MAAO,YAGvD,sBAAuC,CAC5C,WAAY,WACZ,YAAa,OACb,WAAY,aC5Bd,qBACE,IAAO,OAAQ,MAAO,MAAO,OAAQ,kBAAW,SACpC,SAAQ,WAAW,MAAO,eACtB,SAAQ,mBAAmB,KAC3C,MAAA,SAAQ,KAAK,OACN,IAGF,gBAAiC,CACtC,WAAY,KACZ,YAAa,OACb,WAAY,yBCRd,2BACE,kBAAoB,SAAQ,KAAK,MAAM,cAAe,KAAiB,CACrE,SACA,SACA,SACA,SACA,SACA,WAIE,8BAEJ,IAAO,OAAQ,kBAAW,MACnB,cAAS,WAEJ,SAAQ,WAAW,OAAM,MAAO,OAAM,eAClC,SAAQ,UAAU,IAAI,OAAM,QAAQ,SACtC,SAAQ,UAAU,IAAI,IAAI,QAAQ,8CAEM,OAAM,MAE5D,MAAA,mBACI,QAAS,MAAO,YAAa,WAAY,YAAa,OACnD,IAGF,yBAA0C,CAC/C,WAAY,cACZ,YAAa,OACb,WAAY,eACZ,UAAW,sBCrC4B,wBAAwB,8BCEnC,mBAE1B,yBAAyB,SAAU,sCCEvC,2BACE,cAAgB,SAAQ,KAAK,MACzB,eAAgB,KAChB,CAAC,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,WAGnE,8BAKE,IAAO,iBAAS,OAAQ,OAAS,MAC1B,iBAAmB,OACnB,EAAG,WAAM,SAAU,OAAQ,eAAS,WAC/B,SAAQ,UAAU,IAAI,EAAE,QAAQ,UAC7B,SAAQ,UAAU,IAAI,MAAK,QAAQ,cAC/B,SAAQ,UAAU,IAAI,SAAS,QAAQ,YACzC,QAAU,KAAO,SAAQ,UAAU,IAAI,OAAO,QAAQ,GAAK,UAC5D,SAAS,KAAO,SAAQ,UAAU,IAAI,QAAM,QAAQ,GAAK,MAE7D,SAAQ,WAAW,EAAE,MAAO,EAAE,OAE1C,GAAI,aAAK,cAAc,EAAE,SAAW,EAClC,MAAO,KAGT,UAAc,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAEhD,MAAA,eACI,IAAK,OAAQ,WAAY,SAAU,QAAS,gBAAiB,OAC1D,IAGF,yBAA2C,CAChD,WAAY,eACZ,YAAa,OACb,UAAW,QACX,WAAY,gCC7Bd,2BACE,gBAAkB,SAAQ,KAAK,MAAM,YAAa,KAAiB,CACjE,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,WAIJ,4BAKE,IAAO,OAAQ,MAAO,kBAAW,MAC1B,EAAG,OAAQ,KAAM,wBAA0B,QAEhD,QACA,UACA,UACA,WACA,gBACA,uBACA,gBACE,eAEa,qBAAa,kBACzB,EAAe,MAAQ,OAAoB,MAAO,QAAS,UAC5D,MAAK,iCAGL,kBAAkB,aACtB,GAAI,iBAAmB,KACrB,KAAM,IAAI,OACN,GAAG,iFAIT,QAAY,SAAQ,UAAU,IAAI,EAAE,QAAQ,YAC3B,SAAQ,UAAU,IAAI,OAAO,QAAQ,kBAE/B,SAAS,mBAEnB,EACb,GAAI,MAAQ,MACV,aAAiB,SAAQ,UAAU,IAAI,KAAK,QAC5C,GAAI,SAAS,MAAM,SAAW,EAC5B,KAAM,IAAI,OACN,sDACQ,SAAS,MAAM,WAE7B,GAAI,SAAS,MAAM,KAAO,eACxB,KAAM,IAAI,OACN,2BAA2B,SAAS,wDACI,mBAE9C,OAAS,SAAS,GAGpB,iBAAqB,SAAS,yBACV,SAAS,mBACd,SAAS,QAAQ,aACf,SAAS,QAAQ,gBAChB,SAAS,QAAQ,eACnB,SAAS,QAAQ,oBACV,SAAS,6BACV,SAAS,2BACV,SAAS,yBACV,SAAS,0BACP,SAAS,qBACb,SAAS,QAAQ,OAAS,OAAS,EAAI,YACvC,SAAS,mBACV,SAAS,iBACV,SAAS,QAEzB,GAAI,aAAe,OACjB,KAAM,IAAI,OACN,yDACG,mCAGT,QAAY,SAAQ,WAAW,SAAS,SAAU,iBACpC,SAAQ,UAAU,IAAI,IAAI,QAAQ,4BACf,wBAA0B,KACvD,EACA,SAAQ,UAAU,IAAI,uBAAuB,QAAQ,GAEzD,MAAA,iBACI,IAAK,UAAW,SAAU,QAAS,SAAU,aAAc,YAC3D,OAAQ,OAAQ,SAAU,UAAW,QAAS,UAAW,eACzD,cAAe,aAAc,YAAa,cAAe,eACzD,gBAAiB,yBAA0B,gBAAkB,EAAG,OAE7D,IAGF,uBAAwC,CAC7C,WAAY,YACZ,YAAa,OACb,UAAW,QACX,WAAY,uCCvHd,2BACE,yBACI,SAAQ,KAAK,MAAM,qBAAsB,KAAiB,CACxD,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,WAIR,oCAKE,IAAO,OAAQ,MAAO,kBAAW,MAC1B,EAAG,OAAQ,KAAM,wBAA0B,QAEhD,QACA,UACA,UACA,WACA,gBACA,uBACA,gBACE,eAEa,qBAAa,kBACzB,EAAe,MAAQ,OAAoB,MAAO,QAAS,UAC5D,MAAK,gBAAiB,oBAGtB,kBAAkB,aACtB,GAAI,iBAAmB,KACrB,KAAM,IAAI,OACN,GAAG,0FAIT,QAAY,SAAQ,UAAU,IAAI,EAAE,QAAQ,YAC3B,SAAQ,UAAU,IAAI,OAAO,QAAQ,kBAE/B,SAAS,mBAEnB,EACb,GAAI,MAAQ,MACV,aAAiB,SAAQ,UAAU,IAAI,KAAK,QAC5C,GAAI,SAAS,MAAM,SAAW,EAC5B,KAAM,IAAI,OACN,+DACQ,SAAS,MAAM,WAE7B,GAAI,SAAS,MAAM,KAAO,eACxB,KAAM,IAAI,OACN,oCAAoC,SAAS,wDACL,mBAE9C,OAAS,SAAS,GAGpB,iBAAqB,SAAS,yBACV,SAAS,mBACd,SAAS,QAAQ,aACf,SAAS,QAAQ,gBAChB,SAAS,QAAQ,eACnB,SAAS,QAAQ,oBACV,SAAS,6BACV,SAAS,2BACV,SAAS,yBACV,SAAS,0BACP,SAAS,qBACb,SAAS,QAAQ,OAAS,OAAS,EAAI,YACvC,SAAS,mBACV,SAAS,iBACV,SAAS,QAEzB,GAAI,aAAe,OACjB,KAAM,IAAI,OACN,kEACG,mCAGT,QAAY,SAAQ,WAAW,SAAS,SAAU,iBACpC,SAAQ,UAAU,IAAI,IAAI,QAAQ,4BACf,wBAA0B,KACvD,EACA,SAAQ,UAAU,IAAI,uBAAuB,QAAQ,GAEzD,MAAA,0BACI,IAAK,UAAW,SAAU,QAAS,SAAU,aAAc,YAC3D,OAAQ,OAAQ,SAAU,UAAW,QAAS,UAAW,eACzD,cAAe,aAAc,YAAa,cAAe,eACzD,gBAAiB,yBAA0B,gBAAkB,EAAG,OAE7D,IAGF,gCAAiD,CACtD,WAAY,qBACZ,YAAa,OACb,UAAW,QACX,WAAY,mCC7Hd,2BACE,aAAe,SAAQ,KAAK,MAAM,SAAU,KAAe,CACzD,SACA,SACA,SACA,SACA,SACA,SACA,QACA,WAIJ,yBAEE,IAAO,iBAAS,QAAU,MACnB,OAAQ,SAAW,iDAGtB,uBAAY,mBAAmB,OAAQ,aAE/B,SAAQ,WAAW,YAAa,OAAO,OACnD,GAAI,YAAc,EAChB,MAAO,KAGT,iBAAqB,QAAQ,gBACX,aAAa,aAAa,OAAS,SAEvC,SAAQ,UAAU,IAAI,OAAO,YAC/B,MAAM,eACE,SAAQ,UAAU,IAAI,QAAQ,kBAChC,YAAY,gBAET,GAAI,YAAW,GAAI,YAAW,SAAS,cAE9C,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAChD,MAAA,cACI,IAAK,SAAS,OAAO,OAAQ,UAAW,UAAW,UAAW,UAC9D,aAAc,OAEX,IAGF,oBAAqC,CAC1C,WAAY,SACZ,YAAa,OACb,UAAW,QACX,WAAY,sBC/Cd,2BACE,WAAa,SAAQ,KAAK,MAAM,SAAU,KAAe,CACvD,SACA,SACA,QACA,SACA,SACA,SACA,QACA,WAIJ,yBAGE,IAAO,iBAAS,OAAQ,OAAS,MAC1B,EAAG,SAAW,QACd,KAAM,WAAa,iBAEP,aAAK,eAAe,KAAM,EAAE,OAAO,aACpC,qBAAa,aAAa,yBACxC,EAAa,QAAmB,WAAY,oBAE/B,UAAQ,CACvB,OAAQ,CAAC,GACT,MAAO,CACL,MAAO,CACL,UAAU,UAAW,UAAU,UAAW,UAAU,QACpD,UAAU,YAGd,QAAA,uBAEkB,aAAK,cAAc,QAAQ,oBAC1B,UAAQ,CAC3B,OAAQ,CAAC,EAAG,SACZ,MAAO,CAAC,MAAO,CAAC,UAAU,UAAW,YAAc,UAAU,YAC7D,QAAA,8BAEyB,CACzB,UAAU,UAAW,UAAU,UAAW,YAAc,UAAU,UAClE,UAAU,eAGA,SAAQ,WAAW,mBAAoB,EAAE,OACrD,GAAI,aAAK,cAAc,EAAE,SAAW,EAClC,MAAO,KAET,gBAAoB,SAAS,MAAM,OAAS,QAE9B,SAAQ,UAAU,IAAI,SAAS,YACjC,MAAM,eAEE,SAAQ,UAAU,IAAI,aAAa,kBACrC,YAAY,SAEhB,SAAQ,UAAU,IAAI,IAAI,QAAQ,iBAE1B,GAAI,YACtB,GAAI,YAAW,aAAK,eAAe,SAAS,QAAQ,wBAChC,GAAI,YACxB,GAAI,YAAW,aAAK,eAAe,qBAAqB,QAE5D,MAAA,YACI,IAAK,SAAS,EAAE,OAAQ,cAAe,YAAa,UACpD,UAAU,UAAW,gBAAiB,OAG1C,IAAI,MAAQ,UAAU,YACf,IAGF,oBAAqC,CAC1C,WAAY,SACZ,YAAa,OACb,UAAW,QACX,WAAY,kCCtFgB,kBAE1B,yBAAyB,QAAS,uBAAuB,+BCF/B,uBAE1B,yBAAyB,aAAc,uBAAuB,kBCElE,8BACE,UAAW,SAAQ,KAAK,MAAM,UAAW,KAAiB,CACxD,SACA,SACA,WAIE,0BAIJ,IAAO,QAAS,GAAI,OAAQ,OAAQ,kBAAW,SAEnC,SAAQ,UAAU,IAAI,EAAE,QAAQ,OAChC,SAAQ,WAAW,EAAE,MAAO,EAAE,OAE1C,GAAI,aAAK,cAAc,EAAE,SAAW,GAClC,UAAc,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAChD,UAAS,IAAK,MAAO,OAGvB,MAAO,KAGF,qBAAsC,CAC3C,WAAY,UACZ,YAAa,OACb,UAAA,WACA,WAAY,mCClCgB,eAE1B,yBAAyB,KAAM,uBAAuB,+BCD5B,oBAE1B,yBAAyB,UAAW,uBAAuB,mBCHxB,wBAAwB,4BCAjC,qBAE1B,yBAAyB,WAAY,uBAAuB,gBCKhE,2BACE,QAAU,SAAQ,KAAK,MAAM,IAAK,KAAe,CAAC,2BAGpD,qBAEE,IAAO,iBAAS,OAAQ,OAAS,MAC1B,sBAAwB,UAAY,OACpC,GAAK,WACA,SAAQ,UAAU,IAAI,EAAE,QAAQ,WAC9B,WACF,GAEL,WAAY,KAAM,aAAc,oBACnC,wBAAwB,EAAG,KAAM,UAErC,GAAI,oBACF,iBAAqB,SAAQ,UAAU,IAAI,WAAW,QAAQ,GAC9D,OAAQ,WACR,QAAU,aAGZ,cAAkB,OAAM,MAAM,OAC9B,qBAAa,2BAA2B,MAAO,KAAM,WACrD,0BACI,qBAAa,0BAA0B,OAAM,MAAO,iBACrC,aAAK,cAAc,iBAE1B,SAAQ,WAAW,SAAU,EAAE,OAC3C,GAAI,aAAK,cAAc,OAAM,SAAW,GACtC,UAAc,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAChD,QAAQ,QAAS,WAAY,OAQ/B,GALI,oBAEF,SAAQ,YAAY,WAAW,QAG7B,UAEF,aAAiB,qBAAa,qBAAqB,IAAI,MAAO,cAC9D,IAAI,MAAQ,SAGd,MAAO,KAGF,eAAgC,CACrC,WAAY,IACZ,YAAa,OACb,UAAW,QACX,WAAY,8BC3DgB,kBAE1B,yBAAyB,QAAS,oCCOtC,2BACE,YAAc,SAAQ,KAAK,MAAM,QAAS,KAAiB,CACzD,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,WAIJ,wBAEE,IAAO,OAAQ,MAAO,kBAAW,OAEvB,OAAO,MACL,SAAQ,UAAU,IAAI,EAAE,QAAQ,IAErC,WAAY,QAAS,UAAK,iBAAmB,eACnC,qBAAa,kBAC1B,EAAE,MAAO,WAAY,QAAS,EAAmB,MAAK,8BAErC,SAAS,yBACV,SAAS,mBACd,SAAS,QAAQ,aACf,SAAS,QAAQ,gBAChB,SAAS,QAAQ,eACnB,SAAS,QAAQ,oBACV,SAAS,6BACV,SAAS,2BACV,SAAS,yBACV,SAAS,0BACP,SAAS,0BACR,SAAS,YAEhC,GAAI,SAAS,aAAe,eAC1B,KAAM,IAAI,OACN,6CACG,SAAS,2CAGlB,QAAY,SAAQ,WAAW,SAAS,SAAU,iBACpC,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAEhD,MAAA,aACI,IAAK,EAAE,MAAM,GAAI,EAAE,MAAM,GAAI,EAAE,MAAM,GAAI,aAAc,YACvD,OAAQ,SAAU,UAAW,QAAS,eAAgB,cACtD,aAAc,YAAa,cAAe,eAAgB,OACvD,IAGF,mBAAoC,CACzC,WAAY,QACZ,YAAa,OACb,UAAW,QACX,WAAY,mBCpEd,2BACE,SACI,SAAQ,KAAK,MAAM,KAAM,KAAe,CAAC,2BAGzC,qBAGJ,IAAO,iBAAS,OAAQ,OAAS,MAC1B,KAAM,UAAY,OAClB,GAAK,WACA,SAAQ,UAAU,IAAI,EAAE,QAAQ,WAC9B,WACF,GAEL,WAAY,KAAM,aAAc,oBACnC,wBAAwB,EAAG,KAAM,wBAEjB,KACpB,GAAI,oBACF,iBAAqB,SAAQ,UAAU,IAAI,WAAW,QAAQ,GAC1D,eAAiB,KAGnB,QAAQ,WACR,QAAU,aACV,cAAgB,qBAAa,iBACzB,cAAc,OAAQ,OAAM,MAAM,SAI1C,qBAAa,2BACT,OAAQ,cAAe,OAAM,MAAM,QACvC,0BACI,qBAAa,0BAA0B,OAAM,MAAO,0BACrC,aAAK,cAAc,yBACpB,OACd,OAAM,QAAU,WAClB,aACI,OAAK,CAAC,QAAA,SAAS,OAAQ,CAAC,EAAG,QAAQ,MAAO,CAAC,MAAO,aACtD,QAAU,SAAQ,UAAU,IAAI,YAAY,QAAQ,IAGtD,QAAY,SAAQ,WAAW,SAAU,WACzC,GAAI,aAAK,cAAc,OAAM,SAAW,GACtC,UAAc,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAChD,SAAS,QAAS,WAAY,OAQhC,GALI,oBAEF,SAAQ,YAAY,WAAW,QAG7B,UAEF,aAAiB,qBAAa,qBAAqB,IAAI,MAAO,cAC9D,IAAI,MAAQ,SAGd,MAAI,QAAM,QAAU,WAClB,SAAQ,YAAY,YAAY,QAG3B,IAGF,gBAAiC,CACtC,WAAY,KACZ,YAAa,OACb,UAAW,QACX,WAAY,eCxEd,2BACE,QAAU,SAAQ,KAAK,MAAM,IAAK,KAAe,CAAC,2BAGpD,oBAEE,IAAO,iBAAS,OAAQ,OAAS,MAC1B,KAAM,UAAY,OAClB,GAAK,WACA,SAAQ,UAAU,IAAI,EAAE,QAAQ,WAC9B,WACF,GAEL,WAAY,KAAM,aAAc,oBACnC,wBAAwB,EAAG,KAAM,UAErC,GAAI,oBACF,iBAAqB,SAAQ,UAAU,IAAI,WAAW,QAAQ,GAC1D,eAAiB,KAGnB,QAAQ,WACR,QAAU,cAId,cAAkB,OAAM,MAAM,OAE9B,qBAAa,2BAA2B,MAAO,KAAM,WACrD,0BACI,qBAAa,0BAA0B,OAAM,MAAO,iBACrC,aAAK,cAAc,iBAE1B,SAAQ,WAAW,SAAU,OAAM,OAC/C,GAAI,aAAK,cAAc,OAAM,SAAW,GACtC,UAAc,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAChD,QAAQ,QAAS,WAAY,OAQ/B,GALI,oBAEF,SAAQ,YAAY,WAAW,QAG7B,UAEF,aAAiB,qBAAa,qBAAqB,IAAI,MAAO,cAC9D,IAAI,MAAQ,SAGd,MAAO,KAGF,eAAgC,CACrC,WAAY,IACZ,YAAa,OACb,UAAW,QACX,WAAY,8BC/DgB,kBAE1B,yBAAyB,QAAS,iDCAR,mBAE1B,yBAAyB,SAAU,oCCJA,wBAAwB,KCWzD,+CAEJ,WAAe,GAAI,YAAW,SAAQ,KAAK,OAAO,OAAQ,UAAW,oBAC5C,OAAO,gBACX,OAAO,mBACJ,OAAO,iBACT,OAAO,GAE7B,MAAA,UAAQ,KAAK,MAAM,WACZ,CAAC,iBAAkB,aAAc,gBAAiB,eChB3D,cAIA,2BACE,UAAW,SAAQ,KAAK,MACpB,oBACA,SACA,CACE,SACA,SACA,SACA,SACA,WAIR,0BAKE,IAAO,iBAAS,OAAQ,OAAS,MAC1B,aAAc,cAAe,gBAAkB,OAC/C,MAAO,QAAU,eAER,SAAQ,UAAU,IAAI,MAAM,QAAQ,YACnC,SAAQ,UAAU,IAAI,OAAO,QAAQ,aAGlD,UAAS,QAAS,SAAU,cAAe,aAAc,iBAEtD,iBAAkB,aAAc,gBAAiB,eACpD,kBAAkB,SAAS,WAG/B,SAAQ,KAAK,MAAM,iBACnB,SAAQ,KAAK,MAAM,eAEnB,0BACI,SAAQ,WAAW,CAAC,cAAe,QAAS,kBAEhD,MAAO,uBAGF,+BAAgD,CACrD,WAAY,oBACZ,YAAa,OACb,UAAW,QACX,sBC5CF,2BACE,UAAW,SAAQ,KAAK,MACpB,oBACA,SACA,CACE,SACA,SACA,SACA,SACA,SACA,SAIR,oCAKE,IAAO,iBAAS,OAAQ,OAAS,MAC1B,aAAc,cAAe,eAAgB,oBAChD,OACG,MAAO,QAAU,eAER,SAAQ,UAAU,IAAI,MAAM,QAAQ,YACnC,SAAQ,UAAU,IAAI,OAAO,QAAQ,aAEpC,UACd,QAAS,SAAU,cAAe,aAAc,eAChD,qBAEG,iBAAkB,aAAc,gBAAiB,eACpD,kBAAkB,SAAS,WAG/B,SAAQ,KAAK,MAAM,iBAEnB,0BACI,SAAQ,WAAW,CAAC,cAAe,QAAS,qCAErB,SAAQ,WAAW,GAAI,QAAS,eAE3D,MAAO,CAAC,sBAAuB,oBAG1B,+BAAgD,CACrD,WAAY,oBACZ,YAAa,OACb,UAAW,QACX,WAAY,gCCjDd,2BACE,UAAW,SAAQ,KAAK,MACpB,oBACA,SACA,CACE,SACA,SACA,SACA,SACA,SACA,WAIR,2BAKE,IAAO,iBAAS,OAAQ,OAAS,MAC1B,aAAc,cAAe,eAAgB,cAAgB,OAC7D,MAAO,QAAU,eAER,SAAQ,UAAU,IAAI,MAAM,QAAQ,YACnC,SAAQ,UAAU,IAAI,OAAO,QAAQ,aAEpC,UACd,QAAS,SAAU,cAAe,aAAc,eAChD,eAEG,iBAAkB,aAAc,gBAAiB,eACpD,kBAAkB,SAAS,WAI/B,SAAQ,KAAK,MAAM,eAEnB,0BACI,SAAQ,WAAW,CAAC,cAAe,QAAS,uCAE5C,SAAQ,WAAW,CAAC,cAAe,UAAW,iBAElD,MAAO,CAAC,sBAAuB,sBAG1B,+BAAgD,CACrD,WAAY,oBACZ,YAAa,OACb,UAAW,QACX,WAAY,qCC1DgB,mBAE1B,yBAAyB,SAAU,wBAAuB,mBCI9D,2BACE,WAAa,SAAQ,KAAK,MAAM,OAAQ,KAAiB,CACvD,SACA,SACA,SACA,SACA,WAIJ,uBAEE,IAAO,OAAQ,iBAAS,OAAS,MAC1B,SAAW,QACX,MAAO,QAAS,UAAY,UAEvB,SAAQ,WAAW,CAAC,GAAG,QAAQ,MAAO,OAAQ,eAC5C,SAAQ,UAAU,IAAI,IAAI,QAAQ,eAE5B,SAAQ,UAAU,IAAI,QAAQ,kBAChC,YAAY,GAE9B,MAAA,YAAW,UAAW,MAAO,QAAS,SAAU,OAEzC,IAGF,kBAAmC,CACxC,WAAY,OACZ,YAAa,OACb,UAAW,QACX,WAAY,SCnCd,yBACE,IAAO,QAAS,GAAI,kBAAW,SACnB,SAAQ,WAAW,EAAE,MAAO,EAAE,eAC1B,SAAQ,mBAAmB,KAC3C,MAAA,SAAQ,KAAK,GACN,IAGF,oBAAqC,CAC1C,WAAY,SACZ,YAAa,OACb,WAAY,WCTR,qBAGJ,IAAO,OAAQ,iBAAS,OAAS,MAC1B,MAAQ,MAEf,GAAI,OAAO,SAAW,EACpB,MAAO,aACH,CAAC,OAAQ,CAAC,MAAO,OAAO,IAAK,QAAA,SAAS,MAAO,CAAC,IAAK,QAGzD,UAAc,OAAO,GAAG,YACV,OAAO,GAAG,MAExB,OAAO,QAAQ,IACb,aAAK,kBACD,MAAO,EAAE,MACT,yDACJ,aAAK,OACD,QAAU,EAAE,MACZ,IAAM,2DAGZ,oBAAwB,OAAO,IAC3B,GAAK,YAAW,CAAC,OAAQ,CAAC,MAAO,GAAI,QAAA,SAAS,MAAO,CAAC,IAAK,SAE/D,MAAO,UAAO,CAAC,OAAQ,gBAAiB,QAAA,SAAS,MAAO,CAAC,QAGpD,gBAAiC,CACtC,WAAY,KACZ,YAAa,OACb,WAAY,iBC3Bd,2BACE,UAAY,SAAQ,KAAK,MAAM,MAAO,KAAiB,CACrD,SACA,QACA,SACA,SACA,QACA,QACA,SACA,WAIJ,oBAEE,IAAO,QAAS,GAAI,iBAAS,OAAQ,SAAU,gBAAkB,cAEhD,SAAS,IACtB,QAAU,GAAE,GAAqB,EAAE,MAAM,GAAK,GAAE,QACxC,SAAQ,UAAU,IAAI,EAAE,QAAQ,OAChC,SAAQ,WAAW,SAAU,EAAE,aAC7B,SAAQ,UAAU,IAAI,IAAI,QAAQ,eAC5B,GAAI,YAAW,GAAI,YAAW,EAAE,OAAO,wBAEnC,SAAS,IAAI,UAAY,SAAS,qBACjC,SAAS,IAAI,UAAY,SAAS,qBAEvD,GAAI,YAAW,GAAI,YAAW,iBAAiB,0BAE/C,GAAI,YAAW,GAAI,YAAW,kBAAkB,QAEpD,MAAA,WACI,IAAK,YAAa,EAAE,MAAM,OAAQ,SAAS,EAAE,OAAQ,iBACrD,kBAAmB,cAAe,OAC/B,IAGF,iBAAkC,CACvC,WAAY,MACZ,YAAa,OACb,WAAY,KACZ,UAAW,iCClDiB,cAE1B,yBAAyB,IAAK,mCCElC,2BACE,UAAY,SAAQ,KAAK,MAAM,MAAO,KAAiB,CACrD,SACA,SACA,WAIJ,sBACE,IAAO,OAAQ,kBAAW,MACnB,EAAG,OAAS,WACP,SAAQ,UAAU,IAAI,EAAE,QAAQ,aAC1B,SAAQ,UAAU,IAAI,MAAM,QAAQ,OAE1C,SAAQ,WAAW,EAAE,MAAO,iBAC1B,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAChD,MAAA,WAAU,IAAK,UAAW,OACnB,IAGF,iBAAkC,CACvC,WAAY,MACZ,YAAa,OACb,UAAW,QACX,WAAY,iBClBd,2BACE,SAAW,SAAQ,KAAK,MAAM,KAAM,KAAe,CACjD,SACA,SACA,SACA,WAIJ,qBAKE,IAAO,iBAAS,OAAQ,OAAS,MAC1B,KAAM,UAAY,OAClB,GAAK,WACA,SAAQ,UAAU,IAAI,EAAE,QAAQ,WAC9B,WACF,GAEL,WAAY,KAAM,aAAc,oBACnC,wBAAwB,EAAG,KAAM,wBAEjB,KACpB,GAAI,oBACF,iBAAqB,SAAQ,UAAU,IAAI,WAAW,QAAQ,GAC1D,eAAiB,KAGnB,QAAQ,WACR,QAAU,aACV,cAAgB,qBAAa,iBACzB,cAAc,OAAQ,OAAM,MAAM,SAI1C,qBAAa,2BACT,OAAQ,cAAe,OAAM,MAAM,QACvC,0BACI,qBAAa,0BAA0B,OAAM,MAAO,0BACrC,aAAK,cAAc,iBAE1B,SAAQ,WAAW,SAAU,OAAM,OAC/C,GAAI,aAAK,cAAc,OAAM,SAAW,GACtC,UAAc,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAChD,SAAS,QAAS,WAAY,SAAS,IAAI,OAAQ,OAQrD,GALI,oBAEF,SAAQ,YAAY,WAAW,QAG7B,UAEF,aAAiB,qBAAa,qBAAqB,IAAI,MAAO,cAC9D,IAAI,MAAQ,SAGd,MAAO,KAGF,gBAAiC,CACtC,WAAY,KACZ,YAAa,OACb,UAAW,QACX,WAAY,cCzEV,OACE,IAAO,iBAAS,OAAS,MAClB,MAAO,KAAM,WAAM,OAAS,aACpB,UAAa,MAAO,KAAM,MAAM,WAEnC,SAAQ,WAAW,CAAC,OAAO,QAAS,eAChC,SAAQ,mBAAmB,KAC3C,MAAA,SAAQ,IAAI,QACL,kBAG4B,CACvC,WAAY,MACZ,YAAa,OACb,WAAY,gCChBgB,kBAE1B,yBAAyB,QAAS,qCCJE,wBAAwB,mBCAvB,wBAAwB,0BCSjE,2BACE,mBAAqB,SAAQ,KAAK,MAAM,eAAgB,KAAe,CACrE,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,WAIJ,+BAKE,IAAO,iBAAS,OAAQ,OAAS,MAE1B,QAAU,QACV,aAAc,iBAAkB,MAAQ,2BACjB,4CAEoB,OAAO,eACxC,CAAC,MAAO,UAAW,SAAU,mBAElC,SAAQ,UAAU,IAAI,OAAO,mBAErC,MAAM,QAAU,WAClB,YACI,OAAK,CAAC,QAAA,SAAS,OAAQ,CAAC,EAAG,QAAS,MAAO,CAAC,MAAO,aACvD,MAAQ,SAAQ,UAAU,IAAI,WAAW,SAE3C,QAAY,MAAM,OAEN,SAAQ,WAAW,SAAU,WACzC,GAAI,aAAK,cAAc,OAAO,SAAW,EACvC,MAAO,KAET,UAAc,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAEhD,MAAA,oBACI,IAAK,MAAO,UAAW,SAAU,YAAa,UAAW,SACzD,aAAe,EAAI,EAAG,iBAAmB,EAAI,EAAG,OAEhD,YAAc,MAChB,SAAQ,YAAY,WAAW,QAG1B,IAGF,0BAA2C,CAChD,WAAY,eACZ,YAAa,OACb,UAAW,QACX,WAAY,6BC3Dd,2BACE,YAAc,SAAQ,KAAK,MAAM,QAAS,KAAM,CAC9C,SACA,QACA,SACA,QACA,SACA,WAIE,yBAGJ,IAAO,OAAQ,iBAAS,OAAS,MAC1B,GAAK,QACL,MAAQ,WAEF,aAAK,eAAe,KAAM,EAAE,OAEzC,GAAI,EAAE,MAAM,SAAW,EACrB,MAAO,WAAS,CAAC,OAAQ,CAAC,GAAI,QAAA,WAGhC,QAAY,SAAQ,WAAW,EAAE,MAAO,EAAE,WAC9B,SAAQ,UAAU,IAAI,EAAE,QAAQ,SAC9B,SAAQ,UAAU,IAAI,IAAI,QAAQ,aAE9B,GAAI,YAAW,GAAI,YAAW,MAAM,sBAChC,GAAI,YAAW,GAAI,YAAW,EAAE,OAAO,QAE7D,MAAA,aACI,IAAK,UAAW,KAAK,OAAQ,cAAe,EAAE,MAAM,OAAQ,OAEzD,UAAQ,CAAC,OAAQ,CAAC,EAAG,KAAM,MAAO,CAAC,MAAO,EAAE,OAAQ,QAAA,WAGtD,mBAAoC,CACzC,WAAY,QACZ,YAAa,OACb,WAAY,UACZ,UAAW,oBC1Cb,2BACE,WAAa,SAAQ,KAAK,MAAM,iBAAkB,KAAiB,CACjE,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,SACA,WAIE,iCAKJ,IAAO,OAAQ,iBAAS,OAAS,MAC1B,cAAS,QACT,QAAS,UAAW,QAAU,UAEzB,SAAQ,WAAW,OAAM,MAAO,OAAM,eAClC,SAAQ,UAAU,IAAI,OAAM,QAAQ,SACtC,SAAQ,UAAU,IAAI,IAAI,QAAQ,8CAEM,OAAM,wBAGxD,qBAAa,eAAe,OAAQ,YAAa,wBAEjC,YAAc,mBACT,gBAEN,MAAO,YAAc,SACpC,CAAC,UAAW,UAAW,UAAW,YAAc,EAAI,kBACpD,CAAC,GAAG,UAAW,4BACD,GAAI,YAAW,GAAI,YAAW,aAAY,QAE5D,MAAA,YACI,QAAS,MAAO,YAAa,WAAY,YAAa,QAAS,QAC/D,QAAS,UAAW,YAAW,OAAQ,OACpC,IAGF,4BAA6C,CAClD,WAAY,iBACZ,YAAa,OACb,WAAY,kBACZ,UAAW,sBC5D4B,wBAAwB,qBCSjE,2BACE,cAAgB,SAAQ,KAAK,MAAM,UAAW,KAAe,CAC3D,SACA,SACA,SACA,SACA,SACA,SACA,QACA,SACA,WAIJ,0BAIE,IAAO,iBAAS,OAAQ,OAAS,MAC1B,QAAS,SAAW,QACpB,OAAS,UAEJ,SAAQ,WAAW,MAAO,QAAQ,OAC9C,GAAI,aAAK,cAAc,SAAW,EAChC,MAAO,KAGT,IAAO,UAAW,WAAY,UAAW,QAAS,YAC9C,wBAAa,gBAAgB,QAAS,QAAS,mBAE/B,SAAQ,UAAU,IAAI,QAAQ,kBAChC,YAAY,eAEV,SAAQ,UAAU,IAAI,QAAQ,kBAChC,YAAY,gBAET,GAAI,YAAW,GAAI,YAAW,SAAS,cAE9C,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAChD,MAAA,eACI,UAAW,UAAW,SAAS,QAAQ,OAAQ,UAAW,WAC1D,UAAW,aAAc,WAAY,OAElC,IAGF,qBAAsC,CAC3C,WAAY,UACZ,YAAa,OACb,UAAW,QACX,WAAY,uBCrDd,2BACE,WAAa,SAAQ,KAAK,MAAM,WAAY,KAAM,CAChD,SACA,SACA,SACA,SACA,WAIJ,uBACE,IAAO,OAAQ,kBAAW,MACnB,UAAW,EAAG,GAAK,mBAEN,SAAQ,UAAU,IAAI,UAAU,QAAQ,OAChD,SAAQ,UAAU,IAAI,EAAE,QAAQ,OAChC,SAAQ,UAAU,IAAI,EAAE,QAAQ,OAChC,SAAQ,WAAW,EAAE,MAAO,EAAE,aAC5B,SAAQ,UAAU,IAAI,IAAI,QAAQ,SAElC,UAAU,MAAM,aAChB,EAAE,MAAM,cAEP,QAAU,GAAK,MAAQ,GAAK,QAAU,EACjD,EACA,aAAK,cAAc,EAAE,MAAM,MAAM,IAErC,MAAA,YAAW,YAAa,IAAK,IAAK,OAAQ,OACnC,IAGF,kBAAmC,CACxC,WAAY,OACZ,YAAa,OACb,WAAY,QACZ,UAAW,mBCrCb,2BACE,UAAW,SAAQ,KAAK,MAAM,QAAS,KAAiB,CAAC,SAAU,WAGrE,wBAEE,IAAO,iBAAS,QAAS,IAAM,SACnB,SAAQ,UAAU,IAAI,EAAE,QAAQ,OAChC,SAAQ,WAAW,EAAE,MAAO,EAAE,aAC5B,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAGhD,MAAI,cAAK,cAAc,IAAI,SAAW,GAItC,UAAS,IAAK,OACP,IAGF,mBAAoC,CACzC,WAAY,UACZ,YAAa,OACb,UAAW,QACX,WAAY,qBC5ByB,wBAAwB,KCGzD,uBAEJ,IAAO,QAAS,GAAI,OAAQ,MAAO,MAAO,kBAAW,oBAE7B,mBAAW,iBAAiB,EAAG,MAAO,kBAE1C,mBAAW,iBAAiB,EAAE,MAAO,OAAQ,aACnD,SAAQ,SAAS,EAAE,YACrB,SAAQ,WAAW,MAAO,EAAE,gBACvB,aAAK,eAAe,EAAE,eACvB,SAAQ,UAAU,IAAI,IAAI,QAE1C,GAAI,aACF,eAAmB,mBAAW,kBAAkB,OAAQ,UAExD,GAAI,EAAE,QAAU,SACd,QAAQ,YACH,MACI,MAAM,WAAY,WAAa,aAAK,cAAc,aAE3D,aAAgB,SAAQ,mBAAmB,KAC3C,SAAQ,IACH,MACI,SAAS,WAAY,WAAa,aAAK,cAAc,SAGhE,MAAO,KAGT,GAAI,EAAE,QAAU,UACd,QAAY,UAAa,MAAO,OAAQ,MAAO,EAAE,MAAO,EAAE,OAC1D,MAAA,SAAQ,YAAc,IACf,IAGT,YAAgB,SAAQ,mBAAmB,UAC9B,EAAE,MAAM,OACrB,GAAI,OAAS,EACX,SACI,MAAqB,SAAS,GAAI,QAAS,OAC3C,eACK,OAAS,EAClB,SACI,MAAqB,SAAS,GAAI,SAAS,GAAI,QAC/C,OAAoC,eAC/B,OAAS,EAClB,SACI,MAAqB,SAAS,GAAI,SAAS,GAAI,SAAS,GAAI,QAC5D,OACA,YAEJ,QACI,UAAa,MAAO,OAAQ,MAAO,EAAE,MAAO,EAAE,OAClD,QAAQ,IAAI,KAGd,MAAO,KAGT,oDAIE,cAAgB,SACD,MAAM,UACN,MAAM,QACR,OAAS,KAAK,GAC3B,UAAa,OAAQ,EAAI,KAAM,KAC7B,YAAgB,EAAI,QAAU,OAC9B,QAAQ,IAAI,MAAM,SAAS,QAAS,QAAU,KAAK,IAAK,WACxD,WAAa,KAAK,IAItB,8DAIE,cAAgB,SACD,MAAM,UACN,MAAM,UACN,MAAM,QACR,OAAS,KAAK,QACd,OAAS,KAAK,GAC3B,UAAa,OAAQ,EAAI,KAAM,IAC7B,UAAa,OAAQ,EAAI,KAAM,KAC7B,YAAgB,EAAI,SAAW,EAAI,SAAW,OAC9C,QAAQ,IAAI,MAAM,SAAS,QAAS,QAAU,KAAK,IAAK,WACxD,WAAa,KAAK,IAKxB,uEAKE,cAAgB,SACD,MAAM,UACN,MAAM,UACN,MAAM,QACR,OAAS,KAAK,QACd,OAAS,KAAK,QACd,OAAS,KAAK,UACZ,MAAM,GAErB,UAAa,OAAQ,EAAI,KAAM,IAC7B,UAAa,OAAQ,EAAI,KAAM,IAC7B,UAAa,OAAQ,EAAI,KAAM,KAC7B,YAAgB,EAAI,SAAW,EAAI,SAAW,EAAI,SAAW,OAC7D,QAAQ,IAAI,MAAM,SAAS,QAAS,QAAU,KAAK,IAAK,WACxD,WAAa,KAAK,IAMnB,iBAAkC,CACvC,WAAY,MACZ,YAAa,OACb,WAAY,mBCvHd,2BACE,UAAW,SAAQ,KAAK,MAAM,QAAS,KAAiB,CACtD,SACA,SACA,SACA,WAIJ,wBAGE,IAAO,iBAAS,QAAS,QAAS,OAAQ,MAAQ,SACtC,SAAQ,UAAU,IAAI,OAAO,QAAQ,OACrC,SAAQ,WAAW,OAAO,MAAO,OAAO,aACtC,SAAQ,UAAU,IAAI,IAAI,QAAQ,YAE/B,OAAO,MAAM,WAChB,aAAK,cAAc,OAAO,OAAS,SAGjD,MAAI,cAAK,cAAc,IAAI,SAAW,GAItC,UAAS,IAAK,MAAO,SAAU,OACxB,IAGF,mBAAoC,CACzC,WAAY,QACZ,YAAa,OACb,UAAW,QACX,WAAY,UCjCR,uBAEJ,IAAO,OAAQ,MAAO,kBAAW,MAC1B,GAAK,QACL,gBAAiB,MAAQ,YAElB,aAAK,eAAe,KAAM,EAAE,OAAO,cAE9B,qBAAa,iBAAiB,EAAG,gBAAiB,YACvD,GAAI,OAAM,EAAE,MAAM,QAAQ,KAAK,QAChC,EAAE,MAAM,QACrB,MAAO,YAAW,IAAI,IACpB,eAAmB,CAAC,GAAG,MACvB,WAAW,OAAS,EACpB,WACI,QAAM,CAAC,OAAQ,CAAC,GAAI,MAAO,CAAC,MAAO,KAAM,YAAa,QAAA,WAC1D,MAAA,OAAM,QAAU,EACT,SAIJ,kBAAmC,CACxC,WAAY,OACZ,YAAa,OACb,WAAY,qBC5B0B,wBAAwB,oBCDtB,wBAAwB,gCCDpC,4BAE1B,yBAAyB,kBAAmB,0CCShD,2BACE,iBAAmB,SAAQ,KAAK,MAAM,aAAc,KAAe,CACjE,SACA,QACA,SACA,QACA,QACA,QACA,QACA,QACA,SACA,WAIE,6BAKJ,IAAO,iBAAS,OAAQ,OAAS,MAC1B,GAAK,QAEP,MAAO,IAAK,SAAW,MACxB,SAAW,MACb,SAAU,GAAI,OAAM,MAAM,SAG5B,IAAO,UAAW,QAAS,aAAc,YAAa,gBAAkB,mBAEnD,qBAAa,WAAW,WAAW,cACxD,GAAI,aAAa,OAAS,EACxB,KAAM,IAAI,OAAM,8CAGlB,GAAI,eAAiB,GAAK,cAAgB,EACxC,KAAM,IAAI,OACN,iEAGN,GAAI,eAAiB,GAAK,iBAAmB,EAC3C,KAAM,IAAI,OACN,oEAGN,wBAA4B,EAAE,MAAM,OAAS,MAAM,kBAGhC,qBAAa,WAAW,WAAW,sBACrC,EAAE,MAAM,QACzB,WAAW,QAAQ,OACjB,MAAM,MAAQ,EACd,IAAI,MAAQ,EACZ,SAAS,OAAO,KAAM,EAAG,KAG3B,cAAkB,UAAQ,CAAC,OAAQ,CAAC,GAAI,MAAO,CAAC,MAAO,UAAW,QAAA,YAGhE,sBACA,kBACA,2BAEE,qBAAa,WAAW,kBACpB,UAAU,MAAO,aAAc,oBAAqB,MAAO,IAC3D,QAAS,UAAW,QAAS,cACrC,MAAQ,gBACR,IAAM,cACN,QAAU,kBAEV,eAAmB,qBAAa,WAAW,WAAW,gBAEtD,WAAW,QAAQ,OACjB,IAAI,MAAQ,MAAM,MAAQ,EAC1B,QAAQ,MAAQ,IAIlB,SAAa,qBAAa,WAAW,gBAAgB,MAAO,IAAK,kBAEhD,KAAK,OAAO,UAAa,WAAW,QAAQ,QAAU,eAEpD,QAAQ,MAAM,GAAK,IAAM,GAC5C,GAAI,YACF,YAAgB,QAAM,CAAC,OAAQ,CAAC,GAAI,MAAO,CAAC,MAAO,MAAO,QAAA,WAC1D,MAAO,WAAQ,CAAC,OAAQ,CAAC,EAAG,SAAU,MAAO,CAAC,MAAO,UAAW,QAAA,WAGlE,QAAY,SAAQ,WAAW,SAAU,WACzC,GAAI,CAAC,SAAS,KAAK,MAAQ,OAAS,IAClC,QAAY,SAAQ,UAAU,IAAI,UAAU,QAAQ,iBAC9B,GAAI,YACtB,GAAI,YAAW,aAAK,eAAe,UAAU,QAAQ,mBACtC,GAAI,YAAW,GAAI,YAAW,OAAO,iBACvC,GAAI,YAAW,GAAI,YAAW,KAAK,qBAC/B,GAAI,YAAW,GAAI,YAAW,SAAS,yBAEnC,GAAI,YAAW,GAAI,YAAW,UAAU,wBAE7D,GAAI,YAAW,GAAI,YAAW,aAAK,eAAe,WAAW,cACnD,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAEhD,iBACI,IAAK,cAAe,UAAU,MAAM,OAAQ,WAAY,SACxD,aAAc,iBAAkB,gBAAiB,SAAS,OAC1D,OAGN,MAAO,WAAQ,CAAC,OAAQ,CAAC,EAAG,KAAM,MAAO,CAAC,MAAO,UAAW,QAAA,WAGvD,wBAAyC,CAC9C,WAAY,aACZ,YAAa,OACb,UAAW,QACX,WAAY,uCC9HgB,cAE1B,yBAAyB,IAAK,iCCKlC,2BACE,QAAU,SAAQ,KAAK,MAAM,IAAK,KAAe,CAAC,2BAGpD,qBAEE,IAAO,iBAAS,OAAQ,OAAS,MAC1B,KAAM,UAAY,OAClB,GAAK,WACA,SAAQ,UAAU,IAAI,EAAE,QAAQ,WAC9B,WACF,GAEL,WAAY,KAAM,aAAc,oBACnC,wBAAwB,EAAG,KAAM,wBAEjB,KACpB,GAAI,oBACF,iBAAqB,SAAQ,UAAU,IAAI,WAAW,QAAQ,GAC1D,eAAiB,KAGnB,QAAQ,WACR,QAAU,aACV,cAAgB,qBAAa,iBACzB,cAAc,OAAQ,OAAM,MAAM,SAI1C,qBAAa,2BACT,MAAO,cAAe,OAAM,MAAM,QACtC,0BACI,qBAAa,0BAA0B,OAAM,MAAO,0BACrC,aAAK,cAAc,iBAE1B,SAAQ,WAAW,SAAU,OAAM,OAC/C,GAAI,aAAK,cAAc,OAAM,SAAW,GACtC,UAAc,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAChD,QAAQ,QAAS,WAAY,OAQ/B,GALI,oBAEF,SAAQ,YAAY,WAAW,QAG7B,UAEF,aAAiB,qBAAa,qBAAqB,IAAI,MAAO,cAC9D,IAAI,MAAQ,SAGd,MAAO,KAGF,eAAgC,CACrC,WAAY,IACZ,YAAa,OACb,UAAW,QACX,WAAY,mBCjE0B,wBAAwB,eCQhE,2BACE,SAAW,SAAQ,KAAK,MAAM,KAAM,KAAiB,CACnD,SACA,QACA,SACA,QACA,SACA,WAIJ,qBAEE,IAAO,OAAQ,iBAAS,OAAS,MAC1B,GAAK,WACA,SAAQ,UAAU,IAAI,EAAE,QAAQ,IACrC,MAAQ,eAEY,GAAI,OAAM,EAAE,MAAM,QAC7C,UAAa,EAAG,EAAI,SAAS,OAAQ,IACnC,SAAS,GAAK,EAAE,MAAM,GAAK,KAAK,GAElC,gBAAoB,GAAI,YAAW,GAAI,YAAW,EAAE,OAAO,sBACrC,GAAI,YAAW,GAAI,YAAW,UAAU,YAElD,SAAQ,WAAW,SAAU,EAAE,aAC7B,SAAQ,UAAU,IAAI,IAAI,QAAQ,GAChD,MAAA,UACI,IAAK,YAAa,EAAE,MAAM,OAAQ,cAAe,SAAS,OAC1D,SAAS,IAAI,OAAQ,OAClB,IAGF,gBAAiC,CACtC,WAAY,KACZ,YAAa,OACb,UAAW,QACX,WAAY,gBCrCd,2BACE,SAAW,SAAQ,KAAK,MAAM,KAAM,KAAiB,CACnD,SACA,QACA,SACA,SACA,SACA,OACA,SACA,WAIG,UAE6B,EAAE,OAAQ,iBAAS,UAC7C,IAAO,GAAK,QACL,EAAG,QAAU,UAER,SAAQ,UAAU,IAAI,EAAE,QAAQ,eACxB,GAAI,YAAW,GAAI,YAAW,EAAE,OAAO,oBACvC,EAAE,MAAM,QAC5B,YAAY,YAAY,OAAS,GAAK,EACtC,cAAkB,SAAQ,WAAW,YAAa,EAAE,mBAChC,SAAQ,UAAU,IAAI,UAAU,QAAQ,cACzC,SAAQ,WAAW,YAAa,sBAC9B,SAAQ,UAAU,IAAI,WAAW,QAAQ,GAE9D,MAAA,UACI,IAAK,YAAa,EAAE,MAAM,OAAQ,SAAS,EAAE,OAAQ,EAAG,OACxD,YAAa,cAEV,CAAC,UAAW,yBAGW,CACtC,WAAY,KACZ,YAAa,OACb,UAAW,QACX,WAAY,OC3Cd,uBAGE,IAAO,OAAQ,iBAAS,OAAS,MAC1B,OAAS,QACX,MAAQ,MAET,KAAO,GACT,OAAQ,MAAM,MAAM,QAGtB,eAAmB,MAAM,MAAM,WAClB,MAAM,MAAM,gBACE,GAAI,OAAM,KAAO,YAC7B,EACf,UAAa,EAAG,EAAI,KAAM,IACpB,IAAM,MACR,UAAS,YAAc,MAAM,MAAM,IAGvC,SAA2B,GAAI,OAAM,kBACvB,GAAI,OAAM,MAAM,KAAK,QACtB,MAAM,MAAM,QACzB,KAAK,MAAQ,EACb,UAAa,EAAG,EAAI,KAAK,OAAQ,IAC/B,MAAM,MAAQ,EACd,KAAK,GAAK,QAAM,CAAC,OAAQ,CAAC,EAAG,OAAQ,MAAO,CAAC,MAAO,MAAO,QAAA,WAE7D,MAAO,MAAK,IAAI,EAAE,OAAQ,SAAY,EAAC,OAAQ,MAAO,MAAO,YAGxD,kBAAmC,CACxC,WAAY,OACZ,YAAa,OACb,WAAY,SCpCd,0BACE,IAAO,QAAS,GAAI,kBAAW,SACnB,SAAQ,WAAW,EAAE,MAAO,EAAE,eAC1B,SAAQ,mBAAmB,KAC3C,MAAA,SAAQ,KAAK,GACN,IAGF,qBAAsC,CAC3C,WAAY,UACZ,YAAa,OACb,WAAY,2BC2EwB,CACpC,WACA,WACA,YACA,cACA,eACA,mBACA,YACA,mBACA,cACA,cACA,2BACA,WACA,qBACA,cACA,oBACA,6BACA,aACA,WACA,kBACA,YACA,qBACA,aACA,gBACA,kBACA,qBACA,mBACA,4BACA,gBACA,gBACA,eACA,oBACA,gBACA,iBACA,YACA,iBACA,WACA,kBACA,WACA,eACA,eACA,YACA,WACA,eACA,gBACA,WACA,2BACA,2BACA,2BACA,gBACA,cACA,gBACA,YACA,aACA,WACA,aACA,YACA,aACA,eACA,YACA,aACA,eACA,sBACA,eACA,wBACA,aACA,iBACA,cACA,eACA,WACA,aACA,eACA,cACA,YACA,cACA,yBACA,oBACA,WACA,WACA,YACA,YACA,YACA,iBACA,cACA,kBAGF,uBAA2B,gBACzB,eAAe,cChLjB,SAAY,MAMZ,KAAI,aAIA,wBAAyB,SAAY,YAAY,SAAS,GAAI,YAAW,CACvE,EAAG,GAAI,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAI,EAAG,EAAK,GAAI,EAAI,EAAG,EACpD,EAAG,EAAI,EAAK,GAAK,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,OAOvD,KAAI,aAAa,+BAAgC,UAG/C,GAAI,KAAI,IAAI,WACV,MAAO,GAGT,IAGE,MAAA,IAAI,kBAAiB,MAAM,YAAY,GAAI,mBAAkB,IAGtD,YAAY,SAAS,GAAI,YAAW,CACzC,EAAG,GAAI,IAAK,IAAK,EAAG,EAAI,EAAI,EAAG,EAAG,EAAG,EAAI,GAAI,EAAK,EAAI,EAAG,EAAG,EAAI,EAAG,EACnE,EAAG,EAAI,EAAK,EAAK,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAI,IAAK,GAAI,EAAG,EAAG,GAAI,eAGlE,MAAO,MCnCX,oCAAoC,YAAA,8DCrBF,i2GDwBV,YAAA,yCAxBxB,aAqCiC,eAK/B,kBACE,QADiB,KAAA,KAAA,KAHX,KAAA,iBAAmB,EAKzB,KAAK,KAAK,KAAK,OACf,KAAK,UAAY,GAAI,aAAY,KAAM,YAGzC,0BAEE,WAAe,GACf,MAAA,MAAK,KAAK,OAAQ,OAAQ,MAAO,OAC1B,OAGT,aACE,MAAO,MAAK,UAAU,kBAGlB,SACJ,UAAc,aAAK,MACnB,IACA,aAAiB,aAAK,MAAQ,MAC9B,MAAO,CAAC,UAGV,gCAGE,OAAW,KAAK,mBAChB,GAAI,QAAU,UACZ,gBAAoB,OACpB,KAAK,UAAU,IACX,OAAQ,CAAC,GAAI,YAAa,MAAO,MAAO,aAAc,OAC1D,OAGF,SAAa,aAAK,cAAc,gBACf,KAAO,aAAK,gBAAgB,oBACxB,KAAK,KAAK,QAAQ,UAEvC,KAAK,UAAU,IAAI,OAAQ,CAAC,GAAI,aAAc,MAAO,QAErD,KAAK,KAAK,KAAK,eAAe,GAAI,KAAM,cAEpC,QAAU,MACZ,KAAK,KAAK,OAAO,IACb,GAAI,YACC,OAAmC,OACnC,OAAmC,WAAY,UACpD,mBAIF,cACJ,MAAO,MAAK,SAAS,QAGvB,iBACE,IAAO,aAAc,MAAO,MAAO,aAC/B,KAAK,UAAU,IAAI,QACvB,GAAI,QAAU,SACZ,MAAO,aAET,UAAc,KAAK,KAAK,OAAO,MAC3B,aACA,aAAe,aAAK,cAAc,OAAS,aAAK,gBAAgB,QACpE,MAAO,sBAAqB,MAAM,OAAQ,OAG5C,oBACE,SAAa,KAAK,UAAU,IAAI,QAChC,KAAK,KAAK,MAAM,KAAK,cACrB,KAAK,KAAK,KAAK,YAAY,KAAK,IAChC,KAAK,UAAU,OAAO,QAGxB,iBACE,MAAO,IAKT,wBACE,MAAO,MAAK,UAAU,IAAI,QAAQ,aAGpC,UACE,KAAK,KAAK,KAAK,UACf,KAAK,KAAO,KAGd,SACE,MAAO,CAAC,WAAY,IAStB,qCAEE,WACA,GAAI,cAAgB,KAClB,OAAS,KAAK,MAAM,KAAmB,MAAO,YAE9C,OAAS,GACT,OAAW,KAAK,mBAChB,KAAK,UAAU,IAAI,OAAQ,CAAC,GAAI,aAAc,MAAO,QACrD,SAAa,aAAK,cAAc,OAChC,KAAK,KAAK,KAAK,eAAe,GAAI,KAAM,cAE1C,MAAO,CAAC,OAAQ,MAAO,OAGzB,oBAAoB,MAAO,MAAO,SAEhC,YAAe,KAAK,KAAK,OAAO,QACzB,cAAgB,KAAK,UAAU,IAAI,aAC7B,aAAK,cAAc,OAChC,OAAQ,WACD,UACH,MAAO,IAAI,cAAa,QAAQ,aAAc,UAC3C,QACH,MAAO,IAAI,YAAW,QAAQ,aAAc,UACzC,OACH,MAAO,IAAI,YAAW,QAAQ,aAAc,cAE5C,KAAM,IAAI,OAAM,iBAAiB,YAKzC,yCAEE,MAAO,oBACL,cAAK,MAAM,KAAM,CAAC,YAAa,gBAAgB,KAAK,WAC7C,SAAS,IACZ,QAAQ,IAAI,EAAE,uCAAuC,SAEvD,SAAS,cAAc,KAAK,SAC1B,YAAY,YAAY,OAAQ,SAAS,KAAK,SAC5C,SAAS,OAAO,gBAIf,IAUX,8EAGE,GAAI,UAAY,KAGd,MAAO,UAGT,SAA2B,yBAO3B,MANI,gBAAiB,iBACnB,KAAO,uCACE,eACT,MAAO,+BAGL,aAAe,MACb,YAAY,OAAS,KAChB,YAAY,MAIhB,iBAAmB,KAU5B,sBACE,oCAA0C,KAAM,SAAQ,IAAI,CAC1D,MAAM,SAAS,yBACf,MAAM,SAAS,kCAGjB,MAAO,IAAI,SAAQ,mBACjB,kBAAyC,GAOzC,cAAc,WAAa,gBACzB,GAAI,KAAK,SAAS,eAChB,aAAiB,wBACJ,GAAI,MAAK,CAAC,UAAW,CAAC,KAAM,2BACzC,MAAO,KAAI,gBAAgB,MAG7B,MAAI,MAAK,SAAS,SACT,oBACH,cAA0B,iBAC1B,gBAAkB,KAAO,eAAiB,QAEzC,OAAS,MAMd,aACF,eAAc,gBACV,0BAA0B,oBACtB,cAA0B,iBAC1B,gBAAkB,KAAO,eAAiB,MAEpD,SAEI,kBAAoB,eAAiB,UAAY,KACnD,MAAO,gCAAA,QAAwB,eAC/B,KAAK,oBAAsB,GAAI,MAC3B,CAAC,uCACA,gCAAA,QAAwB,YACzB,CAAC,KAAM,qBAGX,KAAO,kBAAA,QAAY,eAGrB,mBAA+B,KAE/B,KAAK,KAAO,CACV,KAAM,KAAK,MAAM,OAAQ,KAAM,IAC/B,eAAgB,KAAK,MACjB,kBAAmB,KACnB,CACE,SACA,SACA,WAEN,YAAa,KAAK,MAAM,eAAgB,eAAgB,CAAC,WACzD,QAAS,KAAK,MAAM,UAAW,eAAgB,KAEjD,gBAAkB,GAClB,KAAK,qBAAuB,KAC1B,YAAc,GACd,YAAc,GACd,QAAQ,CAAC,QAEX,KAAK,QAAU,KACb,GAAI,YAEF,OAEF,GAAI,YAGF,OAEF,YAAc,GACd,cACI,kMAEJ,OAAO,CAAC,QAAS,eAKvB,6CAEE,OAAQ,WACD,UACH,MAAO,IAAI,cAAa,aACrB,QACH,MAAO,IAAI,YAAW,aACnB,OACH,MAAO,IAAI,YAAW,iBAEtB,KAAM,IAAI,OAAM,iBAAiB,UAIvC,oBAAwB,CACtB,yBAA0B,8BAC1B,iDAIqB,oBACM,iBACyB,eACpC,eACA,GAcZ,2CAAuD,IAI3D,GAHA,gBACI,qGAEA,YACF,KAAM,IAAI,OACN,kIAGN,SAAW,KACX,YAAc,iBA4BV,uDAEiB,IACrB,GAAI,YACF,KAAM,IAAI,OACN,mIAKN,GAAI,MAAO,kBAAoB,SAC7B,eAAiB,qBAEjB,YAAc,gBACd,iBACI,gBAAgB,OAAO,MAAQ,YAAY,OAAS,MACxD,GAAI,aAAa,OAAS,EACxB,KAAM,IAAI,OACN,2DACG,aAAa,KAAK,qKAM7B,YAAc,iBElahB,cAAgB,sBCuBM,EACtB,gBAAgB,OAAQ,UACtB,IAAO,MAAQ,KAAM,QACrB,MAAO,IAAI,aAAY,OACtB,enuC9BH,IAAA,+bCEO,qBACL,oBAEoB,IAUpB,GARA,IAAI,YAEJ,OAAO,MAAM,GAAG,QAAQ,EAAG,EAAG,cAC5B,SAAa,OAAO,SACpB,IAAI,OAAO,KAAK,EAAG,KAAK,GACxB,IAAI,OAAO,EAAG,KAGZ,UACF,SAAa,OAAO,OAAO,OAAS,MACzB,OAAO,GAClB,GAAI,CAAC,MAAQ,CAAC,GACZ,OAGF,IAAI,OAAO,KAAK,EAAG,KAAK,GACxB,IAAI,OAAO,GAAG,EAAG,GAAG,GAGtB,IAAI,SC1BN,IAAA,obCAA,IAAA,iBAYE,0BACE,GAAI,CAAC,cAAc,QAAU,CAAC,cAAc,QAC1C,KAAM,IAAI,OAAM,wFAAwF,KAAK,UAAU,CAAE,MAAO,YAGlI,KAAK,OAAS,MACd,KAAK,QAAU,UAGN,SAAkB,MAAO,MAAK,UAE9B,UAAmB,MAAO,MAAK,QAEnC,UACL,MAAO,IAAI,YAAW,EAAI,KAAK,MAAO,EAAI,KAAK,UDrB5C,kBAAkB,YACvB,MAAO,kBAAqB,SAAU,OAAO,MAAM,SAAW,IAGzD,4BACL,MAAO,UAAS,OAAQ,GAGnB,4BACL,MAAO,UAAS,OAAQ,GAGnB,4BACL,MAAO,UAAS,OAAQ,GAGnB,4BACL,MAAO,UAAS,OAAQ,GAGnB,sBACL,MAAO,KAAM,IAAM,EAGd,sBACL,MAAO,KAAM,IAAM,EAGd,yBAA2C,GAChD,MAAU,IAAM,KAChB,MAAO,MAAK,MAAM,IAAM,GAAK,EAGxB,2BACL,MAAO,MAAO,IAAI,OAAS,IAAI,OAG1B,oCAAqC,MAAO,mBACjD,WAAc,UAAY,KAAK,IAAI,OAAQ,OAC3C,MAAO,IAAI,YAAW,KAAK,MAAM,MAAQ,QAAQ,KAAK,MAAM,OAAS,SAGhE,6BACL,MAAO,KAAI,OAAO,WAAa,KAAI,IAAI,IAAK,GAAI,OAAM,EAAG,IACtD,IAAI,GAAI,OAAM,IAAI,OAAQ,IAAI,SAG5B,iCACL,MAAO,OAAM,KAAK,KAAK,GAAG,IAAI,OAAU,MAAS,EAAI,OAGhD,4BAEL,MAAO,CAAC,CAAC,KAAQ,MAAQ,UAAc,MAAQ,WAAc,CAAC,OAAO,MAAM,MAAQ,MAAQ,EAGtF,iCACL,MAAO,eAAc,MAAQ,KAAO,GAAK,KAAO,EE9DlD,IAAA,YAUE,iBACE,KAAK,GAAK,EACV,KAAK,GAAK,KAGR,KAAc,MAAO,MAAK,MAE1B,KAAc,MAAO,MAAK,GAEvB,QACL,MAAO,IAAI,OAAM,KAAK,EAAI,GAAG,EAAG,KAAK,EAAI,GAAG,GAGvC,QACL,MAAO,IAAI,OAAM,KAAK,EAAI,GAAG,EAAG,KAAK,EAAI,GAAG,GAGvC,QACL,MAAO,IAAI,OAAM,KAAK,EAAI,GAAG,EAAG,KAAK,EAAI,GAAG,GAGvC,QACL,MAAO,IAAI,OAAM,KAAK,EAAI,GAAG,EAAG,KAAK,EAAI,GAAG,GAGvC,MACL,MAAO,IAAI,OAAM,KAAK,IAAI,KAAK,GAAI,KAAK,IAAI,KAAK,IAG5C,YACL,MAAO,MAAK,KAAM,KAAK,GAAK,EAAM,KAAK,GAAK,GAGvC,QACL,MAAO,IAAI,OAAM,KAAK,MAAM,KAAK,GAAI,KAAK,MAAM,KAAK,MC5CzD,gBAOgB,cACZ,MAAO,CAAC,CAAC,MAAQ,CAAC,KAAK,EAAG,KAAK,EAAG,KAAK,MAAO,KAAK,QAAQ,MAAM,qBAGrD,qDAA8E,IAC1F,GAAI,CAAC,IAAI,OAAO,KACd,KAAM,IAAI,OAAM,GAAG,yBAAyB,KAAK,UAAU,6DAG7D,GAAI,CAAC,yBAA4B,KAAI,MAAQ,GAAK,IAAI,OAAS,GAC7D,KAAM,IAAI,OAAM,GAAG,mBAAmB,IAAI,sBAAsB,IAAI,oCAYxE,yCAA2E,IACzE,QAAa,MAAQ,UAEN,CAAC,IAAI,KAAM,IAAI,IAAK,IAAI,MAAO,IAAI,QAAQ,MAAM,sBACjD,CAAC,IAAI,EAAG,IAAI,EAAG,IAAI,MAAO,IAAI,QAAQ,MAAM,eAE3D,GAAI,CAAC,QAAU,CAAC,OACd,KAAM,IAAI,OAAM,2EAA2E,KAAK,UAAU,QAG5G,sBAA8B,OAC1B,CAAC,IAAI,EAAG,IAAI,EAAG,IAAI,MAAO,IAAI,QAC9B,CAAC,IAAI,KAAM,IAAI,IAAK,IAAI,MAAQ,IAAI,KAAM,IAAI,OAAS,IAAI,KAE/D,IAAI,iBAAiB,CACnB,EAAG,EAAG,MAAO,QACZ,kBAAmB,yBAEtB,KAAK,GAAK,EACV,KAAK,GAAK,EACV,KAAK,OAAS,MACd,KAAK,QAAU,UAGN,KAAc,MAAO,MAAK,MAE1B,KAAc,MAAO,MAAK,MAE1B,SAAkB,MAAO,MAAK,UAE9B,UAAmB,MAAO,MAAK,WAE/B,QAAiB,MAAO,MAAK,KAE7B,OAAgB,MAAO,MAAK,KAE5B,SAAkB,MAAO,MAAK,EAAI,KAAK,SAEvC,UAAmB,MAAO,MAAK,EAAI,KAAK,UAExC,QAAiB,MAAO,MAAK,MAAQ,KAAK,UAE1C,WAAmB,MAAO,IAAI,OAAM,KAAK,KAAM,KAAK,QAEpD,YAAoB,MAAO,IAAI,OAAM,KAAK,MAAO,KAAK,QAEtD,cAAsB,MAAO,IAAI,OAAM,KAAK,KAAM,KAAK,WAEvD,eAAuB,MAAO,IAAI,OAAM,KAAK,MAAO,KAAK,QAE7D,QACL,sBAA8B,CAAC,KAAK,EAAG,KAAK,EAAG,KAAK,MAAO,KAAK,QAC7D,IAAI,KAAS,KAAK,MAAM,MAC3B,MAAO,IAAI,KAAI,CACb,EAAG,EAAG,MAAO,SAIV,QACL,sBAA8B,CAAC,KAAK,EAAG,KAAK,EAAG,KAAK,MAAO,KAAK,QAC7D,IAAI,KAAS,KAAK,MAAM,MAC3B,MAAO,IAAI,KAAI,CACb,EAAG,EAAG,MAAO,SAIV,WACL,IACE,EAAG,EAAG,MAAO,QACX,UACS,KAAK,IAAI,MAAQ,QAC9B,MAAI,OAAQ,QACV,IAAM,KAAO,EACb,OAAS,MAEX,AAAI,OAAS,OACX,IAAM,KAAO,EACb,QAAU,MAGL,GAAI,KAAI,CACb,EAAG,EAAG,MAAO,SAIV,WACL,WAAe,aAAa,GAAM,EAAkB,MAAQ,SAC7C,aAAa,GAAM,EAAkB,OAAS,EAC7D,MAAO,IAAI,KAAI,CACb,EAAG,KAAK,EAAI,OACZ,EAAG,KAAK,EAAI,OACZ,MAAO,KAAK,MAAQ,OACpB,OAAQ,KAAK,OAAS,SAInB,eACL,sBAA8B,CAC5B,KAAK,EAAK,KAAO,EACjB,KAAK,EAAK,KAAO,EACjB,KAAK,MAAQ,KACb,KAAK,OAAS,MAEhB,MAAO,IAAI,KAAI,CACb,EAAG,EAAG,MAAO,SAIV,uCACL,IACE,EAAG,EAAG,MAAO,QACX,cACa,KAAK,IAAI,EAAG,YACZ,KAAK,IAAI,EAAG,YAEZ,MAAQ,mBACP,OAAS,sBACN,KAAK,IAAI,SAAU,SAAW,wBAC7B,KAAK,IAAI,UAAW,UAAY,UAEtD,MAAQ,IAAI,KAAI,CACd,EAAG,SAAU,EAAG,SAAU,MAAO,aAAc,OAAQ,gBACrD,QAGC,aACL,IAAQ,MAAO,QAAW,OAChB,KAAK,EAAI,KACT,KAAK,EAAI,GAEnB,MAAO,IAAI,KAAI,CACb,EAAG,EAAG,MAAO,SAIV,qCACL,MAAU,KAAK,MAAQ,IACb,KAAK,OAAS,KAEb,KACA,MACD,MACA,IAEF,KAAK,OACL,KAAK,OACJ,KAAK,SACL,KAAK,OAEd,MAAI,IAAK,YACP,KAAM,CAAC,GAAK,WAAa,EACzB,GAAK,YAEP,AAAI,GAAK,aACP,KAAM,CAAC,GAAK,YAAc,EAC1B,GAAK,aAEP,AAAI,EAAI,GACN,KAAM,EAAI,EACV,EAAI,GAEN,AAAI,EAAI,GACN,KAAM,EAAI,EACV,EAAI,GAGC,CACL,GAAI,IAAK,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAIhC,kBACL,MAAO,IAAI,KAAI,CACb,KAAM,KAAK,KAAQ,OAAO,KAAO,KAAK,MACtC,IAAK,KAAK,IAAO,OAAO,IAAM,KAAK,OACnC,MAAO,KAAK,MAAS,OAAO,MAAQ,KAAK,MACzC,OAAQ,KAAK,OAAU,OAAO,OAAS,KAAK,SAC3C,WAAW,UC9MlB,yBASiC,KAC/B,0DAAyG,IACvG,MAAM,CACJ,KAAM,IAAK,MAAO,QACjB,2BCbP,IAAA,sBAeE,8DAOE,KAAK,WAAa,GAAI,YAAW,UAAU,MAAO,UAAU,QAC5D,KAAK,OAAS,MACd,KAAK,YAAc,WACnB,KAAK,WAAa,UAClB,KAAK,KAAO,GAAI,KAAI,aAAa,QAAQ,KAAK,eAGrC,SAAkB,MAAO,MAAK,UAE9B,cAAuB,MAAO,MAAK,eAEnC,aAAsB,MAAO,MAAK,cAElC,OAAa,MAAO,MAAK,QAEzB,aAA0B,MAAO,MAAK,cAEtC,cAAuB,MAAO,MAAK,UAAU,SAE7C,eAAwB,MAAO,MAAK,UAAU,UAE9C,eAAqB,MAAO,IAAI,KAAI,KAAK,MAAM,QAAQ,KAAK,UAAU,WAE1E,sBACL,MAAO,IAAI,iBACT,KAAK,MACL,KAAK,WACL,KAAK,UACL,KAAK,YACL,CAAE,MAAO,WCnDf,2BAUmC,iBACjC,yCAKE,MAAM,MAAO,MAAO,GAAI,YAAa,WAGhC,sBACL,IAAQ,MAAO,YAAa,WAAc,MAAM,QAAQ,MAAO,QAC/D,MAAO,IAAI,eAAc,MAAO,YAAa,aCnB1C,aAAa,gBAAuC,IACzD,UAAc,KAAK,IAAI,EAAK,KAAK,IAAI,KAAK,MAAO,KAAK,OAAS,KAAK,IAAI,KAAK,KAAM,KAAK,cACzE,KAAK,IAAI,EAAK,KAAK,IAAI,KAAK,OAAQ,KAAK,QAAU,KAAK,IAAI,KAAK,IAAK,KAAK,mBACrE,MAAQ,OAE7B,MAAO,OACH,aAAgB,MAAK,KAAO,KAAK,KAAO,cACxC,aAAe,KAAK,IAAI,KAAK,KAAM,KAAK,MCPvC,iBAAiB,KACtB,OAAW,IAAI,IAAI,IAAQ,GAAG,MACnB,IAAI,IAAI,IAAQ,GAAG,QACjB,GAAG,OAAO,UAAa,EAAI,KAAM,EAAI,KAAM,eAC3C,GAAG,OAAO,UAAa,EAAI,KAAM,EAAI,KAAM,eAC3C,GAAG,OAAO,UAAa,KAAM,EAAI,EAAI,KAAM,QAC3C,GAAG,OAAO,UAAa,KAAM,EAAI,EAAI,KAAM,GAExD,MAAO,IAAI,aAAY,KAAM,KAAM,KAAM,MCPpC,4BACL,gCAGiB,IAEjB,yBAA2B,OACxB,IAAI,kBAAsB,EAAE,MAAO,YACnC,KAAK,SAAY,GAAG,MAAQ,GAAG,OAC/B,IAAI,GAAO,EAAE,eAEO,GAEvB,KAAO,qBAAqB,OAAS,IACnC,SAAa,qBAAqB,MAClC,KAAK,KAAK,MAEV,YAAgB,6BAEU,GAC1B,UAAa,EAAG,EAAI,QAAQ,OAAQ,KAClC,QAAY,QAAQ,WAEJ,MAAM,aACP,MAAM,KAErB,QAAQ,KAAK,IAAI,QAAS,OAAQ,QAGpC,qBAAuB,qBAAqB,OAC1C,OAAU,QAAQ,IAAM,cAI5B,MAAO,MCnCF,mBAAmB,WACxB,MAAO,AAAG,MAAK,KACb,WAAkB,cACJ,AAAG,KAAK,CAAC,GAAG,EAAE,MAAM,MAAM,EAAG,GAAI,GAAI,EAAG,iBACxC,AAAG,KAAK,CAAC,GAAG,EAAE,MAAM,MAAM,EAAG,GAAI,GAAI,EAAG,iBACxC,AAAG,KAAK,CAAC,GAAG,EAAE,MAAM,MAAM,EAAG,GAAI,GAAI,EAAG,mBACtC,AAAG,OAAO,CAAC,MAAO,MAAO,OAAQ,GAEjD,MAAO,AAAG,KAAI,EAAG,WCAd,qBACL,wBACyB,IAEzB,MAAO,AAAG,MAAK,KACb,kBAAwB,UAAU,MAAM,MAAM,GAC9C,GAAI,SAAW,MACb,MAAO,WAGT,YAAgB,KAAK,IAAI,OAAS,qBACZ,KAAK,MAAM,QAAW,eAAgB,GAAM,gBAC9C,OAAS,MAAQ,EAAI,sBAEb,qBAC1B,uBAA2B,UAAU,MAAM,QAC3C,0BAAmB,aAAe,mBAC3B,AAAG,KAAK,mBAAoB,EAAG,gCAGZ,oBAAoB,sCACjB,QAAW,oBAAoB,MAAM,kCAEvC,eAAiB,uBAC1C,oBAAoB,wBACpB,oBAEmB,CACrB,qBACA,UACA,qBAEC,OAAO,GAAO,CAAC,CAAC,GAEhB,IAAI,GAAkB,AAAG,KAAK,EAAG,YACpC,MAAO,AAAG,QAAO,eAAgB,eC7C9B,sBAAsB,YAC3B,WAAc,WAAW,QACzB,UAAa,OAAM,OAAS,EAAG,EAAI,EAAG,KACpC,MAAU,KAAK,MAAM,KAAK,SAAY,GAAI,MAChC,OAAM,GAChB,OAAM,GAAK,OAAM,GACjB,OAAM,GAAK,EAEb,MAAO,QCDF,kBAAiB,GACtB,MAAO,GAAK,GAAI,KAAK,IAAI,CAAC,IAGrB,2BACL,MAAO,MAAK,IAAI,EAAK,GAAI,ICZ3B,IAAA,kBAS0B,KACxB,qDAAoG,IAClG,MAAM,CACJ,EAAG,EAAG,MAAO,QACZ,2BCHD,KAAO,QACA,aACI,kBAZjB,MA0BE,wDAGiB,GAAI,OAAM,EAAG,IAE5B,IAAQ,MAAO,QAAW,QAC1B,KAAK,SAAW,GAAI,YAAW,MAAO,QACtC,KAAK,OAAS,MACd,KAAK,WAAa,8BAA8B,IAC9C,IAAQ,GAAG,IAAI,GAAI,OAAM,MAAO,SAAS,IAAI,WAItC,SAAiB,MAAO,IAAI,OAAM,KAAK,OAAO,EAAG,KAAK,OAAO,MAE7D,cAAuB,MAAO,MAAK,SAAS,SAE5C,eAAwB,MAAO,MAAK,SAAS,UAE7C,aAAuB,MAAO,MAAK,cAEnC,qBACT,MAAO,MAAK,WAAW,IACrB,IAAQ,GAAG,IAAI,KAAK,QAAQ,IAAI,GAAI,OAAM,KAAK,WAAY,KAAK,eAI7D,sBACL,MAAO,IAAK,MAAK,YACf,KAAK,kBACL,CAAE,MAAO,SAIN,aACL,MAAO,IAAK,MAAK,YACf,KAAK,kBACL,KAAK,SACL,GAAI,OAAM,EAAG,IAIV,iBACL,MAAO,MAAK,QAAQ,GAAG,EAAG,GAAG,GAcxB,wBAE6D,IAElE,GAAI,WACF,QAAY,oBAAqB,eAC7B,UAAU,IAAI,QACd,GAAI,KAAI,WAEZ,MAAO,MAAK,QAAQ,IAAI,EAAG,IAAI,GAAG,MAAM,KAAM,SAGhD,IAAQ,iBAAkB,eAAkB,CAAE,iBAAkB,GAAO,cAAe,MAAQ,SAE9F,MAAI,kBACK,KAAK,YAGP,KAAK,aAAa,eAGnB,YACN,YAAgB,KAAK,sEAEgC,oBACjC,IAAe,YAAY,IAAI,IAAI,2BAC/B,aAAY,eAAiB,YAAY,iBAAmB,OAEvE,KAAK,MAAM,eAAiB,mBAExB,eAAe,WAEtB,KAAK,MAAM,KAAK,IAAI,EAAG,SAAS,EAAK,KAAO,SAC5C,KAAK,MAAM,KAAK,IAAI,EAAG,SAAS,EAAK,KAAO,OAEtD,MAAO,IAAI,MAAK,EAAG,EAAG,KAAK,IAAI,KAAM,KAAK,WAAa,GAAI,KAAK,IAAI,KAAM,KAAK,YAAc,IAGvF,sBACN,QAAY,QAAQ,KAAK,WACzB,MAAO,KAAI,IAAI,IAAI,MAAQ,QAAS,IAAI,OAAS,SAGzC,2BACR,KAAM,IAAI,OAAM,4DC/HpB,IAAA,4BAIoC,eACxB,2BACR,QAAY,KAAK,UACjB,MAAO,CACL,IAAI,GACJ,IAAI,GACJ,eAAe,CAAC,IAAI,GAAI,IAAI,QCVlC,IAAA,6BAIqC,eAC5B,gBACL,MAAO,MAAK,UAAU,MAAM,EAAG,IAG1B,iBACL,MAAO,MAAK,UAAU,MAAM,GAAI,IAG3B,kBACL,MAAO,MAAK,UAAU,MAAM,GAAI,IAG3B,UACL,MAAO,MAAK,UAAU,MAAM,GAAI,IAG3B,aACL,MAAO,MAAK,UAAU,MAAM,GAAI,IAG3B,cACL,MAAO,MAAK,UAAU,MAAM,GAAI,IAG3B,WACL,MAAO,MAAK,UAAU,MAAM,GAAI,IAGxB,2BACR,MAAO,CACL,KAAK,aACL,KAAK,cACL,KAAK,YACL,IAAI,kBCtCV,IAAA,gBAYE,4BACE,KAAK,OAAS,MACd,KAAK,UAAY,YAGR,SAAkB,MAAO,MAAK,UAE9B,YAAqB,MAAO,MAAK,UAErC,sBAAiC,IACtC,MAAO,GAAG,KAAK,QAAQ,aAAe,KAAK,OAAM,KAAK,aAAe,OCtBzE,IAAA,wBAKgC,WAChB,qCAGZ,GAFA,IAAI,iBAAiB,IAAK,QAEtB,CAAC,cAAc,IAAI,OACrB,KAAM,IAAI,OAAM,GAAG,qCAAqC,IAAI,yBAMhE,uBACE,MAAM,KACN,KAAK,OAAS,SAGL,SAAkB,MAAO,MAAK,SCrB3C,IAAA,6BAKE,+BACE,GAAI,CAAE,OAAO,QAAU,UACrB,KAAM,IAAI,OAAM,sEAGlB,GAAI,CAAC,MAAM,QAAQ,cAAgB,YAAY,KAAK,MAAU,CAAE,gBAAgB,gBAC9E,KAAM,IAAI,OAAM,4FAGlB,KAAK,OAAS,MACd,KAAK,aAAe,eAGX,SAAkB,MAAO,MAAK,UAE9B,eAAgC,MAAO,MAAK,aAEhD,SACL,MAAO,CACL,MAAO,KAAK,MACZ,YAAa,KAAK,YAAY,IAAI,GAAO,MAAM,KAAK,WAI1C,kBACZ,gBAAoB,OAAK,YAAY,IAAI,GAAY,GAAI,cAAa,IACtE,MAAO,IAAI,wBAAuB,OAAK,MAAO,eC/BlD,IAAA,0BAKkC,kBAClB,uCAGZ,GAFA,WAAW,wBAAwB,IAAK,QAGtC,CAAC,mBAAmB,IAAI,QACrB,CAAC,mBAAmB,IAAI,YAE3B,KAAM,IAAI,OAAM,GAAG,uCAAuC,IAAI,eAAe,IAAI,6CAQrF,wCACE,MAAM,IAAK,OACX,KAAK,OAAS,MACd,KAAK,YAAc,cAGV,SAAkB,MAAO,MAAK,UAE9B,cAAuB,MAAO,MAAK,cCvBzC,6BAA6B,KAClC,MAAO,KAAI,oBAAqB,eAG3B,sDAML,cAAkB,CAAE,WACpB,MAAO,IAAK,aAAc,WCfrB,4BACL,IAAM,OAAQ,OAAO,MACrB,GAAI,CAAC,OAAO,KAAM,IAAI,OAAM,gEAE5B,aAAiB,KACf,KAAM,IAAI,OAAM,gEAGlB,MAAO,CACL,OAAQ,kBACR,yBACA,MAAO,iBACP,UACA,MAAO,iBACP,oBAAqB,IAAM,SAAS,cAAc,UAClD,mBAAoB,IAAM,SAAS,cAAc,OACjD,aACA,UCjBG,0BAA0B,IAC/B,mBAAqB,GAErB,GAAI,CAAC,GACH,IAEE,GAAa,yBAEb,eAAiB,IAAI,WAIzB,aAAiB,GACb,UAAsB,GAAI,SAAgB,mBAC1C,GAAG,SAAS,SAAU,eAA+B,IAAM,OAAO,KAAO,QAAQ,YAEjF,KACA,KAAM,IAAI,OAAM,qEAAqE,mBAGzF,MAAO,CACL,UCnBG,2BAEL,IAAM,OAAS,OAAO,QAAa,OAAO,wBAC5B,OAAO,OAAS,OAAO,qCAET,KAC1B,GAAI,OAAQ,MAAO,IAAI,QACvB,KAAM,IAAI,OAAM,kGAGS,KACzB,GAAI,MAAO,MAAO,IAAI,OACtB,KAAM,IAAI,OAAM,oFAGJ,OAAO,iBAGF,mBAEnB,MAAO,CACL,OAAQ,QAAU,QAClB,yBAA0B,OAAO,0BAA4B,QAC7D,MAAO,OAAS,QAChB,UAAW,OAAO,WAAa,QAC/B,MAAO,OAAO,kBAAoB,QAClC,oBACA,mBACA,gBACG,YCjCA,sBACL,MAAO,OAAO,SAAW,UACpB,MAAO,WAAa,aACpB,MAAO,mBAAqB,aAC5B,MAAO,oBAAsB,aAC7B,MAAO,mBAAqB,aAC5B,MAAO,YAAc,aACrB,MAAO,2BAA6B,YCH3C,IAAA,SAAyB,2CAKzB,kBACE,GAAI,CAAC,YACH,KAAM,IAAI,OAAM,yEAElB,MAAO,aAGT,uBACE,YAAc,MAGhB,sBAGE,MAAI,cAAoB,OAAO,oBAC3B,oBAAmB,OAAO,mBACvB,KAGT,4BAKE,GAJA,AAAK,aACH,aAGE,CAAC,YACH,KAAM,IAAI,OAAM,8EAGlB,IAAQ,OAAS,YAAY,OAAQ,MAAQ,YAAY,OAAU,MACnE,YAAY,OAAS,OACrB,YAAY,MAAQ,MACpB,YAAY,oBAAsB,MAAI,qBAAwB,KAAM,GAAI,SACxE,YAAY,mBAAqB,MAAI,oBAAuB,KAAM,GAAI,QAEtE,YAAY,UAAY,MAAI,WAAa,YAAY,UACrD,YAAY,MAAQ,MAAI,OAAS,YAAY,MAC7C,YAAY,MAAQ,MAAI,OAAS,YAAY,MAC7C,YAAY,SAAW,MAAI,UAAY,YAAY,SAG9C,SAAY,CACjB,OACA,OACA,WACA,iBACA,iBACA,gBACA,YACA,qBACA,4BAGF,aC3DO,sBAAsB,KAC3B,MAAI,CAAC,KAAI,YAAc,MAAO,MAAQ,SAC7B,SAAS,eAAe,KAE1B,ICHF,6BAA6B,WAClC,IAAQ,OAAQ,oDAA6B,KAAI,SAEjD,GAAI,oBAAqB,2BACvB,MAAO,WAGT,WAAe,aAAa,WAE5B,GAAI,CAAE,kBAAkB,SACtB,KAAM,IAAI,OAAM,kEAGlB,QAAY,OAAO,WAAW,MAC9B,GAAI,CAAC,IACH,KAAM,IAAI,OAAM,gDAGlB,MAAO,KCfF,IAAK,eAAL,2BAEL,yBAAW,WAEX,0BAAY,YAEZ,4BAAc,cAEd,6BAAe,iBARL,qCANZ,+BAuCE,oBAA6C,IAC3C,IACE,eAAgB,gBAAiB,UAAW,SAAU,UAAW,SAC/D,QACJ,KAAK,eAAiB,gBAAkB,eAAe,SACvD,KAAK,gBAAkB,iBAAmB,qBAC1C,KAAK,UAAY,WAAa,yBAC9B,KAAK,SAAW,UAAY,GAC5B,KAAK,UAAY,WAAa,UAC9B,KAAK,QAAU,SAAW,kBAhD9B,MA2DE,gCAGmC,IAGjC,KAAK,KAAO,MAAO,OAAS,SACxB,CAAC,MACA,eAAgB,eAAgB,KAAK,KAAO,KACjD,KAAK,OAAS,OACd,KAAK,QAAU,GAAI,sBAAqB,SAG1C,kBACE,IAAQ,SAAY,KAAK,QACzB,MAAO,MAAK,KAAK,IAAI,GAAO,IAAI,YAAY,GAAG,OAAO,OAAO,SAAa,GAAK,GAAK,GAAK,GAAK,GAAM,EAAI,QAG1G,gBACE,IAAQ,SAAU,SAAY,KAAK,QACnC,MAAO,MAAK,KAAK,OAAS,SAAY,EAAI,QAG5C,6BACE,IAAQ,gBAAmB,KAAK,oBACZ,iBAAmB,eAAe,cAAgB,iBAAmB,eAAe,qBACrF,iBAAmB,eAAe,aAAe,iBAAmB,eAAe,4BAE/E,KAAK,aAAa,qBACjB,KAAK,kBAClB,YAAc,KAAK,OAAO,EAAI,eAAiB,KAAK,OAAO,IAC5D,WAAa,KAAK,OAAO,EAAI,gBAAkB,KAAK,OAAO,EAGrE,GAAI,YACF,IAAQ,MAAO,QAAW,gBACb,KAAK,IAAI,KAAK,IAAI,EAAG,MAAQ,gBAAiB,QAC9C,KAAK,IAAI,KAAK,IAAI,EAAG,OAAS,iBAAkB,GAC7D,MAAO,CAAE,EAAG,KAAM,EAAG,MAEvB,MAAO,CAAE,EAAG,GAGd,gBACE,WAAe,aAAa,eAChB,oBAAoB,SAG9B,gBAAiB,UAAW,SAAU,UAAW,SAC/C,KAAK,QAET,IAAI,KAAO,GAAG,cAAc,YAC5B,iBAAqB,KAAK,aAAa,gBACpB,KAAK,gBAExB,IAAI,UAAY,gBAChB,cAAkB,KAAK,aAAa,IAAK,QACzC,IAAI,SAAS,UAAU,EAAG,UAAU,EAAG,aAAc,YAErD,IAAI,UAAY,UAChB,KAAK,KAAK,QAAQ,eAChB,MAAU,QAAU,UAAU,IACpB,QAAU,UAAU,EAAM,GAAI,GAAK,SAC7C,IAAI,SAAS,SAAU,EAAG,OC1HhC,qBAuBE,oBAAuC,IACrC,IACE,SAAU,UAAW,MAAO,kBAC1B,QACJ,KAAK,SAAW,UAAY,qBAC5B,KAAK,UAAY,WAAa,EAC9B,KAAK,MAAQ,MAEb,4BAAgC,CAC9B,eAAgB,eAAe,YAC/B,gBAAiB,KAAK,UAExB,KAAK,iBAAmB,GAAI,sBAAqB,IAAK,2BAA4B,6BAnCtF,MA4CE,wBAE6B,IAE3B,KAAK,IAAM,GAAI,KAAI,KACnB,KAAK,QAAU,GAAI,gBAAe,SAGpC,gBACE,QAAY,oBAAoB,YAExB,SAAU,WAAc,KAAK,SAGnC,EAAG,EAAG,MAAO,QACX,KAAK,IACT,IAAI,YAAc,SAClB,IAAI,UAAY,UAChB,IAAI,WAAW,EAAG,EAAG,MAAO,QAE5B,IAAQ,OAAU,KAAK,QACvB,AAAI,OACF,GAAI,eAAc,CAAC,OAAQ,CAAE,EAAG,EAAK,UAAY,EAAI,GAAK,KAAK,QAAQ,kBAAkB,KAAK,aC1D7F,wBACL,sBAGA,oBAAwB,MAAM,QAAQ,YAAc,WAAa,CAAC,YAElE,gBAAgB,QAAQ,MAEtB,UAAc,cAAe,eACzB,IAAI,MACH,oBAAoB,KAAO,IAAI,UAAU,MAAQ,WAG1C,cAAe,eACvB,IAAI,IACH,oBAAoB,KAAO,IAAI,UAAU,IAAM,GAAI,KAAI,WAE9C,MAAQ,GAAG,OAAM,SAAW,OAC1C,GAAI,SAAQ,IAAK,CAAE,QAAS,KAAK,aCxB9B,uBAAuB,OAC5B,IAAQ,MAAO,OAAU,KAAI,SAE7B,MAAQ,iBAAiB,QAAS,MAAM,UAClC,gBAAiB,QAAS,MAAM,YAAc,ECH/C,0BAA0B,OAE/B,MAAO,IAAI,SAAQ,mBACjB,GAAI,gBAAiB,MAAI,SAAS,QAAU,cAAc,OACxD,MAAO,SAAQ,MAGjB,oBACE,GAAI,CAAC,EAAE,cAAe,OAEtB,EAAE,cAAc,oBAAoB,OAAQ,QAC5C,EAAE,cAAc,oBAAoB,QAAS,SAC7C,OAAO,GAGT,mBACE,GAAI,CAAC,EAAE,cAAe,OACtB,EAAE,cAAc,oBAAoB,OAAQ,QAC5C,EAAE,cAAc,oBAAoB,QAAS,SAC7C,QAAQ,GAGV,MAAM,iBAAiB,OAAQ,QAC/B,MAAM,iBAAiB,QAAS,WCxB7B,uBAAuB,KAC5B,MAAO,IAAI,SAAQ,mBACjB,AAAM,cAAe,OAAO,OAAO,GAAI,OAAM,qDAC7C,WAAe,GAAI,YACnB,OAAO,OAAS,KACd,AAAI,MAAO,QAAO,QAAW,UAAU,OAAO,GAAI,OAAM,qEACxD,QAAY,KAAI,SAAS,qBACzB,IAAI,OAAS,IAAM,QAAQ,KAC3B,IAAI,QAAU,OACd,IAAI,IAAM,OAAO,QAEnB,OAAO,QAAU,OACjB,OAAO,cAAc,OCXlB,4BAA4B,QACjC,IAAQ,MAAO,OAAU,KAAI,SAE7B,MAAI,kBAAiB,OACZ,GAAI,YAAW,OAAM,aAAc,OAAM,eAE9C,iBAAiB,OACZ,GAAI,YAAW,OAAM,WAAY,OAAM,aAEzC,GAAI,YAAW,OAAM,MAAO,OAAM,QCNpC,uBAAsB,CAAE,MAAO,SACpC,IAAQ,qBAAwB,KAAI,gBACrB,sBACf,cAAO,MAAQ,MACf,OAAO,OAAS,OACT,OAGF,2CACL,IAAQ,sBAAc,KAAI,SAE1B,GAAI,CAAE,iBAAiB,cAAc,CAAC,cAAc,OAClD,KAAM,IAAI,OAAM,8DAGlB,IAAQ,MAAO,QAAW,MAAQ,mBAAmB,cACtC,cAAa,CAAE,MAAO,SAErC,MAAI,iBAAiB,YACnB,oBAAoB,QAAQ,aAAa,MAAO,EAAG,GAEnD,oBAAoB,QAAQ,UAAU,MAAO,EAAG,EAAG,MAAO,QAErD,OCxBT,mCACE,kBAGA,iBAAqB,QAAU,KAAI,SAAS,iDAEP,UAAU,MAAM,MAAM,WAAW,WAAa,EAAI,eACnE,AAAG,KAAK,IAAM,UAAU,KAAK,OAAQ,MAAO,aAAa,SAC7E,YAAM,AAAG,iBAAQ,SAAS,YAAa,cAEvC,YAAY,UAEL,aCfF,wBAAwB,QAC7B,IAAQ,MAAO,OAAQ,OAAU,KAAI,SAErC,MAAO,kBAAiB,QACnB,iBAAiB,SACjB,iBAAiB,OCFjB,uBAAuB,6BAAuF,IACnH,IAAQ,MAAO,QAAW,KAAI,SAE9B,GAAI,CAAE,kBAAiB,QAAS,iBAAiB,SAC/C,KAAM,IAAI,OAAM,4EAGlB,SAAa,mBAAmB,eAClB,UAAY,KAAK,IAAI,KAAK,OAAQ,KAAK,aACvC,OAAQ,KAAK,aACZ,OAAQ,KAAK,oBAEP,cAAa,CAAE,MAAO,UAAW,OAAQ,wBAC1C,iBAAiB,QAAS,OAAQ,sBAAsB,eAE7D,KAAK,IAAI,MAAQ,QAAU,KAC/B,aAAe,MAAQ,OAAS,OAAS,KACzC,aAAe,OAAS,MAAQ,OAAS,EACpD,2BAAoB,cAAc,UAAU,YAAa,GAAI,GAAI,MAAO,QAEjE,aCzBT,IAAA,eAyBE,qCAE+B,IAdvB,mBAAkD,GAElD,eAAiC,GAIjC,wBAA8B,GAE9B,sBAA+B,GAQrC,GAAI,CAAC,MAAM,QAAQ,QACjB,KAAM,IAAI,OAAM,4HAA4H,UAG9I,KAAK,mBAAqB,kBAC1B,KAAK,WAAa,OAAO,OAEzB,OAAO,QAAQ,eACb,GAAI,WAAW,SACb,KAAK,cAAc,KAAO,OAC1B,KAAK,iBAAiB,KAAO,OAAM,MACnC,OAGF,GAAI,WAAW,SACb,cAAmB,OAAc,MAAM,GACvC,GAAI,YAAc,EAChB,KAAM,IAAI,OAAM,yCAAyC,sDAG3D,KAAK,cAAc,KAAO,OAC1B,KAAK,iBAAiB,KAAQ,OAAc,MAAM,MAAM,GACxD,OAGF,WAAgB,iBAAyB,MAAI,SAAS,OAAS,OAAQ,sBAAsB,QAC7F,KAAK,UAAU,KAAO,OACtB,KAAK,iBAAiB,KAAO,CAAC,OAAO,OAAQ,OAAO,MAAO,QAIpD,gBACT,MAAO,MAAK,iBAGH,YACT,MAAO,MAAK,aAGH,gBACT,MAAO,MAAK,UAAY,GAAK,KAAK,sBAGzB,aACT,MAAO,MAAK,cAGH,mBACT,MAAO,MAAK,oBAGH,aACT,MAAO,MAAK,cAGH,2BACT,MAAO,QAAM,KAAK,UAAW,EAAG,GAAG,IACjC,cAAiB,KAAK,2BAA2B,WAI9C,mBACL,MAAO,MAAK,SAAS,WAAa,KAAK,aAAa,UAG/C,6BACL,MAAO,MAAK,iBAAiB,UAGxB,yBACL,MAAO,MAAK,iBAAiB,UAAU,GAGlC,wBACL,MAAO,MAAK,iBAAiB,UAAU,GAGlC,qCACL,GAAI,MAAO,MAAK,WAAc,SAC5B,KAAM,IAAI,OAAM,yFAGlB,UAAc,KAAK,cAAc,iBAClB,KAAK,eAAe,UACnC,MAAO,2BAA0B,CAAE,MAAO,QAAU,KAAK,WAYpD,uCAA2D,IAChE,YAAK,WAAa,UAEX,AAAG,KAAK,KACb,iBAAqB,OAAM,KAAK,UAAW,EAAG,GAAG,IAAI,WACnD,WAAc,KAAK,SAAS,UAE5B,GAAI,iBAAoB,SAEtB,cAAgB,WAAW,QAAS,OAAQ,OAAM,aAElD,iBAAY,YAAY,UAAW,gBAEnC,AAAI,WAAU,MAAM,KAAO,WAAa,UAAU,MAAM,KAAO,YAC7D,WAAY,AAAG,MAAM,eAAe,UAAW,CAAC,UAAW,aAGtD,UAAU,KAAK,UAAW,UAAW,GAG9C,GAAI,iBAAiB,MAAI,SAAS,OAChC,MAAO,AAAG,iBAAQ,WAAW,cAAc,OAAO,UAAW,iBAG/D,KAAM,IAAI,OAAM,+BAA+B,qGAAqG,wBAIlI,AAAG,MAAM,aAAa,IAAI,GAAO,AAAG,KAAK,EAAG,aAAa,KAAK,KAAK,UAAW,UAAW,UAAW,GAGxH,MAAO,iBC9Ib,0BAAiC,QAC/B,GAAI,iBAAkB,UACpB,MAAO,QAGT,kBAAsB,MAAM,QAAQ,QAChC,OACA,CAAC,QAEL,GAAI,CAAC,cAAc,OACjB,KAAM,IAAI,OAAM,4CAGlB,eAAmB,KAAkB,MAAM,QAAQ,QAAU,mBAAmB,OAAS,cAEtE,cAAc,IAAI,cAErC,kBAAW,QAAQ,aACjB,GAAI,CAAC,eAAe,SAAU,CAAC,WAAW,SAAU,CAAC,WAAW,QAC9D,KAAI,OAAO,eAAc,IAAO,SACxB,GAAI,OAAM,eAAe,WAAW,sEAAsE,cAAc,MAG1H,GAAI,OAAM,eAAe,WAAW,iIAG5C,GAAI,WAAW,SAEb,cAAkB,OAAM,MAAM,GAC9B,GAAI,YAAc,EAChB,KAAM,IAAI,OAAM,eAAe,WAAW,iCAAiC,yDAMjF,KAAM,SAAQ,IACZ,WAAW,IAAI,QAAW,eAAe,SAAU,iBAAiB,UAG/D,GAAI,UAAS,WAAY,MAAM,QAAQ,SCtChD,4BACE,mBAGA,IAAQ,QAAW,KAAI,gBAEV,OAEb,GAAI,CAAE,kBAAiB,UACrB,aAAiB,KAAM,YAAW,QAElC,GAAI,SAAS,UAAY,EACvB,KAAM,IAAI,OAAM,8CAGlB,mBAAuB,SAAS,SAAS,GACzC,OAAS,yBAA0B,QAC/B,eACA,KAAM,qBAAoB,gBAGhC,QAAY,oBAAoB,cAClB,WAAW,IACvB,KAAU,cAAe,eACrB,IAAI,QAAQ,OAAO,MAAO,OAAO,QAAQ,IAAI,QAC7C,KAEH,IAAI,KAAS,IAAI,mBAAmB,OAAO,MAAO,OAAO,SAE5D,MAAO,OAAM,IAAI,EACf,EAAG,EAAG,MAAO,WAEb,YAAgB,cAAa,CAAE,MAAO,SACtC,2BAAoB,SACjB,aAAa,IAAI,aAAa,EAAG,EAAG,MAAO,QAAS,EAAG,GACnD,UCnCX,kCACE,wBAGA,GAAI,CAAC,WAAW,cAAgB,CAAC,WAAW,aAC1C,KAAM,IAAI,OAAM,6DAGlB,GAAI,WAAW,cAAgB,YAAY,MAAM,GAAK,EACpD,KAAM,IAAI,OAAM,oDAGlB,MAAO,AAAG,MAAK,KACb,oCAA2C,YAAY,MAAM,MAAM,WAAW,aAAe,EAAI,SAEnF,WAAW,IACvB,KAAU,cAAe,eACrB,IAAI,QAAQ,SAAU,WAAW,IACjC,KAEH,IAAI,KAAS,IAAI,mBAAmB,SAAU,wBAE7B,MAAM,IAAI,EAC5B,EAAG,EAAG,MAAO,UACT,AAAG,QAAQ,YAAY,KAAK,UAAW,SAAU,aAAc,CAAC,EAAG,EAAG,GAAI,CAAC,OAAQ,MAAO,eAEhG,MAAO,eCxCX,4BACE,WAIA,IAAQ,cAAU,KAAI,aACV,KAAM,QAAM,IAAK,OAC7B,GAAI,CAAE,KAAI,OAAS,KACjB,KAAM,IAAI,OAAM,qBAAqB,IAAI,WAAW,IAAI,yBAAyB,IAAI,OAEvF,MAAO,KCTT,0BAAiC,KAC/B,QAAY,KAAM,cAAa,UAClB,KAAO,KAAK,OAEzB,GAAI,CAAC,KAAK,KAAK,WAAW,UACxB,KAAM,IAAI,OAAM,wEAAwE,KAAK,kBAAkB,IAAI,OAErH,MAAO,eAAc,MCRvB,yBAAmC,KACjC,MAAQ,MAAM,cAAa,MAAM,OCDnC,+BAAsC,KACpC,MAAO,IAAI,cAAa,KAAO,MAAM,cAAa,MAAM,eCHnD,sBAAsB,sBAC3B,4BAAgC,GAAG,yCAEnC,GAAI,CAAC,IACH,MAAO,CACL,aAAc,GACd,YAAa,yBAIjB,GAAI,MAAQ,IACV,MAAO,CACL,aAAc,IACd,YAAa,IAAI,2BAIrB,aAAiB,IAAI,WAAW,WAAa,UAAY,IAAI,WAAW,YAAc,WAAa,GACnG,IAAM,IAAI,QAAQ,SAAU,IAE5B,UAAc,IAAI,MAAM,KAAK,OAAO,GAAO,gBAEtB,IAAI,SAAS,SAC9B,MAAM,MAAM,OAAS,GACrB,qCAEe,SAAY,KAAI,SAAS,SAAW,MAAM,MAAM,EAAG,MAAM,OAAS,GAAK,OAAO,KAAK,KACtG,oBAAe,IAAI,WAAW,KAAO,IAAI,eAAiB,aAEnD,CACL,aACA,YAAa,eAAiB,IAAM,IAAI,eAAiB,GAAG,gBAAgB,gBC1BhF,6BACE,sBAGA,IAAQ,YAAa,cAAiB,aAAa,IAAK,2BACvC,KAAM,WAAuC,aAE9D,MAAO,AAAG,YAAG,YAAY,SAAU,cCT9B,yBAAyB,oCAA0E,IACxG,IAAQ,MAAO,QAAW,mBACtB,mBAAmB,WACnB,UACJ,cAAM,MAAQ,MACd,OAAM,OAAS,OACR,CAAE,MAAO,QCTlB,IAAA,oBAYE,mBAAsB,iBAHZ,aAAkC,OAClC,oBAAiC,MAKhC,UAAmC,MAAO,MAAK,WAC/C,iBAAkC,MAAO,MAAK,kBAC9C,YAAsB,MAAO,CAAC,CAAC,KAAK,OAExC,4BACL,IAAQ,IAAK,SAAY,KAAK,qBAAqB,WACnD,MAAO,KAAI,SAGN,wCACL,IAAQ,IAAK,SAAY,KAAK,qBAAqB,WACnD,IAAI,SAAS,UACb,IAAI,SAAW,OAGV,eACL,MAAO,MAAK,eAAe,IAAI,EAAG,aAAiB,EACjD,KAAM,UACN,OAAQ,KAAK,iBAAiB,cAI3B,qBACL,MAAO,MAAK,eAAe,OAAO,OAAS,MAAM,iBAAqB,WAGjE,kBACL,MAAO,MAAK,eAAe,OAAO,OAAS,CAAE,OAAM,iBAAqB,YAGnE,WACL,KAAK,kBAAkB,QAAQ,EAAG,KAAM,WACtC,KAAK,sBAAsB,KAAM,OAAO,cAIrC,SACL,KAAK,qBAAqB,QAAQ,EAAG,KAAM,qBACzC,WAAe,AAAG,QAAO,UAAS,YAClC,UAAS,UACT,KAAK,sBAAsB,KAAM,UAI9B,yBAAoC,IACzC,KAAK,eAAe,QAAQ,QAC1B,GAAI,kBAAoB,MAAM,OAAO,WACnC,KAAM,IAAI,OAAM,mDAAmD,MAAM,QAE3E,MAAM,OAAO,YAEf,KAAK,QAAU,OAGV,kBACL,MAAO,IAAI,cACT,KAAK,eACF,IAAI,EAAG,UAAa,MAAM,KAAK,OAAO,aACtC,OAAO,YAAe,KAAK,OAAO,YAI5B,oBACX,GAAI,uBAAwB,eAC1B,KAAK,eAAe,cACpB,OAGF,KAAM,MAAK,YAAY,mBAGZ,kBACX,GAAI,KAAO,MAAO,MAAQ,SACxB,KAAM,IAAI,OAAM,GAAG,KAAK,0CAG1B,cAAkB,KAAM,eAAc,IAAK,KAAK,uBAChD,KAAK,kBAAkB,gBAGZ,wBACX,GAAI,UAAY,MAAO,WAAa,SAClC,KAAM,IAAI,OAAM,GAAG,KAAK,iDAG1B,IAAQ,UAAa,KAAI,UAEjB,YAAa,cAAiB,aAAa,SAAU,KAAK,4CAErC,WAAyB,QAAQ,IAC5D,UAAU,IAAI,WAAY,SAAS,WAAU,KAAK,KAAO,IAAI,uBAE3C,AAAG,WAAG,qBAAqB,+BAC9B,KAAK,MAAO,MAAM,UAAS,cAAc,sBACxC,KAAM,cAAY,SAAU,cAE9C,KAAK,kBAAkB,WAGlB,6BACL,IACE,cACA,QACE,KAAK,2BAA2B,WAEpC,KAAK,eAAiB,cACtB,KAAK,QAAU,OAGV,wBACL,IACE,cACA,QACE,KAAK,cAAc,SAEvB,KAAK,eAAiB,cACtB,KAAK,QAAU,OAGT,gCACN,GAAI,CAAC,KAAK,OACR,KAAM,IAAI,OAAM,qDAGlB,WAAe,UAAU,MAAM,KAAK,OAAO,iBACzC,GAAI,CAAC,IAAI,QAAQ,eAAe,UAC9B,KAAM,IAAI,OAAM,wDAAwD,sBAAqB,aAG/F,MAAO,CAAE,IAAK,IAAI,QAAS,iBAAS,QAAS,IAAI,QAAQ,YACxD,CAAE,QAAS,KAAK,UAEX,IAAK,SAAY,OACzB,GAAI,CAAC,KAAO,CAAC,SAAW,CAAE,KAAI,kBAAuB,SACnD,KAAM,IAAI,OAAM,8DAA8D,aAGhF,MAAO,CAAE,IAAK,WCpJX,gCACL,iBAIA,MAAO,AAAG,MAAK,KACb,QAAU,AAAG,gBAAgB,EAAG,OAAO,iBAAkB,OAAO,iBAAkB,OAAQ,QAC1F,WAAM,AAAG,KAAI,IAAK,OAAO,MAClB,MCNJ,qBACL,gCAEwB,IAExB,MAAO,AAAG,MAAK,KACb,SAAa,AAAG,KACd,aACI,AAAG,KACH,AAAG,OAAO,EAAI,iBAAiB,MAAqB,QAAS,CAAC,EAAG,GAAI,QACrE,iBAAiB,MAAM,MAEvB,uBAAuB,EAAG,iBAAiB,MAA8B,CAAC,EAAG,UAEtE,uBAAuB,KAAM,iBAAiB,MAAO,CAAC,EAAG,QAE1D,AAAG,KAAK,AAAG,KAAI,KAAM,YACpB,uBAAuB,IAAK,iBAAiB,MAAO,CAAC,EAAG,IAErE,MAAO,AAAG,MAAK,AAAG,KAAI,KAAM,AAAG,KAAI,KAAM,UAItC,qDAGmB,eACD,IAEvB,MAAO,AAAG,MAAK,KACb,SAAa,AAAG,KACd,aACI,AAAG,KACH,AAAG,OAAO,EAAI,iBAAiB,MAAqB,QAAS,YAAc,CAAC,EAAG,GAAK,CAAC,EAAG,GAAI,QAC5F,iBAAiB,MAAM,MAEvB,uBAAuB,EAAG,iBAAiB,MAA8B,YAAc,CAAC,EAAG,GAAK,CAAC,EAAG,UAE7F,uBAAuB,KAAM,iBAAiB,MAAO,CAAC,EAAG,QAE1D,AAAG,KAAK,AAAG,KAAI,KAAM,YACpB,uBAAuB,IAAK,iBAAiB,MAAO,CAAC,EAAG,QAEzD,AAAG,KAAK,AAAG,KAAI,KAAM,AAAG,KAAI,KAAM,aACjC,uBAAuB,IAAK,iBAAiB,MAAO,CAAC,EAAG,IAErE,MAAO,AAAG,MAAK,AAAG,KAAI,KAAM,AAAG,KAAI,KAAM,AAAG,KAAI,KAAM,WChDnD,mBACL,iBAE4B,gBACR,IAEpB,MAAO,AAAG,MAAK,KACb,QAAY,AAAG,KACb,AAAG,OAAO,EAAG,OAAO,QAAS,CAAC,EAAG,GAAI,SACrC,OAAO,MAGT,MAAO,UAAW,AAAG,KAAK,KAAO,MCd9B,oCAAoC,yBACzC,OAAO,KAAK,WAAW,QAAQ,OAC7B,AAAK,cAAc,KAAK,IAAQ,GAAG,eAAiB,OAClD,UAAU,MAAM,YCDf,kCACL,8BAGA,MAAO,mDAML,YAAgB,AAAG,SACjB,eAAe,WAAa,YAAc,WAAa,YACvD,CAAC,WAAY,WAAY,WAAY,mBAE1B,AAAG,SAAS,eAAe,cAExC,qBAAc,KACZ,CAAE,UAAW,GAAG,wBAChB,CAAE,UAAW,GAAG,sBAGX,CAAE,QAAS,OCrBf,gCACL,8BAGA,MAAO,wCAKL,eAAmB,AAAG,SAAS,eAAe,WAAa,aAAc,CAAC,WAAY,sBACtE,AAAG,SAAS,eAAe,cAE3C,qBAAc,KACZ,CAAE,UAAW,GAAG,wBAChB,CAAE,UAAW,GAAG,sBAGX,CACL,QAAS,WACT,KAAM,UCvBZ,IAAA,0BAsBE,oDAES,uCAEA,uCAEA,iBCxBJ,2CACL,8BAGA,MAAO,wCACL,qBAAyB,AAAG,SAAS,eAAe,EAAI,EAAI,YAAa,CAAC,EAAG,EAAG,WAAY,qBACnE,AAAG,SAAS,eAAe,WAAa,aAAc,CAAC,EAAG,EAAG,WAAY,mBACrF,AAAG,SAAS,eAAe,cAExC,qBAAc,KACZ,CAAE,UAAW,GAAG,iCAChB,CAAE,UAAW,GAAG,iCAChB,CAAE,UAAW,GAAG,sBAGX,GAAI,qBACT,iBACA,iBACA,OAKC,4DAIL,MAAO,UACL,qBAAyB,mBAAgC,GAAG,0BAA2B,oBAC9D,mBAAgC,GAAG,0BAA2B,QAC1E,mBAAgC,GAAG,cAAe,GAE/D,MAAO,IAAI,qBACT,iBACA,iBACA,OCpCC,mCAAmC,yBACxC,MAAO,sCACL,WAAe,UAAU,cAEzB,GAAI,CAAC,SAAS,OAAQ,WACpB,KAAM,IAAI,OAAM,sBAAsB,+BAA+B,4BAA4B,UAGnG,qBAAc,KACZ,CAAE,aAAc,UAAW,YAAc,eAGpC,QCfJ,+BAA+B,SACpC,qBAAuB,QAEvB,oCACE,QAAY,iBAAiB,MAAM,EAAG,YACtC,wBAAmB,iBAAiB,MAAM,YACnC,IAGT,+BACE,MAAO,kBAGT,MAAO,CACL,eACA,qBCPG,2BAA2B,8BAChC,sBAA0B,yBAAyB,eAAgB,0CAChC,kCAAkC,eAAgB,eAErF,mFAAyH,IACvH,UAAc,aACV,kBAAkB,WAAY,YAAa,EAAG,GAAG,sBACjD,2BAA2B,WAAY,YAAa,GAAG,4BAC7C,2BAA2B,YAAa,YAAa,GAAG,6BACxD,2BAA2B,YAAa,YAAa,GAAG,sBAEtE,MAAO,CAAE,MAAO,MAAO,cAGzB,mFAAyH,IACvH,IAAQ,MAAO,MAAO,cAAU,yBAAyB,WAAY,YAAa,aAAc,oBAClF,2BAA2B,YAAa,YAAa,GAAG,sBAEtE,MAAO,CACL,MAAO,MAAO,aAAO,OAIzB,MAAO,CACL,yBACA,0BC7BG,uBAAuB,SAC5B,kBAAsC,IAGpC,eACA,qBACE,sBAAsB,UAGxB,0BACE,kBAAkB,eAAgB,sBAEvB,yBAAyB,EAAG,GAAI,SAAU,WAC1C,yBAAyB,GAAI,GAAI,iBACjC,yBAAyB,GAAI,IAAK,iBAClC,yBAAyB,IAAK,IAAK,UAElD,GAAI,sBAAsB,SAAW,EACnC,KAAM,IAAI,OAAM,kCAAkC,sBAAsB,UAG1E,MAAO,CACL,cACA,OAAQ,CACN,OAAQ,OAAQ,OAAQ,SCvBvB,+BAA+B,oBACpC,MAAO,UACL,YAAgB,mBAAgC,GAAG,iBAAkB,QACxD,mBAAgC,GAAG,cAAe,GAE/D,MAAO,CAAE,QAAS,OCNf,2BAA2B,yBAChC,uBAA2B,0BAA0B,UAAW,iCAEtC,sBAAsB,+CACb,+BAA+B,oBAElE,sDAA0E,IACxE,UAAc,aACV,kBAAkB,GAAG,gBACrB,2BAA2B,GAAG,sBACpB,2BAA2B,GAAG,uBAC9B,2BAA2B,GAAG,gBAE5C,MAAO,CAAE,MAAO,MAAO,cAGzB,sDAA0E,IACxE,UAAc,aACV,kBAAkB,GAAG,gBACrB,2BAA2B,GAAG,sBACpB,2BAA2B,GAAG,uBAC9B,2BAA2B,GAAG,sBAC9B,2BAA2B,GAAG,gBAE5C,MAAO,CACL,MAAO,MAAO,aAAO,OAIzB,MAAO,CACL,yBACA,0BC7BG,oCACL,WAEA,kBAAsC,IAGpC,0BACE,kBAAkB,UAAW,sBAElB,CACb,OAAQ,yBAAyB,SAAU,IAC3C,OAAQ,yBAAyB,UACjC,OAAQ,yBAAyB,UACjC,OAAQ,yBAAyB,WAGnC,kCAA2B,UAAW,eAE/B,CAAE,OAAQ,eCxBnB,IAAA,kCAU0C,eACxC,cACE,MAAM,wBAGD,qBACL,IAAQ,QAAW,KAEnB,GAAI,CAAC,OACH,KAAM,IAAI,OAAM,sDAGlB,MAAO,AAAG,MAAK,KACb,gBAAoB,AAAG,KAAK,OAAM,cAAc,IAAK,IAAO,mBAC5C,CAAC,QAAS,QAAS,oBAChB,UAAU,YAAa,SAAS,IAAI,AAAG,OAAO,UAEvD,YAAY,WAAY,OAAO,OAAQ,IACjD,WAAM,YAAY,IAAK,OAAO,QAC9B,IAAM,YAAY,IAAK,OAAO,QAC9B,IAAM,YAAY,IAAK,OAAO,QAC9B,IAAM,AAAG,QAAQ,IAAK,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,SAE/B,WAIE,iBACX,MAAO,MAAK,aAAa,KAAM,YAAW,SAGlC,sBACR,MAAO,+BAGC,sCACR,MAAO,4BAA2B,WAG1B,uBACR,MAAO,eAAc,WC9ClB,6BACL,UAGA,MAAO,AAAG,MAAK,IAAM,AAAG,KACtB,AAAG,OAAO,EAAG,OAAO,SACpB,OAAO,OCPJ,wBAAuB,gCAC5B,kBAAsC,IAGpC,eACA,qBACE,sBAAsB,yBAEF,uBAAuB,eAAgB,kBAEpD,gBAAgB,WAAY,YAAa,MAEpD,GAAI,sBAAsB,SAAW,EACnC,KAAM,IAAI,OAAM,kCAAkC,sBAAsB,UAG1E,MAAO,CACL,cACA,OAAQ,CAAE,KCdP,qCACL,WAEA,kBAAsC,sBAEX,0BAA0B,UAAW,eAEhE,iCACE,YAAgB,mBAAmB,GAAG,iBAAkB,QAC3C,mBAAmB,GAAG,cAAe,GAClD,MAAO,CAAE,QAAS,MAGpB,WAAe,CACb,GAAI,gBAAgB,OAGtB,kCAA2B,UAAW,eAE/B,CAAE,OAAQ,eCxBZ,4BAA4B,WACjC,wBAA+C,iBACN,GAEzC,cAAO,KAAK,WAAW,QAAQ,MAC7B,QAAY,IAAI,WAAW,MAAQ,cAAgB,oBACnD,IAAI,KAAO,UAAU,OAGhB,CAAE,oBAAqB,eCXhC,IAAA,2BAkBU,eAGR,wCACE,MAAM,OACN,KAAK,sBAAwB,wBAGpB,wBACT,MAAO,MAAK,sBASP,eACL,IAAQ,QAAW,KAEnB,GAAI,CAAC,OACH,KAAM,IAAI,OAAM,GAAG,KAAK,uCAG1B,MAAO,AAAG,MAAK,KACb,uBAA2B,iBAAiB,UACxC,KAAK,qBAAqB,aAAa,QACvC,OACJ,MAAO,qBAAoB,mBAAmB,KAAK,mBAAmB,MAAM,GAAI,IAAK,OAAO,MAIzF,yBAAoC,IACzC,KAAK,qBAAqB,QAAQ,kBAClC,MAAM,QAAQ,kBAGT,8BACL,IAAQ,OAAQ,eAAkB,KAAK,wBAAwB,SAC/D,KAAK,QAAU,OACf,KAAK,eAAiB,cAGjB,iCACL,MAAO,gBAAc,QAAS,KAAK,0BAA2B,KAAK,4BAG3D,sCACR,IAAQ,oBAAqB,eAAkB,mBAAmB,WAElE,YAAK,qBAAqB,kBAAkB,qBAErC,4BAA2B,eAG1B,uBACR,QAAY,KAAK,+BACJ,KAAK,gDACY,KAAO,IAAO,6BAEZ,QAAQ,MAAM,EAAG,QAAQ,OAAS,wCACxC,QAAQ,MAAM,QAAQ,OAAS,sBAEzD,YAAK,qBAAqB,eAAe,yBAClC,KAAK,wBAAwB,qBCnF3B,uBAAyB,CAAC,UAAW,QAAS,MAAO,QAAS,UAAW,YAAa,6BAAnG,MAiBE,2BACE,GAAI,cAAc,SAAW,EAC3B,KAAM,IAAI,OAAM,8EAA8E,cAAc,UAG9G,uBAAuB,QAAQ,mBAC7B,KAAK,YAAc,cAAc,OAIrC,gBACE,MAAO,wBACJ,IAAI,YAAiB,EAAE,WAAY,YAAa,KAAK,eACrD,KAAK,SAAY,GAAG,YAAc,GAAG,eC9B5C,+BAQuC,eACrC,iCAAyD,GAAI,uBAC3D,MAAM,oBAAqB,sBAGtB,qBACL,MAAO,AAAG,MAAK,IAAM,AAAG,QAAQ,KAAK,OAAO,eAGjC,iBACX,MAAO,MAAK,aAAa,KAAM,YAAW,cAG/B,4BACX,aAAiB,KAAM,YAAW,YACtB,KAAM,MAAK,aAAa,8BACR,KAAM,SAAQ,IAAI,AAAG,QAAQ,KAAK,IAAI,UAChE,SAAa,KAAM,GAAE,OACrB,SAAE,UACK,QAET,IAAI,UAEJ,uBAA2B,oBACxB,IAAI,cAAkB,GAAI,iBAAgB,eAE7C,MAAO,UAAS,aACZ,mBACA,mBAAmB,GAGf,sBACR,MAAO,wBAGC,0BACR,MAAO,KAGC,2BACR,MAAO,KC1CJ,+BAA+B,KACpC,MAAO,KAAI,sBAAuB,iBAG7B,0DAML,cAAkB,CAAE,aACpB,MAAO,IAAK,aAAc,WCRrB,6BACL,wCAEgB,oBAGhB,yBAA6B,MAAM,QAAQ,iBAAmB,gBAAkB,CAAC,iBAEjF,qBAAqB,QAAQ,IAE3B,SAAa,YAAa,iBACtB,EACC,sBAAsB,GAAK,EAAE,YAAc,OAChD,GAAI,CAAC,KACH,KAAM,IAAI,OAAM,mHAGlB,WAAe,KAAK,iCACK,OAAO,OAAO,WAAe,UAAU,YAAc,sBAE/D,oBAAoB,GAC/B,EAAE,UAAU,IAAI,WACf,iBAAmB,GAAI,OAAM,EAAG,iBAEf,GAAI,eACxB,iBAAiB,IAAI,WAAe,GAAG,UAAU,eAAe,OAAM,UAAU,iBAChF,QAEF,cAAc,KAAK,aCxBhB,6BAA6B,KAClC,MAAO,qBAAoB,MAEtB,IAAI,oBAAwB,gBAE5B,IAAI,6BAAiC,gBAErC,IAAI,sBAA0B,eAG9B,+DAGL,IAAQ,WAAe,UAAU,oBACf,mBAAmB,QAAwB,MAAM,EAAG,MAAM,QAE/D,UAAU,SACf,WAAc,UAAU,sBACZ,GAAI,eAAc,UAAU,UAAU,MAAO,KAAK,QAAQ,UAAU,WAAY,qBAElF,CAChB,UACA,mBACA,aAGF,MAAO,IAAK,aAAc,WCvC5B,IAAA,+BA+BE,oBAAiD,IAC/C,IACE,UAAY,GAAM,WAAa,GAAM,UAAW,UAAW,UAAW,YACpE,QACJ,KAAK,UAAY,UACjB,KAAK,WAAa,WAClB,KAAK,UAAY,WAAa,EAC9B,KAAK,UAAY,WAAa,EAC9B,KAAK,UAAY,WAAa,uBAC9B,KAAK,WAAa,YAAc,2CAxCpC,MAiDE,kCAEuC,IAErC,KAAK,cAAgB,cACrB,KAAK,QAAU,GAAI,0BAAyB,SAG9C,gBACE,QAAY,oBAAoB,YAG9B,UAAW,WAAY,UAAW,UAAW,UAAW,YACtD,KAAK,QAcT,GAZA,AAAI,WAAa,KAAK,wBAAyB,kBAC7C,KAAI,YAAc,UAClB,IAAI,UAAY,UAChB,YAAY,IAAK,KAAK,cAAc,iBACpC,YAAY,IAAK,KAAK,cAAc,kBACpC,YAAY,IAAK,KAAK,cAAc,mBACpC,YAAY,IAAK,KAAK,cAAc,WACpC,YAAY,IAAK,KAAK,cAAc,aAAc,IAClD,YAAY,IAAK,KAAK,cAAc,cAAe,IACnD,YAAY,IAAK,KAAK,cAAc,WAAY,KAG9C,YACF,IAAI,YAAc,WAClB,IAAI,UAAY,WAEhB,cAAkB,KAChB,IAAI,YACJ,IAAI,IAAI,GAAG,EAAG,GAAG,EAAG,UAAW,EAAG,EAAI,KAAK,IAC3C,IAAI,QAEN,KAAK,cAAc,UAAU,QAAQ,cAOpC,oDAIL,uBAA2B,MAAM,QAAQ,eAAiB,cAAgB,CAAC,eAC3E,mBAAmB,QAAQ,IAEzB,cAAkB,YAAa,eAC3B,EACC,oBAAoB,GAAK,EAAE,UAAY,OAC5C,GAAI,CAAC,UACH,KAAM,IAAI,OAAM,gIAGlB,GAAI,mBAAkB,WAAW,KAAK,mCCrG1C,4BAA2B,8BACzB,sBAA0B,yBAAyB,eAAgB,0CAChC,kCAAkC,eAAgB,eAErF,0EACE,oBAAwB,2BAA2B,WAAY,YAAa,GAAG,gDACvD,2BAA2B,YAAa,YAAa,GAAG,+CACzD,kBAAkB,WAAY,YAAa,EAAG,GAAG,+BAExE,MAAO,CAAE,gBAAiB,gBAAiB,gBAG7C,uDACE,oBAAwB,2BAA2B,SAAU,SAAU,GAAG,gDAClD,2BAA2B,SAAU,SAAU,GAAG,gDAClD,2BAA2B,SAAU,SAAU,GAAG,gCAE1E,MAAO,CAAE,gBAAiB,gBAAiB,iBAG7C,MAAO,CACL,kBACA,2BACA,4BACA,wBAIG,+CACL,kBAAsC,IAGpC,eACA,qBACE,sBAAsB,UAGxB,kBACA,2BACA,4BACA,wBACE,mBAAkB,eAAgB,kCAEX,kBAAkB,EAAG,GAAI,EAAG,mDAClB,4BAA4B,GAAI,GAAI,6DACpC,4BAA4B,GAAI,IAAK,2CAEvD,CACjB,QAAS,mBACT,kBAAmB,6BACnB,kBAAmB,0CAGD,GACpB,OAAM,cAAe,EAAG,GAAG,QAAQ,MACjC,YAAY,cAAc,OAAS,uBAAuB,IAAK,0BAA0B,SAG3F,8BAAkC,4BAA4B,IAAK,IAAK,sDACvC,2BAA2B,IAAK,IAAK,sCAEpD,CAChB,gBAAiB,0BACjB,eAAgB,0BAGlB,GAAI,sBAAsB,SAAW,EACnC,KAAM,IAAI,OAAM,kCAAkC,sBAAsB,UAG1E,MAAO,CACL,cACA,OAAQ,CAAE,WAAY,YAAa,YCjEvC,4BAA2B,yBACzB,uBAA2B,0BAA0B,UAAW,iCAEtC,sBAAsB,+CACb,+BAA+B,oBAElE,mDACE,oBAAwB,2BAA2B,GAAG,gDAC9B,2BAA2B,GAAG,+CAC/B,kBAAkB,GAAG,+BAE5C,MAAO,CAAE,gBAAiB,gBAAiB,gBAG7C,8CACE,oBAAwB,2BAA2B,GAAG,gDAC9B,2BAA2B,GAAG,gDAC9B,2BAA2B,GAAG,gCAEtD,MAAO,CAAE,gBAAiB,gBAAiB,iBAG7C,MAAO,CACL,kBACA,2BACA,4BACA,wBAIG,8DAIL,kBAAsC,IAGpC,kBACA,2BACA,4BACA,wBACE,mBAAkB,UAAW,kCAEN,kBAAkB,mDACR,4BAA4B,6DAC5B,4BAA4B,2CAE9C,CACjB,QAAS,mBACT,kBAAmB,6BACnB,kBAAmB,0CAGD,GACpB,OAAM,cAAe,EAAG,GAAG,QAAQ,MACjC,YAAY,cAAc,OAAS,uBAAuB,0BAA0B,SAGtF,8BAAkC,4BAA4B,sDAC7B,2BAA2B,sCAE1C,CAChB,gBAAiB,0BACjB,eAAgB,0BAGlB,kCAA2B,UAAW,eAE/B,CAAE,OAAQ,CAAE,WAAY,YAAa,WAAa,eCrE3D,cAAc,iBACZ,MAAO,AAAG,MAAI,AAAG,OAAO,EAAG,OAAO,QAAS,OAAQ,QAAS,OAAO,MAGrE,iDAAiG,IAC/F,QAAU,gBAAkB,AAAG,KAAK,GAAK,EACzC,WAAM,uBAAuB,IAAK,OAAO,gBAAiB,CAAC,EAAG,IAC9D,IAAM,uBAAuB,AAAG,KAAK,KAAM,OAAO,gBAAiB,CAAC,EAAG,IACvE,IAAM,AAAG,QAAQ,IAAK,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,QACtC,IAAM,AAAG,KAAI,IAAK,KAAK,EAAG,OAAO,eAAgB,CAAC,EAAG,KAC9C,IAGT,6BACE,QAAU,uBAAuB,AAAG,KAAK,GAAI,OAAO,gBAAiB,CAAC,EAAG,IACzE,WAAM,uBAAuB,AAAG,KAAK,KAAM,OAAO,gBAAiB,CAAC,EAAG,IACvE,IAAM,uBAAuB,AAAG,KAAK,KAAM,OAAO,gBAAiB,CAAC,EAAG,IACvE,IAAM,AAAG,KAAI,IAAK,GACX,IA7BT,8BAgCkC,eAGhC,2BACE,MAAM,gBACN,KAAK,eAAiB,cAGjB,qBACL,IAAQ,QAAW,KAEnB,GAAI,CAAC,OACH,KAAM,IAAI,OAAM,8CAGlB,MAAO,AAAG,MAAK,KACb,gBAAoB,AAAG,KAAK,OAAM,cAAc,IAAK,IAAO,mBAC5C,CAAC,QAAS,QAAS,oBAChB,UAAU,YAAa,SAAS,IAAI,AAAG,OAAO,UAEvD,AAAG,KAAK,KAAK,WAAY,OAAO,WAAW,QAAS,CAAC,EAAG,KAClE,WAAM,eAAe,IAAK,OAAO,WAAW,kBAAmB,IAC/D,IAAM,eAAe,IAAK,OAAO,WAAW,mBAE5C,OAAM,KAAK,eAAgB,EAAG,GAAG,QAAQ,MACvC,IAAM,UAAU,IAAK,OAAO,YAAY,cAAc,UAGxD,IAAM,eAAe,IAAK,OAAO,UAAU,iBAC3C,IAAM,AAAG,KAAK,uBAAuB,IAAK,OAAO,UAAU,eAAgB,CAAC,EAAG,KACxE,WAIE,iBACX,MAAO,MAAK,aAAa,KAAM,YAAW,SAGlC,sBACR,MAAO,sBAGC,sCACR,MAAO,6BAA2B,UAAW,KAAK,gBAG1C,uBACR,MAAO,gBAAc,QAAS,KAAK,kBC5EhC,wBAAuB,SAC5B,kBAAsC,IAGpC,eACA,qBACE,sBAAsB,yBAEF,uBAAuB,eAAgB,mBAEnD,gBAAgB,IAAK,EAAG,iBACrB,gBAAgB,IAAK,EAAG,aAEvC,GAAI,sBAAsB,SAAW,EACnC,KAAM,IAAI,OAAM,kCAAkC,sBAAsB,UAG1E,MAAO,CACL,cACA,OAAQ,CAAE,GAAI,CAAE,IAAK,UCflB,qCACL,WAEA,kBAAsC,sBAEX,0BAA0B,UAAW,eAEhE,iCACE,YAAgB,mBAAmB,GAAG,iBAAkB,QAC3C,mBAAmB,GAAG,cAAe,GAClD,MAAO,CAAE,QAAS,MAGpB,WAAe,CACb,GAAI,CACF,IAAK,gBAAgB,UACrB,OAAQ,gBAAgB,eAI5B,kCAA2B,UAAW,eAE/B,CAAE,OAAQ,eCxBZ,IAAK,OAAL,mBAEL,eAAS,SAET,aAAO,SAJG,qBCLZ,IAAA,0BAakC,eAGhC,iCAAiD,GAAI,cAAa,IAChE,MAAM,gBACN,KAAK,sBAAwB,wBAGpB,wBACT,MAAO,MAAK,sBAGP,eACL,IAAQ,QAAW,KAEnB,GAAI,CAAC,OACH,KAAM,IAAI,OAAM,GAAG,KAAK,uCAG1B,MAAO,AAAG,MAAK,KACb,uBAA2B,iBAAiB,UACxC,KAAK,qBAAqB,aAAa,QACvC,cAEW,AAAG,QAAQ,mBAAoB,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,SAAS,KAAK,mBAAmB,MAAM,GAAI,QAC7F,oBAAoB,OAAQ,OAAO,GAAG,KAAK,cACxC,oBAAoB,OAAQ,OAAO,GAAG,QACrD,MAAO,CAAE,IAAK,UAIX,qBACL,MAAO,AAAG,MAAK,KACb,IAAQ,IAAK,QAAW,KAAK,OAAO,QACpC,MAAO,CAAE,IAAK,OAAQ,AAAG,QAAQ,gBAIxB,iBACX,MAAO,MAAK,aAAa,KAAM,YAAW,cAG/B,6BACX,aAAiB,KAAM,YAAW,YACtB,KAAM,MAAK,aAAa,eAEvB,AAAG,QAAQ,IAAI,aACZ,AAAG,QAAQ,IAAI,4BACH,KAAK,IAAI,eAAmB,EACtD,UACA,aAAc,QAAQ,yBAGG,KAAM,SAAQ,IACvC,oBAAoB,IAAI,OAAS,UAAW,iBAC1C,QAAa,MAAM,WAAU,QAAQ,YACnB,MAAM,cAAa,QAAQ,UAC9B,SAAW,UACX,OAAS,OAAO,KAAO,OAAO,yBACnB,OAAS,SAAY,EAAI,SAEnD,iBAAU,UACV,aAAa,UACN,CAAE,IAAK,OAAQ,sBAG1B,WAAI,IAAI,UACR,IAAI,OAAO,UAEJ,SAAS,aAAe,mBAAiD,mBAAmB,GAG3F,sBACR,MAAO,mBAGF,yBAAoC,IACzC,KAAK,qBAAqB,QAAQ,kBAClC,MAAM,QAAQ,kBAGT,8BACL,IAAQ,OAAQ,eAAkB,KAAK,wBAAwB,SAC/D,KAAK,QAAU,OACf,KAAK,eAAiB,cAGjB,iCACL,MAAO,gBAAc,SAGb,sCACR,IAAQ,oBAAqB,eAAkB,mBAAmB,WAElE,YAAK,qBAAqB,kBAAkB,qBAErC,4BAA2B,eAG1B,uBACR,yBAA8B,IAAM,EAAI,EAAM,KAAM,EAAI,2BAExB,QAAQ,MAAM,EAAG,QAAQ,OAAS,wCACxC,QAAQ,MAAM,QAAQ,OAAS,sBAEzD,YAAK,qBAAqB,eAAe,yBAClC,KAAK,wBAAwB,qBCvHxC,IAAA,mCAYU,eACD,iDACL,oBAAwB,mBAAmB,IAAI,EAAG,MAAO,WACvD,WAAc,UAAY,KAAK,IAAI,OAAQ,OAC3C,MAAO,CACL,MAAO,MAAQ,OACf,OAAQ,OAAS,oBAIH,gBAAgB,OAElC,MAAO,AAAG,MAAK,KACb,4BAAgC,eAAkC,AAAG,MAAM,CAAC,AAAG,KAAK,CAAC,IAAK,MAAO,WAAY,AAAG,KAAK,CAAC,IAAK,MAAO,YAAa,GAAG,KAAK,EAAG,KAAK,mBAG5I,kBACjB,IAAQ,MAAO,QAAW,gBAAgB,UAC1C,MAAO,MAAK,MAAO,QAAU,KAAK,IAAI,MAAQ,QAAU,EAAI,eAG1C,UAAsB,YAAW,SAAU,OAAU,EAAI,eACzD,UAAsB,YAAW,SAAU,OAAU,EAAI,mBAErD,OACrB,IAAI,AAAG,KAAK,CAAC,UAAW,KAAM,UAAW,YACzC,IAAI,AAAG,MAAM,MAAM,KAAK,MAAM,WAAY,cAAiB,wBAC1D,YAAY,UACZ,YAAY,cAEb,IAAI,AAAG,MAAM,MAAM,KAAK,MAAM,WAAY,cAAiB,wBAC1D,gBAAgB,UAAU,MAC1B,gBAAgB,UAAU,WAG9B,MAAO,mBAIJ,qBACL,MAAO,AAAG,MAAK,KACb,QAAY,KAAK,OAAO,QACxB,MAAO,MAAK,YACV,IACA,OAAM,UACN,OAAM,gBAAgB,IAAI,kBAAsB,EAAE,OAAQ,iBAKnD,iBACX,MAAO,MAAK,aAAa,KAAM,YAAW,cAG/B,yBACX,aAAiB,KAAM,YAAW,wBACV,AAAG,KACzB,IAAM,AAAG,QAAQ,KAAK,aAAa,8BAGX,KAAM,SAAQ,IAAI,gBAAgB,IAC1D,iCACE,mBAAuB,MAAM,KAAK,KAAM,gBAAe,gBACvC,eAAe,OAAO,OAAU,QAAO,YACvC,eAAe,OAAO,OAAU,CAAC,QAAO,IAExD,MAAO,IAAI,iBACT,MAAM,IAAI,KAAK,GAAG,IAAI,OAAU,GAAI,OAAM,QAAQ,GAAc,QAAQ,KACxE,CACE,OAAQ,SAAS,eAAe,UAChC,MAAO,SAAS,cAAc,eAMtC,uBAAgB,QAAQ,GAAO,EAAE,WAE1B,SAAS,aAAe,kBAAyC,kBAAkB,GAGlF,2BACR,MAAO,OC9FX,+BAIuC,uBACrC,iCAAyD,GAAI,uBAC3D,MAAM,oBAAqB,sBAGnB,sBACR,MAAO,yBAGC,0BACR,MAAO,OCRJ,wCACL,WAEA,kBAAsC,IAGpC,0BACE,kBAAkB,UAAW,sBAElB,CACb,OAAQ,yBAAyB,SAAU,IAC3C,OAAQ,yBAAyB,UACjC,OAAQ,yBAAyB,WAGnC,kCAA2B,UAAW,eAE/B,CAAE,OAAQ,eCnBZ,2BAA2B,SAChC,kBAAsC,IAGpC,eACA,qBACE,sBAAsB,UAGxB,0BACE,kBAAkB,eAAgB,sBAEvB,yBAAyB,EAAG,GAAI,SAAU,WAC1C,yBAAyB,GAAI,GAAI,iBACjC,yBAAyB,GAAI,IAAK,UAEjD,GAAI,sBAAsB,SAAW,EACnC,KAAM,IAAI,OAAM,kCAAkC,sBAAsB,UAG1E,MAAO,CACL,cACA,OAAQ,CAAE,OAAQ,OAAQ,SC1B9B,IAAA,sCAU8C,eAC5C,cACE,MAAM,4BAGD,qBACL,IAAQ,QAAW,KAEnB,GAAI,CAAC,OACH,KAAM,IAAI,OAAM,0DAGlB,MAAO,AAAG,MAAK,KACb,gBAAoB,AAAG,KAAK,OAAM,cAAc,IAAK,IAAO,mBAC5C,CAAC,QAAS,QAAS,oBAChB,UAAU,YAAa,SAAS,IAAI,AAAG,OAAO,UAEvD,YAAY,WAAY,OAAO,OAAQ,IACjD,WAAM,YAAY,IAAK,OAAO,QAC9B,IAAM,YAAY,IAAK,OAAO,QAC9B,IAAM,AAAG,QAAQ,IAAK,CAAC,GAAI,IAAK,CAAC,EAAG,GAAI,SAEjC,WAIE,iBACX,MAAO,MAAK,aAAa,KAAM,YAAW,SAGlC,sBACR,MAAO,oCAGC,sCACR,MAAO,gCAA+B,WAG9B,uBACR,MAAO,mBAAkB,WCjD7B,mCAI2C,uBACzC,iCAA6D,GAAI,2BAC/D,MAAM,wBAAyB,sBAGvB,sBACR,MAAO,8BAGC,0BACR,MAAO,OCdX,6BAKqC,qBCD9B,gBAAe,UACpB,MAAO,AAAG,MAAI,AAAG,IAAI,EAAG,OAAO,SAAU,OAAO,QCAlD,oBACE,kCAI4B,QAE5B,IAAQ,QAAS,MAAS,OAAO,SAEvB,AAAG,OAAO,EAAG,QAAS,QAAS,SACzC,WAAM,AAAG,KAAI,IAAK,MAClB,IAAM,OAAM,IAAK,OAAO,OACjB,SAAW,AAAG,KAAK,KAAO,IAG5B,yBACL,MAAO,YAAU,EAAG,OAAQ,CAAC,EAAG,GAAI,IAG/B,8BACL,MAAO,YAAU,EAAG,OAAQ,CAAC,EAAG,GAAI,IAG/B,4BACL,MAAO,YAAU,EAAG,OAAQ,CAAC,EAAG,GAAI,GAAM,SCnB5C,4BAA2B,8BACzB,oEACE,YAAgB,eAAe,uBACjB,QAAQ,OAAU,YAAa,WAAa,YAE1D,GAAI,QAAQ,OACV,KAAM,IAAI,OAAM,+BAA+B,0BAA0B,QAAQ,uBAAuB,2BAA2B,cAGrI,MAAO,AAAG,MACR,IAAM,AAAG,UACP,AAAG,SAAS,QAAS,CAAC,WAAY,MAAO,WAAY,aACrD,CAAC,EAAG,EAAG,EAAG,KAKhB,+EAME,YAAgB,oBAAoB,gBAAiB,WAAY,iBACpD,AAAG,SAAS,eAAe,aAExC,qBAAc,KACZ,CAAE,UAAW,GAAG,wBAChB,CAAE,UAAW,GAAG,sBAGX,CAAE,QAAS,MAGpB,0DACE,YAAgB,AAAG,SAAS,eAAe,oBAC5B,AAAG,SAAS,eAAe,aAE1C,qBAAc,KACZ,CAAE,UAAW,GAAG,wBAChB,CAAE,UAAW,GAAG,wBAGX,CACL,QACA,QAIJ,oFAME,UAAa,kBAAkB,gBAAiB,WAAY,WAAY,GAAG,4BAC7D,wBAAwB,WAAY,GAAG,sBAErD,MAAO,CAAE,WAAM,cAGjB,8FAKoB,IAElB,UAAc,uBAAwB,QAAS,GAAM,GAAK,gBAAiB,WAAY,WAAY,GAAG,6BACxF,uBAAuB,gBAAiB,WAAY,WAAY,GAAG,sBAEjF,MAAO,CAAE,MAAO,cAGlB,MAAO,CACL,uBACA,4BAIG,iCACL,IACE,eACA,qBACE,sBAAsB,uBAEY,IAGpC,uBACA,4BACE,mBAAkB,eAAgB,2BAElB,uBAAuB,KAAM,GAAI,EAAG,wBACvC,2BAA2B,KAAM,GAAI,EAAG,qBACxC,2BAA2B,KAAM,GAAI,EAAG,qBACxC,2BAA2B,KAAM,GAAI,EAAG,wBAErC,2BAA2B,MAAO,GAAI,EAAG,cAAe,aAC3D,2BAA2B,MAAO,GAAI,EAAG,qBACzC,2BAA2B,MAAO,GAAI,EAAG,qBACzC,2BAA2B,MAAO,GAAI,EAAG,yBAErC,2BAA2B,OAAQ,IAAK,EAAG,eAAgB,cAC9D,2BAA2B,OAAQ,IAAK,EAAG,uBAC3C,2BAA2B,OAAQ,IAAK,EAAG,0BAExC,2BAA2B,OAAQ,IAAK,EAAG,eAAgB,cAC9D,2BAA2B,OAAQ,IAAK,EAAG,uBAC3C,2BAA2B,OAAQ,IAAK,EAAG,8BACpC,2BAA2B,OAAQ,IAAK,EAAG,uBAEzD,AAAG,KACZ,IAAM,AAAG,UAAU,AAAG,SAAS,eAAe,IAAM,KAAM,CAAC,IAAK,MAAO,CAAC,EAAG,KAI7E,GAFA,cAAc,KAAK,CAAE,UAAW,OAE5B,sBAAsB,SAAW,EACnC,KAAM,IAAI,OAAM,kCAAkC,sBAAsB,UAG1E,WAAe,CACb,YACA,SACA,SACA,SACA,YACA,SACA,SACA,SACA,aACA,UACA,UACA,aACA,UACA,UACA,iBACA,IAGF,MAAO,CAAE,OAAQ,eC9InB,4BAA2B,yBACzB,uBAA2B,0BAA0B,UAAW,eAEhE,yCACE,YAAgB,mBAAmB,GAAG,uBAAwB,UAC/C,mBAAmB,GAAG,sBAAuB,GAE5D,MAAO,CAAE,QAAS,QAGpB,wCACE,YAAgB,mBAAmB,GAAG,sBAAuB,QAChD,mBAAmB,GAAG,mBAAoB,UACzC,wBAAwB,QAEtC,MAAO,CAAE,KAAM,CAAE,QAAS,MAAQ,cAGpC,4CACE,MAAO,CACL,MAAO,uBAAuB,GAAG,gBACjC,MAAO,uBAAuB,GAAG,iBAIrC,MAAO,CACL,uBACA,4BAIG,gDAGL,kBAAsC,IAGpC,uBACA,4BACE,mBAAkB,UAAW,2BAEb,uBAAuB,wBAC1B,2BAA2B,qBAC3B,2BAA2B,qBAC3B,2BAA2B,wBAExB,2BAA2B,wBAC9B,2BAA2B,qBAC3B,2BAA2B,qBAC3B,2BAA2B,yBAEvB,2BAA2B,0BAC9B,2BAA2B,uBAC3B,2BAA2B,0BAExB,2BAA2B,0BAC9B,2BAA2B,uBAC3B,2BAA2B,8BACpB,2BAA2B,qBAE5C,IAAO,UAGf,GAFA,cAAc,KAAK,CAAE,aAAc,KAAM,UAAW,OAEhD,CAAC,WAAW,IACd,KAAM,IAAI,OAAM,yDAAyD,MAG3E,WAAe,CACb,YACA,SACA,SACA,SACA,YACA,SACA,SACA,SACA,aACA,UACA,UACA,aACA,UACA,UACA,iBACA,IAGF,kCAA2B,UAAW,eAE/B,CAAE,OAAQ,eC3FZ,kBAAkB,UACvB,QAAU,MAAK,EAAG,OAAO,OACzB,WAAM,WAAW,IAAK,OAAO,OAC7B,IAAM,AAAG,KAAI,IAAK,GAClB,IAAM,AAAG,KAAK,KACP,IAGF,gCACL,QAAU,SAAS,EAAG,OAAO,OAC7B,IAAM,WAAW,IAAK,OAAO,OAE7B,WAAa,AAAG,QAAQ,EAAG,EAAG,EAAG,gBACnB,AAAG,MAAkB,OAAO,aAC5B,OAAO,MAAM,KAAO,IAAI,MAAM,iBACtB,OAAO,MAAM,KAAO,IAAI,MAAM,IAAM,OAAO,MAAM,KAAO,IAAI,MAAM,GAExF,GAAI,eACF,cAAkB,CAAC,GAAG,IAAI,OAC1B,UAAU,GAAK,EACf,WAAe,AAAG,MAAkB,WACpC,IAAM,AAAG,OAAO,CAAC,IAAK,QAAS,GAE/B,cAAkB,CAAC,GAAG,IAAI,OAC1B,UAAU,GAAK,EACf,WAAe,AAAG,MAAkB,WACpC,IAAM,AAAG,OAAO,CAAC,IAAK,QAAS,GAGjC,cAAS,MAAQ,AAAG,OAAO,CAAC,OAAQ,QAAQ,GAAK,OACjD,IAAM,AAAG,KAAI,OAAQ,KAErB,IAAM,AAAG,KAAK,KACP,ICtCT,IAAA,gCAWwC,eACtC,cACE,MAAM,sBAGD,qBACL,IAAQ,QAAW,KAEnB,GAAI,CAAC,OACH,KAAM,IAAI,OAAM,oDAGlB,MAAO,AAAG,MAAK,KAEb,gBAAoB,AAAG,KAAK,OAAM,cAAc,IAAK,IAAO,mBAE5C,CAAC,QAAS,QAAS,oBAChB,UAAU,YAAa,SAAS,IAAI,AAAG,OAAO,UAEvD,SAAS,WAAY,OAAO,aACtC,IAAM,AAAG,QAAQ,IAAK,EAAG,EAAG,SAE5B,IAAM,SAAS,IAAK,OAAO,UAC3B,IAAM,SAAS,IAAK,OAAO,UAC3B,IAAM,SAAS,IAAK,OAAO,UAE3B,IAAM,aAAa,IAAK,OAAO,aAC/B,IAAM,SAAS,IAAK,OAAO,UAC3B,IAAM,SAAS,IAAK,OAAO,UAC3B,IAAM,SAAS,IAAK,OAAO,UAE3B,IAAM,aAAa,IAAK,OAAO,cAC/B,IAAM,SAAS,IAAK,OAAO,WAC3B,IAAM,SAAS,IAAK,OAAO,WAE3B,IAAM,aAAa,IAAK,OAAO,cAC/B,IAAM,SAAS,IAAK,OAAO,WAC3B,IAAM,SAAS,IAAK,OAAO,WAC3B,IAAM,aAAa,IAAK,OAAO,kBAE/B,cAAkB,IAAI,KAAK,CAAC,EAAG,mBACR,AAAG,OAAO,UAAW,OAAO,IAEnD,MAAO,uBAIE,iBACX,MAAO,MAAK,aAAa,KAAM,YAAW,cAG/B,+BACX,aAAiB,KAAM,YAAW,8BAEJ,AAAG,KAC/B,IAAM,AAAG,QAAQ,KAAK,aAAa,oCAGL,KAAM,SAAQ,IAAI,sBAAsB,IACtE,GAAO,EAAE,SAGX,6BAAsB,QAAQ,GAAO,EAAE,WAEhC,SAAS,aACZ,wBACA,wBAAwB,GAGpB,sBACR,MAAO,yBAGC,sCACR,MAAO,6BAA2B,WAG1B,uBACR,MAAO,gBAAc,WCrFlB,kCAAkC,SACvC,QAAY,GAAI,oBAChB,WAAI,eAAe,SACZ,ICHF,kCAGL,sBAGA,cAAkB,CAAE,YACpB,MAAO,IAAK,aAAc,WCPrB,mBAAmB,KACxB,MAAO,OAAO,KAAI,KAAQ,SAGrB,sCAML,cAAkB,CAAE,KACpB,MAAO,IAAK,aAAc,WCPrB,sBAAsB,KAC3B,MAAQ,KAAI,SAAW,OAAO,MAAQ,IAAI,SAAW,OAAO,SACvD,mBAAmB,IAAI,mBAGvB,8DAOL,cAAkB,CAAE,OAAQ,mBAC5B,MAAO,IAAK,aAAc,WCZ5B,4BAA2B,8BACzB,8DACE,YAAgB,AAAG,SAAS,eAAe,EAAI,EAAI,aAAc,CAAC,EAAG,EAAG,YAAa,qBAC5D,AAAG,SAAS,eAAe,gCAC1B,AAAG,SAAS,eAAe,8BAC7B,AAAG,SAAS,eAAe,kCACvB,AAAG,SAAS,eAAe,cAEvD,qBAAc,KACZ,CAAE,UAAW,GAAG,wBAChB,CAAE,UAAW,GAAG,iCAChB,CAAE,UAAW,GAAG,kCAChB,CAAE,UAAW,GAAG,gCAChB,CAAE,UAAW,GAAG,qCAGX,CACL,QACA,iBACA,kBACA,gBACA,qBAIJ,2FAOE,YAAgB,AAAG,SACjB,eAAe,WAAa,YAAc,WAAa,YACvD,CAAC,WAAY,WAAY,WAAY,mBAE1B,AAAG,SAAS,eAAe,cAExC,qBAAc,KACZ,CAAE,UAAW,GAAG,wBAChB,CAAE,UAAW,GAAG,gBAAgB,gBAAkB,oBAAsB,WAGnE,CAAE,QAAS,MAGpB,oFAME,IACE,QACA,MACE,kBAAkB,WAAY,YAAa,WAAY,aAAc,IAEzE,MAAO,CACL,QACA,kBAAmB,MAIvB,oEAKE,mBAAuB,2BAA2B,WAAY,GAAG,8CAC1C,2BAA2B,WAAY,YAAa,EAAG,GAAG,+BAEjF,MAAO,CAAE,eAAgB,gBAG3B,oCACE,WAAe,2BAA2B,EAAG,GAAI,EAAG,6BAErC,sBAAsB,GAAI,GAAI,6BAC9B,sBAAsB,GAAI,IAAK,6BAC/B,sBAAsB,IAAK,IAAK,6BAChC,sBAAsB,IAAK,IAAK,6BAChC,sBAAsB,IAAK,IAAK,6BAChC,sBAAsB,IAAK,IAAK,6BAChC,sBAAsB,IAAK,IAAK,6BAChC,sBAAsB,IAAK,IAAK,6BAChC,sBAAsB,IAAK,IAAK,8BAC/B,sBAAsB,IAAK,IAAK,+BAChC,sBAAsB,IAAK,IAAK,+BAChC,sBAAsB,IAAK,KAAM,+BACjC,sBAAsB,KAAM,KAAM,uBAElD,MAAO,CACL,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,SAIJ,wCACE,WAAe,2BAA2B,KAAM,IAAK,EAAG,kCACzC,2BAA2B,IAAK,IAAK,EAAG,kCACxC,2BAA2B,IAAK,IAAK,EAAG,kCACxC,2BAA2B,IAAK,IAAK,EAAG,kCACxC,2BAA2B,IAAK,IAAK,EAAG,kCACxC,2BAA2B,IAAK,IAAK,EAAG,kCACxC,2BAA2B,IAAK,GAAI,EAAG,kCACvC,2BAA2B,GAAI,IAAK,EAAG,oDAErB,kBAAkB,IAAK,GAAI,EAAG,6EACrC,kBAAkB,IAAK,EAAG,EAAG,6EACtB,kBAAkB,KAAM,GAAI,EAAG,6EACtC,kBAAkB,KAAM,GAAI,EAAG,6EACxB,kBAAkB,IAAK,GAAI,EAAG,6EACrC,kBAAkB,IAAK,GAAI,EAAG,6EACvB,kBAAkB,IAAK,GAAI,EAAG,6EACrC,kBAAkB,IAAK,GAAI,EAAG,6EACvB,kBAAkB,IAAK,GAAI,EAAG,6EACrC,kBAAkB,IAAK,GAAI,EAAG,6EACvB,kBAAkB,IAAK,GAAI,EAAG,6EACrC,kBAAkB,IAAK,GAAI,EAAG,oEAEhC,CACtB,uBAAwB,yBACxB,gBAAiB,mCAEK,CACtB,uBAAwB,yBACxB,gBAAiB,mCAEK,CACtB,uBAAwB,yBACxB,gBAAiB,mCAEK,CACtB,uBAAwB,yBACxB,gBAAiB,mCAEK,CACtB,uBAAwB,yBACxB,gBAAiB,mCAEK,CACtB,uBAAwB,yBACxB,gBAAiB,mBAGnB,MAAO,CACL,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,gBACA,gBACA,gBACA,gBACA,gBACA,iBAIJ,MAAO,CACL,yBACA,8BAIG,kCACL,kBAAsC,IAGpC,eACA,qBACE,sBAAsB,UAGxB,yBACA,8BACE,mBAAkB,eAAgB,2BAElB,4CACK,yCACP,AAAG,SACnB,eAAe,KAAO,GACtB,CAAC,EAAG,KAAM,iBAES,CACnB,WAKF,GAFA,cAAc,KAAK,CAAE,UAAW,2BAE5B,sBAAsB,SAAW,EACnC,KAAM,IAAI,OAAM,kCAAkC,sBAAsB,UAG1E,MAAO,CACL,OAAQ,CACN,YACA,iBACA,cAEF,eCvNJ,4BAA2B,yBACzB,uBAA2B,0BAA0B,UAAW,eAEhE,6DACE,YAAgB,mBAAmB,GAAG,iBAAiB,wBAAyB,EAAG,GAAG,0CAC5D,mBAAmB,GAAG,iBAAiB,sCAAuC,EAAG,GAAG,kCAE9G,MAAO,CAAE,QAAS,mBAGpB,oCACE,iBAAqB,oBAAoB,0BACb,sBAAsB,0CAChB,GAAG,wDACH,GAAG,sCAErB,mBAAmB,GAAG,wCAAyC,EAAG,GAAG,sDAC5D,mBAAmB,GAAG,sCAAuC,EAAG,GAAG,gEAClE,mBAAmB,GAAG,qCAAsC,EAAG,GAAG,+DACpE,mBAAmB,GAAG,4CAA6C,EAAG,GAAG,iEACrE,mBAAmB,GAAG,gDAAiD,EAAG,GAAG,iDAEzG,MAAO,CACL,eAAgB,CACd,QACA,iBACA,kBACA,gBACA,qBAEF,eAAgB,2BAA2B,cAAe,IAAK,4BAInE,oCACE,MAAO,CACL,OAAQ,2BAA2B,cAAe,EAAG,sBACrD,OAAQ,sBAAsB,GAC9B,OAAQ,sBAAsB,GAC9B,OAAQ,sBAAsB,GAC9B,OAAQ,sBAAsB,GAC9B,OAAQ,sBAAsB,GAC9B,OAAQ,sBAAsB,GAC9B,OAAQ,sBAAsB,GAC9B,OAAQ,sBAAsB,GAC9B,OAAQ,sBAAsB,GAC9B,QAAS,sBAAsB,IAC/B,QAAS,sBAAsB,IAC/B,QAAS,sBAAsB,IAC/B,QAAS,sBAAsB,KAInC,gDACE,YAAgB,mBAAmB,GAAG,iBAAkB,EAAG,GAAG,6BACjD,mBAAmB,GAAG,gBAAiB,EAAG,GAAG,qBAE1D,MAAO,CAAE,QAAS,MAGpB,wCACE,2BAA+B,kBAC7B,2BAA2B,2BAC3B,kCAAkC,8CAEZ,kBACtB,2BAA2B,qBAC3B,kCAAkC,uBAGpC,MAAO,CAAE,uBAAwB,iBAGnC,wCACE,MAAO,CACL,OAAQ,2BAA2B,aAAc,EAAG,2BACpD,OAAQ,2BAA2B,aAAc,EAAG,2BACpD,OAAQ,2BAA2B,aAAc,EAAG,2BACpD,OAAQ,2BAA2B,aAAc,EAAG,2BACpD,OAAQ,2BAA2B,aAAc,EAAG,2BACpD,OAAQ,2BAA2B,aAAc,EAAG,2BACpD,OAAQ,2BAA2B,aAAc,EAAG,2BACpD,OAAQ,2BAA2B,aAAc,EAAG,2BACpD,gBAAiB,0BAA0B,GAC3C,gBAAiB,0BAA0B,GAC3C,gBAAiB,0BAA0B,GAC3C,gBAAiB,0BAA0B,GAC3C,gBAAiB,0BAA0B,GAC3C,gBAAiB,0BAA0B,IAI/C,MAAO,CACL,yBACA,8BAIG,iDAGL,kBAAsC,IAGpC,yBACA,8BACE,mBAAkB,UAAW,yBAEf,UAAU,oBAG5B,GAFA,cAAc,KAAK,CAAE,aAAc,mBAAoB,UAAW,2BAE9D,CAAC,WAAW,WACd,KAAM,IAAI,OAAM,yEAAyE,aAG3F,WAAe,CACb,YAAa,2BACb,iBAAkB,+BAClB,aAAc,CACZ,YAIJ,kCAA2B,UAAW,eAE/B,CAAE,OAAQ,eCnIZ,4BACL,kBAIA,MAAO,AAAG,MAAK,KACb,QAAU,AAAG,OAAO,EAAG,OAAO,QAAS,QAAS,QAChD,WAAM,AAAG,KAAI,IAAK,OAAO,mBAClB,AAAG,YAAY,IAAK,EAAG,KCPlC,IAAM,SAAU,qBAEhB,8CAKE,MAAO,AAAG,MAAK,KACb,QAAU,AAAG,gBAAgB,EAAG,OAAO,QAAS,QAAS,QACzD,WAAM,AAAG,UACP,IACA,OAAO,gBACP,OAAO,oBACP,OAAO,kBACP,OAAO,iBACP,UAEK,AAAG,YAAY,IAAK,EAAG,KAIlC,yCACE,MAAO,CAAC,EAAG,EAAG,EAAG,IAAI,KAAK,KAAS,MAAQ,UAAY,CAAC,EAAG,GAAK,CAAC,EAAG,GAG/D,+BACL,MAAO,AAAG,MAAK,KACb,eACU,mBAAmB,EAAG,OAAO,OAAQ,CAAC,EAAG,mBAE5B,CACrB,OAAO,OACP,OAAO,OACP,OAAO,OACP,OAAO,OACP,OAAO,OACP,OAAO,OACP,OAAO,OACP,OAAO,OACP,OAAO,OACP,OAAO,QACP,OAAO,QACP,OAAO,QACP,OAAO,SAaT,GAVA,eAAe,QAAQ,YACrB,aAAiB,EAAI,uBACQ,sBAAsB,UACnD,IAAM,mBAAmB,IAAK,MAAM,eAAgB,sBACpD,IAAM,mBAAmB,IAAK,MAAM,eAAgB,CAAC,EAAG,IACxD,AAAI,WAAa,IACf,QAAS,OAIT,SAAW,KACb,KAAM,IAAI,OAAM,iDAGlB,MAAO,CACL,IACA,UCjEN,aAAa,WACX,cAAkB,MAAM,kBACV,KAAK,IAAI,UAAU,GAAG,GAAI,UAAU,GAAG,UACvC,KAAK,IAAI,UAAU,GAAG,GAAI,UAAU,GAAG,UACvC,KAAK,IAAI,UAAU,GAAG,GAAI,UAAU,GAAG,UACvC,KAAK,IAAI,UAAU,GAAG,GAAI,UAAU,GAAG,UACvC,KAAK,IAAI,UAAU,GAAG,GAAI,UAAU,GAAG,UACvC,KAAK,IAAI,UAAU,GAAG,GAAI,UAAU,GAAG,UACvC,KAAK,IAAI,UAAU,GAAG,GAAI,UAAU,GAAG,UACvC,KAAK,IAAI,UAAU,GAAG,GAAI,UAAU,GAAG,UACtC,OAAQ,OAAU,OAAQ,aAC1B,OAAQ,OAAU,OAAQ,OACzC,GAAI,OAAS,GAAK,OAAS,EACzB,MAAO,GAET,qBAAyB,KAAK,IAAI,MAAO,wBAChB,KAAK,IAAI,MAAO,wBAChB,KAAK,IAAI,MAAO,wBAChB,KAAK,IAAI,MAAO,wBAChB,KAAK,IAAI,iBAAmB,iBAAkB,GACjE,KAAK,IAAI,iBAAmB,iBAAkB,GACpD,MAAO,kBAAoB,OAAQ,MAAQ,kBAGtC,oFAOL,aAAiB,MAAM,MAAM,cACV,KAAK,IACtB,cACA,qBAGiB,OAChB,IAAI,kBAAsB,EAAE,MAAO,YACnC,OAAO,GAAO,EAAE,MAAQ,gBACxB,KAAK,SAAY,GAAG,MAAQ,GAAG,oBAEb,GAAgB,GAAK,aAAe,EAAI,WAElC,GAE3B,kBAAW,QAAQ,IACjB,GAAI,SAAS,QAAU,WACrB,OAEF,kBAAsB,EAAE,MAExB,UAAa,SAAS,OAAS,EAAG,GAAK,EAAG,EAAE,GAC1C,SAAY,IAAI,MAAO,EAAE,SAAU,SAAS,IAC5C,GAAI,OAAQ,EAAK,SAEjB,GADA,EAAE,OAAS,aAAa,MACpB,EAAE,OAAS,eAAgB,MAEjC,AAAI,gBAAkB,EAAE,OACtB,SAAS,KAAK,EAAE,YAIb,SC7DT,2CAA2C,GACzC,QAAY,AAAG,QAAQ,AAAG,UAAU,EAAG,CAAC,EAAG,WAE7B,CACZ,AAAG,IAAI,IAAI,GAAI,IAAI,IACnB,AAAG,IAAI,IAAI,GAAI,IAAI,aAGL,CACd,AAAG,KAAI,IAAI,GAAI,AAAG,IAAI,MAAM,GAAI,AAAG,OAAO,KAC1C,AAAG,KAAI,IAAI,GAAI,AAAG,IAAI,MAAM,GAAI,AAAG,OAAO,MAG5C,MAAO,CACL,MACA,SAIJ,iCACE,IACE,MACA,SACE,kCAAkC,QAE1B,AAAG,QAAQ,AAAG,UAAU,GAAI,CAAC,EAAG,cAE3B,AAAG,IAAI,AAAG,IAAI,AAAG,IAAI,AAAG,IAAI,IAAI,GAAI,AAAG,OAAO,KAAM,MAAM,IAAK,AAAG,OAAO,aACzE,AAAG,KAAI,AAAG,IAAI,AAAG,IAAI,IAAI,GAAI,AAAG,OAAO,KAAM,MAAM,IAAK,QAAQ,aAEhE,AAAG,IAAI,AAAG,IAAI,AAAG,IAAI,AAAG,IAAI,IAAI,GAAI,AAAG,OAAO,KAAM,MAAM,IAAK,AAAG,OAAO,aACzE,AAAG,KAAI,AAAG,IAAI,AAAG,IAAI,IAAI,GAAI,AAAG,OAAO,KAAM,MAAM,IAAK,QAAQ,IAEjF,MAAO,AAAG,WACR,AAAG,MAAM,CACP,AAAG,IAAI,SAAU,UACjB,AAAG,IAAI,SAAU,UACjB,AAAG,KAAI,SAAU,UACjB,AAAG,KAAI,SAAU,YAEnB,CAAC,EAAG,IAID,6DAKL,MAAO,AAAG,MAAK,KACb,cAAkB,eAAe,MAAM,SAE3B,iBACV,AAAG,QAAQ,AAAG,KAAK,OAAO,UAAW,CAAC,UAAW,EAAG,IAAK,CAAC,GAAI,IAC9D,AAAG,QAAQ,eAAgB,CAAC,GAAI,KAElC,MAAQ,AAAG,QACT,MACA,CAAC,UAAY,MAAM,MAAM,GAAK,UAAY,IAG5C,qBAAyB,AAAG,QAAQ,AAAG,MAAM,iBAAkB,CAAC,EAAG,EAAG,GAAI,CAAC,GAAI,GAAI,aACtE,AAAG,MAAM,iBAAkB,CAAC,EAAG,EAAG,GAAI,CAAC,GAAI,GAAI,IAE5D,OAAS,AAAG,QACV,OACA,CAAC,UAAW,OAAO,MAAM,KAG3B,iBAAqB,AAAG,QAAQ,qBACV,AAAG,QAAQ,QAEjC,MAAO,CACL,MAAO,aACP,OAAQ,iBCzEP,4BACL,UAGA,MAAO,AAAG,MAAK,KACb,cAAkB,EAAE,MAAM,yBAEI,AAAG,QAC/B,UAAU,EAAG,OAAO,wBACpB,CAAC,UAAW,GAAI,EAAG,oBAEG,AAAG,QACzB,UAAU,EAAG,OAAO,iBACpB,CAAC,UAAW,GAAI,IAGlB,MAAO,CACL,sBACA,mBCjBC,yBACL,iBAIA,MAAO,AAAG,MAAK,KACb,UAAc,mBAAmB,EAAG,OAAO,OAAQ,CAAC,EAAG,UACzC,mBAAmB,MAAO,OAAO,OAAQ,CAAC,EAAG,WAC7C,mBAAmB,MAAO,OAAO,OAAQ,CAAC,EAAG,UAC7C,mBAAmB,OAAO,OAAO,OAAQ,CAAC,EAAG,UAC7C,mBAAmB,MAAO,OAAO,OAAQ,CAAC,EAAG,UAC7C,mBAAmB,MAAO,OAAO,OAAQ,CAAC,EAAG,UAC7C,mBAAmB,MAAO,OAAO,OAAQ,CAAC,EAAG,UAC7C,mBAAmB,MAAO,OAAO,OAAQ,CAAC,EAAG,mBAEpC,mBAAmB,OAAQ,OAAO,gCAClC,mBAAmB,EAAG,OAAO,gCAC7B,mBAAmB,MAAO,OAAO,gCACjC,mBAAmB,MAAO,OAAO,gCACjC,mBAAmB,MAAO,OAAO,gCACjC,mBAAmB,MAAO,OAAO,gCAEjC,AAAG,OAAO,CAC/B,eAAe,sBACf,eAAe,sBACf,eAAe,sBACf,eAAe,sBACf,eAAe,sBACf,eAAe,uBACd,oBAEsB,AAAG,OAAO,CACjC,eAAe,gBACf,eAAe,gBACf,eAAe,gBACf,eAAe,gBACf,eAAe,gBACf,eAAe,iBACd,GAEH,MAAO,CACL,eACA,oBChDN,IAAA,4BAYE,aAAc,cAAe,YAAuC,IAN1D,WAAgB,wBAUxB,GAHA,KAAK,eAAiB,eAAiB,GACvC,KAAK,YAAc,YAAc,IAE7B,MAAO,MAAK,gBAAmB,UAAY,KAAK,gBAAkB,GAAK,KAAK,gBAAkB,EAChG,KAAM,IAAI,OAAM,GAAG,KAAK,iEAG1B,GAAI,MAAO,MAAK,aAAgB,SAC9B,KAAM,IAAI,OAAM,GAAG,KAAK,iDAIxB,iBAA0B,MAAO,MAAK,kBAEtC,cAAuB,MAAO,MAAK,cC3BzC,4BAeoC,eAClC,cACE,MAAM,kBAGD,qBACL,IAAQ,QAAW,KAEnB,GAAI,CAAC,OACH,KAAM,IAAI,OAAM,gDAGlB,MAAO,AAAG,MAAK,KAEb,gBAAoB,AAAG,KAAK,OAAM,cAAc,IAAK,IAAQ,aAEnD,AAAG,IAAI,AAAG,IAAI,YAAa,AAAG,OAAO,sBAAwB,AAAG,OAAO,aAChE,YAAY,EAAG,OAAO,cAGrC,eACA,kBACE,gBAAgB,SAAS,IAAK,SAAS,OAAQ,OAAO,kBAE1D,MAAO,aAAY,eAAgB,iBAAkB,OAAO,qBAInD,iBACX,MAAO,MAAK,aAAa,KAAM,YAAW,cAG/B,4BAEuB,IAElC,IAAQ,WAAY,eAAkB,GAAI,uBAAsB,kBAE/C,KAAM,YAAW,SAGhC,aACA,gBACE,KAAK,aAAa,gBAGR,OAAO,UACN,QAAQ,GACvB,UAAa,EAAG,EAAI,OAAO,OAAQ,IACjC,OAAO,GAAG,UACV,QAAQ,GAAG,UAIb,eAAmB,MAAM,KAAK,KAAM,QAAO,qBAEtB,WACL,mBACd,MACA,WACA,WACA,aACA,4BAGmB,SAAS,2BAA2B,aACvC,SAAS,eACd,UAAY,aAAa,WACzB,UAAY,aAAa,iBAEpB,MAAM,oBACR,QACb,IAAI,MACH,gBAAsB,CACpB,KAAK,IAAI,EAAG,UAAU,KAAK,IAC3B,KAAK,IAAI,EAAK,UAAU,KAAK,KAC7B,IAAI,KAAS,IAAM,mBACC,CACpB,KAAK,IAAI,EAAG,UAAU,KAAK,IAC3B,KAAK,IAAI,EAAK,UAAU,KAAK,KAC7B,IAAI,KAAS,IAAM,MACrB,MAAO,IAAI,eACT,WAAW,KACX,GAAI,MACF,KACA,IACA,MAAQ,KACR,OAAS,KAEX,CACE,OAAQ,SAAS,eAAe,GAChC,MAAO,SAAS,cAAc,OAKtC,aAAM,UACN,OAAO,UAEA,QAGC,sBACR,MAAO,wBAGC,sCACR,MAAO,8BAA2B,WAG1B,uBACR,MAAO,iBAAc,WCzHlB,8BAA8B,SACnC,QAAY,GAAI,gBAChB,WAAI,eAAe,SACZ,IAGF,yCACL,MAAO,sBAAqB,SAZ9B,kCAgBsC,kBCdzB,cAAgB,eAEF,CACzB,GAAI,OAAM,QAAU,SACpB,GAAI,OAAM,QAAS,SACnB,GAAI,OAAM,QAAS,SACnB,GAAI,OAAM,OAAQ,SAClB,GAAI,OAAM,QAAS,gCAGgB,CACnC,GAAI,OAAM,SAAU,UACpB,GAAI,OAAM,SAAU,UACpB,GAAI,OAAM,SAAU,UACpB,GAAI,OAAM,SAAU,UACpB,GAAI,OAAM,SAAU,8BAGsC,CAAC,QAAS,QAAS,4BAE7C,sDACe,mCCV3C,UAAW,KAAc,MAAO,MAAQ,SAEvC,iCACL,GAAI,CAAC,QACH,KAAM,IAAI,OAAM,mBAAmB,WAGrC,GAAI,MAAO,SAAO,oBAAuB,UACvC,KAAM,IAAI,OAAM,wDAAwD,QAAO,sBAGjF,GAAI,CAAC,UAAS,QAAO,eAAiB,QAAO,aAAe,GAAK,QAAO,aAAe,EACrF,KAAM,IAAI,OAAM,gEAAgE,QAAO,gBAGzF,GACE,CAAC,MAAM,QAAQ,QAAO,UACnB,CAAC,QAAO,QAAQ,QAChB,CAAC,QAAO,QAAQ,MAAM,GAAY,MAAO,IAAM,UAElD,KAAM,IAAI,OAAM,kEAAkE,KAAK,UAAU,QAAO,YAG1G,GACE,CAAC,MAAM,QAAQ,QAAO,UACnB,CAAC,QAAO,QAAQ,QAChB,CAAC,QAAO,QAAQ,IAAI,GAAY,GAAK,IAAI,MAAM,GAAY,UAAS,EAAE,IAAM,UAAS,EAAE,IAE1F,KAAM,IAAI,OAAM,wEAAwE,KAAK,UAAU,QAAO,YAGhH,GAAI,QAAO,SACT,EAAC,MAAM,QAAQ,QAAO,UACnB,QAAO,QAAQ,SAAW,GAC1B,CAAC,QAAO,QAAQ,MAAM,YAEzB,KAAM,IAAI,OAAM,8EAA8E,KAAK,UAAU,QAAO,YC/CjH,eAAe,GACpB,MAAO,AAAG,MAAK,KACb,SAAY,AAAG,IAAI,EAAG,AAAG,OAAO,qBAChC,MAAO,AAAG,MAAI,AAAG,KAAK,AAAG,IAAI,EAAG,OAAO,QCApC,2BAA2B,UAChC,MAAO,AAAG,MAAK,KACb,QAAU,AAAG,IAAI,EAAG,CAAC,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,KAEjD,WAAM,AAAG,OAAO,IAAK,OAAO,KAAK,QAAS,CAAC,EAAG,GAAI,SAClD,IAAM,AAAG,IAAI,IAAK,OAAO,GAAG,KAC5B,IAAM,AAAG,IAAI,IAAK,OAAO,GAAG,SAC5B,IAAM,AAAG,KAAI,IAAK,OAAO,KAAK,MAEvB,MAAM,OCTV,iCAAgC,UACrC,MAAO,AAAG,MAAK,KACb,QAAU,AAAG,IAAI,EAAG,CAAC,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,KAEjD,WAAM,AAAG,gBAAgB,IAAK,OAAO,iBAAkB,OAAO,iBAAkB,CAAC,EAAG,GAAI,SACxF,IAAM,AAAG,KAAI,IAAK,OAAO,MAElB,MAAM,OCHjB,4BAA2B,8BACzB,sBAA0B,yBAAyB,eAAgB,eAEnE,mDACE,SAAY,AAAG,SAAS,eAAe,eACvB,AAAG,SAAS,eAAe,OAE3C,qBAAc,KACZ,CAAE,UAAW,GAAG,oBAChB,CAAE,UAAW,GAAG,yBAGX,CAAE,SAAK,SAGhB,6EACE,UAAa,kBAAkB,WAAY,YAAa,EAAG,GAAG,wBACnD,uBAAuB,YAAa,GAAG,mBAElD,MAAO,CAAE,WAAM,IAEjB,+BAAmC,kCAAkC,eAAgB,eAErF,MAAO,CACL,kBACA,+BACA,4BAIG,sEAML,IACE,eACA,qBACE,sBAAsB,uBAEY,IAGpC,kBACA,+BACA,4BACE,mBAAkB,eAAgB,sBAItC,GAAI,QAAO,oBACT,gCAA6C,kBAE/B,QAAO,mBACjB,kBAAkB,GAAI,GAAI,EAAG,SAC7B,2BAA2B,GAAI,GAAI,eACzB,2BAA2B,GAAI,GAAI,gBACnC,2BAA2B,GAAI,GAAI,eACnC,2BAA2B,GAAI,GAAI,eACnC,2BAA2B,GAAI,GAAI,eACnC,2BAA2B,GAAI,GAAI,eACnC,GAAK,2BAA2B,GAAI,GAAI,SAAW,aACnD,GAAK,2BAA2B,GAAI,GAAI,SAAW,aACnD,kBAAkB,IAAM,IAAM,GAAI,EAAI,gBAAiB,EAAG,SACxE,OAAS,CACP,MAAO,MAAO,aAAO,MAAO,MAAO,MAAO,MAAO,MAAO,YAG1D,gCAA6C,kBAC/B,+BAA+B,GAAI,GAAI,eACvC,+BAA+B,GAAI,GAAI,gBACvC,+BAA+B,GAAI,GAAI,eACvC,+BAA+B,GAAI,GAAI,eACvC,+BAA+B,GAAI,GAAI,eACvC,+BAA+B,GAAI,GAAI,eACvC,+BAA+B,GAAI,GAAI,eACvC,+BAA+B,GAAI,GAAI,eACvC,kBAAkB,GAAI,EAAI,gBAAiB,EAAG,SAC5D,OAAS,CACP,MAAO,MAAO,aAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAI5D,GAAI,sBAAsB,SAAW,EACnC,KAAM,IAAI,OAAM,kCAAkC,sBAAsB,UAG1E,MAAO,CAAE,OAAQ,eCvFnB,6BAA2B,yBACzB,uBAA2B,0BAA0B,UAAW,eAEhE,wCACE,SAAY,mBAAmB,GAAG,aAAc,WAChC,mBAAmB,GAAG,iBAAkB,GACxD,MAAO,CAAE,SAAK,SAGhB,mCACE,YAAgB,mBAAmB,GAAG,iBAAkB,QAC3C,mBAAmB,GAAG,cAAe,GAClD,MAAO,CAAE,QAAS,MAGpB,gDACE,UAAa,kBAAkB,GAAG,kBACvB,uBAAuB,GAAG,aACrC,MAAO,CAAE,WAAM,IAGjB,+BAAmC,+BAA+B,oBAElE,MAAO,CACL,kBACA,+BACA,4BAIG,yDAIL,kBAAsC,IAGpC,kBACA,+BACA,4BACE,oBAAkB,UAAW,sBAIjC,GAAI,QAAO,oBAET,eAAoB,QAAO,aAAe,QAAO,YAAY,QAAU,EACvE,OAAS,CACP,MAAO,QAAO,mBAAqB,kBAAkB,SAAW,2BAA2B,SAC3F,MAAO,2BAA2B,SAClC,MAAO,2BAA2B,SAClC,MAAO,2BAA2B,SAClC,MAAO,2BAA2B,SAClC,MAAO,2BAA2B,SAClC,MAAO,WAAa,EAAI,2BAA2B,SAAW,OAC9D,MAAO,WAAa,EAAI,2BAA2B,SAAW,OAC9D,MAAO,kBAAkB,cAG3B,QAAS,CACP,MAAO,+BAA+B,SACtC,MAAO,+BAA+B,SACtC,MAAO,+BAA+B,SACtC,MAAO,+BAA+B,SACtC,MAAO,+BAA+B,SACtC,MAAO,+BAA+B,SACtC,MAAO,+BAA+B,SACtC,MAAO,+BAA+B,SACtC,MAAO,kBAAkB,UAI7B,kCAA2B,UAAW,eAE/B,CAAE,OAAQ,eCpFnB,IAAA,wBAYE,aAAc,UAAW,gBAAuC,IANtD,WAAgB,oBAUxB,GAHA,KAAK,WAAa,WAAa,IAC/B,KAAK,gBAAkB,gBAAkB,GAErC,MAAO,MAAK,YAAe,UAAY,KAAK,WAAa,KAAO,EAClE,KAAM,IAAI,OAAM,GAAG,KAAK,6DAG1B,GAAI,MAAO,MAAK,iBAAoB,UAAY,KAAK,iBAAmB,GAAK,KAAK,iBAAmB,EACnG,KAAM,IAAI,OAAM,GAAG,KAAK,qEAIxB,aAAsB,MAAO,MAAK,cAElC,kBAA2B,MAAO,MAAK,kBC3B7C,6BAuBoC,eAOlC,qBACE,MAAM,cACN,eAAe,SACf,KAAK,QAAU,WAGN,UACT,MAAO,MAAK,WAGH,mBACT,MAAO,MAAK,OAAO,iBAAmB,KAAK,OAAO,QAAQ,OAAS,KAG1D,mBACT,MAAO,GAAK,MAAK,gBAAkB,KAAK,OAAO,QAAQ,OAAS,GAG3D,wBACL,QAAU,kBAAkB,EAAG,OAAO,OACtC,WAAM,AAAG,QAAQ,IAAK,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,QACtC,IAAM,kBAAkB,IAAK,OAAO,OACpC,IAAM,AAAG,QAAQ,IAAK,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,QACtC,IAAM,kBAAkB,IAAK,OAAO,OACpC,IAAM,AAAG,QAAQ,IAAK,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,QACtC,IAAM,kBAAkB,IAAK,OAAO,OACpC,IAAM,AAAG,QAAQ,IAAK,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,QACtC,IAAM,kBAAkB,IAAK,OAAO,OACpC,IAAM,AAAG,QAAQ,IAAK,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,QACtC,IAAM,kBAAkB,IAAK,OAAO,OACpC,IAAM,AAAG,QAAQ,IAAK,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,QACtC,IAAM,kBAAkB,IAAK,OAAO,OACpC,IAAM,kBAAkB,IAAK,OAAO,OAE7B,UAAU,IAAK,OAAO,MAAO,QAAS,IAGxC,uBACL,QAAU,KAAK,OAAO,mBAClB,MAAM,UAAU,EAAG,OAAO,MAAqB,QAAS,KACxD,wBAAuB,EAAG,OAAO,OACrC,WAAM,AAAG,QAAQ,IAAK,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,QACtC,IAAM,wBAAuB,IAAK,OAAO,OACzC,IAAM,AAAG,QAAQ,IAAK,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,QACtC,IAAM,wBAAuB,IAAK,OAAO,OACzC,IAAM,AAAG,QAAQ,IAAK,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,QACtC,IAAM,wBAAuB,IAAK,OAAO,OACzC,IAAM,AAAG,QAAQ,IAAK,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,QACtC,IAAM,wBAAuB,IAAK,OAAO,OACzC,IAAM,AAAG,QAAQ,IAAK,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,QACtC,IAAM,wBAAuB,IAAK,OAAO,OACzC,IAAM,AAAG,QAAQ,IAAK,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,QACtC,IAAM,OAAO,MAAQ,wBAAuB,IAAK,OAAO,OAAS,IACjE,IAAM,OAAO,MAAQ,wBAAuB,IAAK,OAAO,OAAS,IAE1D,UAAU,IAAK,OAAO,MAAO,QAAS,IAGxC,+BACL,IAAQ,QAAW,KAEnB,GAAI,CAAC,OACH,KAAM,IAAI,OAAM,4CAGlB,MAAO,AAAG,MAAK,KAEb,gBAAkB,AAAG,KAAK,OAAM,cAAc,UAAW,IAAQ,WACjE,mBAAc,KAAK,OAAO,QACtB,UAAU,YAAa,KAAK,OAAO,SACnC,YACJ,YAAc,YAAY,IAAI,AAAG,OAAO,MAEjC,KAAK,OAAO,mBACf,KAAK,aAAa,YAAa,QAC/B,KAAK,cAAc,YAAa,eAI3B,2BACX,MAAO,MAAK,aAAa,KAAM,YAAW,QAAQ,gBAGvC,6BAA6D,IACxE,IAAQ,UAAW,gBAAmB,GAAI,mBAAkB,wBAE3C,KAAM,YAAW,YACtB,KAAM,MAAK,aAAa,SAAU,gBACjC,AAAG,KAAK,IAAM,AAAG,QAAQ,KAAK,GAAG,8BAEtB,CACtB,MAAO,SAAS,cAAc,GAC9B,OAAQ,SAAS,eAAe,YAGlB,KAAM,MAAK,aAAa,KAAM,SAAS,2BAA2B,GAAI,gBACtF,IAAI,UACJ,KAAK,UAEL,UAAc,QAAQ,IAAI,KAAS,IAAI,YACxB,QAAQ,IAAI,KAAS,IAAI,mBACpB,QAAQ,IAAI,KAAS,IAAI,uBAC1B,QAAQ,IAAI,KAAS,KAAK,OAAO,QAAQ,IAAI,gBAEhD,mBACd,MAAM,IAAI,KAAS,IAAI,QAAQ,YAC/B,OACA,KAAK,OAAO,aACZ,eAGiB,QAAQ,IAAI,KAAS,GAAI,iBAC1C,OAAO,KACP,YAAY,KACZ,WAAW,KACX,MAAM,KACN,kBAGF,MAAO,YAGC,sBACR,MAAO,GAGC,sCACR,MAAO,8BAA2B,UAAW,KAAK,QAG1C,uBACR,gBAAoB,KAAK,OAAO,aAAe,gBAAe,gCAE3C,YAAc,YAAY,OAAS,OACtD,GAAI,aAAe,GAAK,aAAe,GAAK,aAAe,EACzD,KAAM,IAAI,OAAM,oEAAoE,oCAEtF,MAAO,iBAAc,QAAS,KAAK,OAAQ,KAAK,gBAAiB,kBAGnD,+DAKd,IAAQ,MAAO,QAAW,8BACR,KAAK,IAAI,MAAO,0BACR,UAAY,wBACZ,UAAY,gBAErB,aAAa,MAAM,YACnB,KAAK,OAAO,QAAQ,oDAEkB,AAAG,KAAK,KAC7D,aAAiB,aAAa,QAAQ,CAAC,SAAU,SAAU,SAAU,KAAK,wBAE5D,SAAS,MAAM,CAAC,EAAG,EAAG,EAAG,GAAI,CAAC,SAAU,SAAU,SAAU,WAC3D,SAAS,MAAM,CAAC,EAAG,EAAG,EAAG,GAAI,CAAC,SAAU,SAAU,SAAU,gBACvD,KAAK,gBACrB,AAAG,QAAQ,SAAS,MAAM,CAAC,EAAG,EAAG,EAAG,GAAI,CAAC,SAAU,SAAU,SAAU,KAAK,OAAO,QAAQ,SAAU,GACrG,AAAG,OAAO,GACd,MAAO,CAAC,MAAO,OAAQ,uBAGT,cAEG,KAAM,cAAa,kBACpB,KAAM,aAAY,QACpC,YAAe,EAAG,IAAM,SAAU,MAChC,YAAe,EAAG,IAAM,SAAU,MAChC,eAAkB,EAAG,OAAS,SAAU,UACtC,UAAc,SAAQ,WAAW,KAAK,KAAK,QAAQ,IACnD,GAAI,CAAC,gBAAkB,MAAQ,gBAC7B,QAAc,KAAM,SAAQ,UAAU,KAAK,KAAK,QAAQ,KAAO,SAAY,sBAC7D,KAAM,SAAQ,UAAU,KAAK,KAAK,QAAQ,KAAO,SAAY,6BACtD,KAAK,IAAI,UAAU,KAAK,KAAK,QAAQ,IAAM,KAAK,OAAO,QAAQ,QAAQ,EAAK,SAAY,8BACvF,KAAK,IAAI,UAAU,KAAK,KAAK,QAAQ,IAAM,KAAK,OAAO,QAAQ,QAAQ,EAAK,SAAY,oBAEnG,IAAO,WAAa,IACpB,IAAO,YAAc,MAEpB,CAAE,IAAK,IAAK,SAChB,WAAY,OAAU,KAAK,gBAC/B,KAAM,MAAK,sBAAsB,kBAAkC,KACnE,CAAE,WAAY,EAAG,MAAO,GAE5B,QAAQ,KAAK,CACX,IAAK,GAAI,aAAY,EAAG,EAAG,EAAI,WAAY,EAAI,aAC/C,MACA,WAAY,MAAQ,WACpB,SACG,OAOb,mBAAY,UACZ,aAAa,UACb,kBAAkB,UAEX,aAGK,0CACZ,IAAQ,IAAK,IAAK,QAAW,gBACT,KAAM,eAAc,QACxC,MAAO,OAAM,KAAK,OAAO,QAAQ,QAAQ,KAAK,GAC3C,IAAI,OAAU,YAAY,KAAK,KAAK,QAAQ,IAC5C,IAAI,oBAAwB,EAC3B,WACA,SAED,OAAO,aAAgB,KAAI,WAAa,KAAK,WAAa,KAAM,uBApPvE,gBAwBgB,AAxBhB,eAwBgB,qBAAuB,CACnC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,KAAM,MCzBxC,IAAA,wBAiBgC,gBAC9B,+BAA0C,IACxC,YAAe,CACb,mBACA,aAAc,cACd,QAAS,CAAC,WACN,mBACA,CACA,QAAS,sBACT,QAAS,oBAET,CACA,QAAS,YACT,gBAAiB,KAIvB,MAAM,YAGG,sBACT,MAAO,MAAK,OAAO,sBAGV,WACT,MAAO,MAAK,OAAO,aAGR,mCACX,qBAAyB,KAAM,MAAK,OAAO,OAAO,eAClD,MAAO,kBAAiB,IAAI,KAAS,GAAI,eAAc,IAAI,MAAO,IAAI,YAAa,CAAE,MAAO,IAAI,WAAY,OAAQ,IAAI,eAGhH,sBACR,MAAO,MAAK,mBAAqB,kCAAoC,oBAG7D,sCACR,MAAO,OAAM,2BAA2B,aC9CrC,0BAA0B,2BAAqD,IACpF,QAAY,GAAI,YAAW,oBAC3B,WAAI,eAAe,SACZ,ICZT,IAAA,qCAI6C,mBAJ7C,kCAKY,WAAgB,4BCL5B,0BACe,mBAIX,MAAO,aAAY,KAAM,MAAK,YAGnB,OACX,KAAM,IAAI,OAAM,6CCFpB,gDACE,uEAMwF,EAAG,eAAkB,aAE7G,cAAkB,cAAc,IAAI,cAAmB,oBAAoB,cACvE,oBAAoB,cACpB,aAAa,iBACqC,gBACpD,kBAAoB,QAChB,KAAM,oBAAmB,OAAO,WAChC,KAAM,cAAa,OAAO,oBAGhB,KAAM,gBAAe,OAErC,aAAM,QAAQ,GAAO,YAAgB,SAAU,EAAE,WAE1C,QAGT,uHASE,MAAO,kCACL,CAAC,cACD,OACA,aAAiB,cAAc,MAAM,IACrC,eACA,qBC5CG,IAAM,eAAgB,gBAEF,CACzB,GAAI,OAAM,SAAU,UACpB,GAAI,OAAM,SAAU,UACpB,GAAI,OAAM,SAAU,UACpB,GAAI,OAAM,SAAU,UACpB,GAAI,OAAM,SAAU,oBAG4B,CAAC,QAAS,QAAS,QCZrE,8BAUsC,gBACpC,cACE,YAAe,CACb,mBAAoB,GACpB,aAAc,eACd,QAAS,CAAC,QACV,QAAS,aACT,QAAS,SACT,mBAAoB,GACpB,YAAa,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,MAGzC,MAAM,YAGG,WACT,MAAO,MAAK,OAAO,aAGR,mCACX,qBAAyB,KAAM,MAAK,OAAO,OAAO,eAClD,MAAO,kBAAiB,IAAI,KAAS,GAAI,eAAc,IAAI,MAAO,IAAI,YAAa,CAAE,MAAO,IAAI,WAAY,OAAQ,IAAI,eAGhH,sBACR,MAAO,2BAGC,sCACR,MAAO,OAAM,2BAA2B,aCvB/B,KAAO,CAClB,eAAgB,GAAI,gBACpB,iBAAkB,GAAI,kBACtB,WAAY,GAAI,YAChB,kBAAmB,GAAI,mBACvB,sBAAuB,GAAI,uBAC3B,mBAAoB,GAAI,oBACxB,kBAAmB,GAAI,mBACvB,aAAc,GAAI,8BAUU,kBAAgF,KAAK,eAAe,YAAY,OAAO,0BASrH,kBAAkF,KAAK,iBAAiB,YAAY,OAAO,qBASjI,kBAA6E,KAAK,WAAW,YAAY,OAAO,6BASvG,QAAoE,KAAK,kBAAkB,gBAAgB,gCAWvG,QAAoE,KAAK,sBAAsB,gBAAgB,8BAYjH,QAA8D,KAAK,mBAAmB,sBAAsB,iCASzG,QAAoE,KAAK,kBAAkB,mBAAmB,4BASnH,QAAkF,KAAK,aAAa,oBAAoB,gCAEpH,KAAiB,KAAK,eAAe,KAAK,+BACxC,KAAiB,KAAK,iBAAiB,KAAK,yBAClD,KAAiB,KAAK,WAAW,KAAK,2BACpC,KAAiB,KAAK,kBAAkB,KAAK,+BACzC,KAAiB,KAAK,sBAAsB,KAAK,8BAClD,KAAiB,KAAK,mBAAmB,KAAK,6BAC/C,KAAiB,KAAK,kBAAkB,KAAK,wBAClD,KAAiB,KAAK,aAAa,KAAK,4BAGpC,oCACX,+BACI,oBCpH/B,4CAmB4E,gBAC1E,8CAQE,QANU,2BAEA,kBAEA,mEA1Bd,aAkCU,qCACK,OACX,kBAAsB,KAAM,MAAK,iCAEH,KAAM,kCAClC,cACA,KAAK,MACL,aAAiB,QAAQ,IAAI,MAAM,IACjC,MAAU,KAAK,kBAAkB,mBAAmB,QAEtD,KAAK,gBAGP,MAAO,eAAc,IACnB,kBAAqB,0BAAmC,aAAc,sBAAsB,KAIhG,mBACE,MAAO,IAAI,4BAA2B,KAAM,KAAK,0CArDrD,aA2DU,qCACK,OACX,iBAAqB,KAAM,MAAK,WAChC,GAAI,CAAC,aACH,OAGF,oBAAwB,KAAM,mCAC5B,aACA,KAAK,MACL,MAAU,KAAK,kBAAkB,mBAAmB,MACpD,KAAK,gBAGP,MAAO,2BAA0B,aAAc,iBAGjD,mBACE,MAAO,IAAI,+BAA8B,KAAM,KAAK,wDA7ExD,aAmFU,+BACR,mBACE,MAAO,IAAI,6CAA4C,KAAM,KAAK,OAGpE,sBACE,MAAO,IAAI,+BAA8B,KAAM,KAAK,2DAzFxD,aA+FU,kCACR,mBACE,MAAO,IAAI,gDAA+C,KAAM,KAAK,OAGvE,qBACE,MAAO,IAAI,iCAAgC,KAAM,KAAK,SCrG1D,yCAoByE,gBACvE,8CAQE,QANU,2BAEA,kBAEA,gEA3Bd,aAmCU,kCACK,OACX,kBAAsB,KAAM,MAAK,8BAEN,KAAM,kCAC/B,cACA,KAAK,MACL,aAAiB,QAAQ,IAAI,MAAM,IACjC,MAAU,KAAK,aAAa,oBAAoB,QAElD,KAAK,gBAGP,MAAO,eAAc,IAAI,mBACvB,IAAQ,IAAK,OAAQ,mBAAsB,mBAAmB,GAC9D,MAAO,eAAc,iBAAiB,aAAc,OAAQ,mBAAoB,OAIpF,sBACE,MAAO,IAAI,+BAA8B,KAAM,KAAK,uCAvDxD,aA6DU,kCACK,OACX,iBAAqB,KAAM,MAAK,WAChC,GAAI,CAAC,aACH,OAGF,IAAQ,IAAK,OAAQ,mBAAsB,KAAM,mCAC/C,aACA,KAAK,MACL,MAAU,KAAK,aAAa,oBAAoB,MAChD,KAAK,gBAGP,MAAO,eAAc,iBAAiB,aAAc,OAAQ,mBAAoB,KAGlF,sBACE,MAAO,IAAI,kCAAiC,KAAM,KAAK,qDA/E3D,aAqFU,4BACR,sBACE,MAAO,IAAI,gDAA+C,KAAM,KAAK,OAGvE,sBACE,MAAO,IAAI,+BAA8B,KAAM,KAAK,wDA3FxD,aAiGU,+BACR,sBACE,MAAO,IAAI,mDAAkD,KAAM,KAAK,OAG1E,qBACE,MAAO,IAAI,iCAAgC,KAAM,KAAK,SCvG1D,4CAiB4E,gBAC1E,+BAME,QAJU,2BAEA,kDAtBd,aA8BU,qCACK,OACX,kBAAsB,KAAM,MAAK,uBAEb,KAAM,kCACxB,cACA,KAAK,MACL,OAAW,QAAQ,IAAI,MAAM,IAAI,MAAU,KAAK,mBAAmB,sBAAsB,QACzF,KACA,cAAkB,aAAa,UAAU,MAAM,KAAM,CAAE,iBAAkB,MAG3E,MAAO,aAAY,IAAI,gBAAmB,yBAAkC,cAAc,GAAI,aAGhG,sBACE,MAAO,IAAI,gDAA+C,KAAM,KAAK,OAGvE,mBACE,MAAO,IAAI,6CAA4C,KAAM,KAAK,yCAlDtE,aAwDU,qCACK,OACX,iBAAqB,KAAM,MAAK,WAChC,GAAI,CAAC,aACH,OAEF,eAAmB,KAAM,mCACvB,aACA,KAAK,MACL,MAAU,KAAK,mBAAmB,sBAAsB,MACxD,KAEA,eAAkB,cAAa,UAAU,MAAM,KAAM,CAAE,iBAAkB,MAG3E,MAAO,0BAAyB,aAAc,YAGhD,sBACE,MAAO,IAAI,mDAAkD,KAAM,KAAK,OAG1E,mBACE,MAAO,IAAI,gDAA+C,KAAM,KAAK,SC/EzE,yCAqByE,gBACvE,kDAQE,QANU,2BAEA,kBAEA,8CAKE,eACZ,MAAO,MAAK,mBACR,KAAK,sBACL,KAAK,+CApCb,aA0CU,kCACK,OACX,kBAAsB,KAAM,MAAK,sBACd,cAAc,IAAI,KAAS,IAAI,iBAEI,KAAK,gBAAoB,QAC3E,KAAM,oBAAmB,KAAK,MAAO,YACrC,KAAM,cAAa,KAAK,MAAO,gCAEP,KAAM,SAAQ,IAAI,MAAM,IAClD,MAAU,KAAK,YAAY,gBAAgB,QAG7C,aAAM,QAAQ,GAAO,YAAgB,SAAU,EAAE,WAE1C,cAAc,IAAI,kBAAqB,wBAAiC,aAAc,oBAAoB,KAGnH,sBACE,MAAO,IAAI,gDAA+C,KAAM,KAAK,OAGvE,mBACE,MAAO,IAAI,6CAA4C,KAAM,KAAK,OAGpE,sBACE,MAAO,IAAI,+BAA8B,KAAM,KAAK,uCArExD,aA2EU,kCACK,OACX,iBAAqB,KAAM,MAAK,WAChC,GAAI,CAAC,aACH,OAGF,IAAQ,WAAc,mBACgC,KAAK,gBAAoB,QAC3E,KAAM,oBAAmB,KAAK,MAAO,CAAC,YACtC,KAAM,cAAa,KAAK,MAAO,CAAC,sBAElB,KAAM,MAAK,YAAY,gBAAgB,MAAM,IAE/D,aAAM,QAAQ,GAAO,YAAgB,SAAU,EAAE,WAE1C,wBAAiC,aAAc,WAGxD,sBACE,MAAO,IAAI,mDAAkD,KAAM,KAAK,OAG1E,mBACE,MAAO,IAAI,gDAA+C,KAAM,KAAK,OAGvE,qBACE,MAAO,IAAI,iCAAgC,KAAM,KAAK,SCvG1D,iCAckD,gBAChD,2BAI4C,GAAI,wBAE9C,QAJU,kBAEA,0CAnBd,aAyBwC,0BACzB,OACX,IAAQ,aAAO,SAAY,2BAGG,kBAAmB,yBAE7C,QAAsB,KAAK,iBAAiB,YAAY,OAAO,SAG/D,kBAAmB,uBAEf,QAAsB,KAAK,eAAe,YAAY,OAAO,SAE7D,kBAAmB,mBAEf,QAAsB,KAAK,WAAW,YAAY,OAAO,SACzD,KAIZ,GAAI,CAAC,sBACH,KAAM,IAAI,OAAM,uIAGlB,MAAO,uBAAsB,QAGvB,iCAEN,MAAO,IAAI,SAAiC,gBAC1C,eAAmB,KAAM,MAAK,MAC9B,QAAQ,WAAW,IAAI,WAAe,wBAAwB,GAAI,eAItE,qCAAgD,IAC9C,MAAO,IAAI,4BACT,KAAK,iCACL,KAAK,MACL,oBAIJ,sBACE,MAAO,IAAI,+BACT,KAAK,iCACL,KAAK,OAIT,mBACE,MAAO,IAAI,4BACT,KAAK,iCACL,KAAK,8BA/EX,aAoF0C,0BAC3B,OACX,mBAAuB,KAAM,IAAI,oBAAmB,KAAK,MAAO,KAAK,uCACjC,eAAe,GACnD,sBAAe,QAAQ,gBACrB,AAAI,cAAc,MAAQ,8BAA8B,OACtD,+BAAgC,iBAG7B,8BAGD,gCAEN,MAAO,IAAI,SAA2C,gBACpD,cAAkB,KAAM,MAAK,MAC7B,QAAQ,UAAY,wBAA4B,GAAI,WAAa,UAIrE,qCAAgD,IAC9C,MAAO,IAAI,+BACT,KAAK,gCACL,KAAK,MACL,oBAIJ,sBACE,MAAO,IAAI,kCACT,KAAK,gCACL,KAAK,OAIT,mBACE,MAAO,IAAI,+BACT,KAAK,gCACL,KAAK,SCrHJ,0BACL,eACgC,GAAI,wBAEpC,MAAO,IAAI,sBAAqB,OAAO,SAGlC,uCAE2B,GAAI,wBAEpC,MAAO,IAAI,oBAAmB,OAAO,SCRvC,sCACE,sBAGA,MAAO,gBAAe,OAAO,GAAI,uBAAsB,cAAgB,CAAE,eAAkB,KACxF,oBACA,sBAGL,uDAEsC,IAEpC,MAAO,gBAAe,OAAO,GAAI,mBAAkB,gBAChD,oBACA,sBAGE,aAAiB,uBC1BjB,2BAA2B,WAChC,GAAI,KAAK,SAAW,KAAK,OACvB,KAAM,IAAI,OAAM,kDAElB,UAAc,MAAM,KAAK,YACX,MAAM,KAAK,MAEzB,MAAO,MAAK,KACV,MACG,IAAI,SAAY,IAAM,MAAM,IAC5B,OAAO,YAAe,IAAM,KAAK,IAAI,KAAM,GAAI,ICVtD,IAAA,kBAUE,qCAE8B,IAE5B,KAAK,mBAAqB,kBAE1B,eAAmB,MAAM,QAAQ,QAAU,OAAS,CAAC,QAErD,GAAI,CAAC,WAAW,OACd,KAAM,IAAI,OAAM,2DAGlB,WAAY,oBACc,IAAM,UAAU,WAE1C,KAAK,oBAAsB,WAAW,IAAI,OACxC,GAAI,eAAgB,wBAClB,MAAO,MAGT,GAAI,eAAgB,cAClB,MAAO,IAAI,wBAAuB,oBAAqB,CAAC,OAG1D,GAAI,KAAK,YAAc,KAAK,qBAAsB,cAChD,MAAO,IAAI,wBAAuB,oBAAqB,CAAC,KAAK,aAG/D,KAAM,IAAI,OAAM,4MAIT,sBAAiD,MAAO,MAAK,uBAE7D,qBAA8B,MAAO,MAAK,mBAE9C,iDACL,MAAO,aACJ,IAAI,GAAO,kBAAkB,EAAG,kBAChC,OAAO,SAAY,GAAK,GAAI,GACxB,aAAY,QAAU,GAGxB,iCACL,MAAO,MAAK,mBACT,IAAI,EAAG,YAAa,SAAY,GAAI,WACnC,MACA,KAAK,oBAAoB,gBAAiB,eAE3C,OAAO,aAAiB,KAAK,SAAW,KAAK,SAAW,KAAO,MAG7D,+BACL,cAAkB,KAAK,gBAAgB,iBACvC,MAAO,WAAU,SAAW,KAAK,kBAC7B,UACA,GAAI,WAAU,UAAW,UAAU,UAGlC,SACL,MAAO,CACL,kBAAmB,KAAK,kBACxB,mBAAoB,KAAK,mBAAmB,IAAI,IAAQ,GAAG,iBAIjD,kBACZ,uBAA2B,OAAK,mBAC7B,IAAI,IAAa,uBAAuB,SAAS,KACpD,MAAO,IAAI,aAAY,mBAAoB,OAAK,qBC1E7C,gCAAgC,SACrC,QAAY,GAAI,kBAChB,WAAI,eAAe,SACZ,ICFF,uBAA0B,oBAE/B,IAAQ,MAAO,QAAW,GAAI,YAAW,WAAW,MAAO,WAAW,QAEtE,GAAI,OAAS,GAAK,QAAU,EAC1B,KAAM,IAAI,OAAM,uCAAuC,KAAK,UAAU,CAAE,MAAO,YAGjF,GAAI,MAAM,QAAQ,SAEhB,MAAQ,SAAuB,IAAI,KAAO,cAAc,IAAK,CAAE,MAAO,UAGxE,GAAI,oBAAoB,UACtB,qBAAyB,QAAQ,UAAU,QAAQ,MAAO,yBACjC,QAAQ,mBAAmB,QAAQ,iBAAiB,IAAI,MAAO,iBAAiB,IAAI,QAC7G,MAAO,yBAAwB,wBAAwB,QAAS,kBAAmB,kBAGrF,MAAI,qBAAoB,SACf,wBAAwB,QAAS,QAAQ,UAAU,QAAQ,MAAO,SAGvE,kBAAmB,gBAAiB,kBAAmB,eACjD,QAAgB,QAAQ,MAAO,QAGlC,QlJTT,IAAM,KAAQ,MAAO,UAAY,oBAEhB,MAAO,YAAc,aAAiB,MAAO,WAAU,WAAc,qBAC/D,CAAE,QAAa,SAAmB,KAAM", "names": [] } diff --git a/dist/face-api.json b/dist/face-api.json index 3174671..79f22d7 100644 --- a/dist/face-api.json +++ b/dist/face-api.json @@ -17,7 +17,7 @@ ] }, "src/utils/index.ts": { - "bytes": 1845, + "bytes": 1842, "imports": [ { "path": "dist/tfjs.esm.js" @@ -93,7 +93,7 @@ ] }, "src/ops/normalize.ts": { - "bytes": 486, + "bytes": 483, "imports": [ { "path": "dist/tfjs.esm.js" @@ -101,7 +101,7 @@ ] }, "src/ops/padToSquare.ts": { - "bytes": 1687, + "bytes": 1684, "imports": [ { "path": "dist/tfjs.esm.js" @@ -451,7 +451,7 @@ ] }, "src/dom/imageTensorToCanvas.ts": { - "bytes": 618, + "bytes": 615, "imports": [ { "path": "dist/tfjs.esm.js" @@ -490,7 +490,7 @@ ] }, "src/dom/NetInput.ts": { - "bytes": 5511, + "bytes": 5508, "imports": [ { "path": "dist/tfjs.esm.js" @@ -556,7 +556,7 @@ ] }, "src/dom/extractFaceTensors.ts": { - "bytes": 1733, + "bytes": 1730, "imports": [ { "path": "dist/tfjs.esm.js" @@ -609,7 +609,7 @@ "imports": [] }, "src/dom/loadWeightMap.ts": { - "bytes": 555, + "bytes": 552, "imports": [ { "path": "dist/tfjs.esm.js" @@ -631,7 +631,7 @@ ] }, "src/dom/types.ts": { - "bytes": 386, + "bytes": 383, "imports": [] }, "src/dom/index.ts": { @@ -703,7 +703,7 @@ ] }, "src/NeuralNetwork.ts": { - "bytes": 5113, + "bytes": 5110, "imports": [ { "path": "dist/tfjs.esm.js" @@ -720,7 +720,7 @@ ] }, "src/common/depthwiseSeparableConv.ts": { - "bytes": 417, + "bytes": 414, "imports": [ { "path": "dist/tfjs.esm.js" @@ -728,7 +728,7 @@ ] }, "src/faceFeatureExtractor/denseBlock.ts": { - "bytes": 2041, + "bytes": 2038, "imports": [ { "path": "dist/tfjs.esm.js" @@ -739,7 +739,7 @@ ] }, "src/common/convLayer.ts": { - "bytes": 431, + "bytes": 428, "imports": [ { "path": "dist/tfjs.esm.js" @@ -751,7 +751,7 @@ "imports": [] }, "src/common/extractConvParamsFactory.ts": { - "bytes": 769, + "bytes": 766, "imports": [ { "path": "dist/tfjs.esm.js" @@ -759,7 +759,7 @@ ] }, "src/common/extractFCParamsFactory.ts": { - "bytes": 714, + "bytes": 711, "imports": [ { "path": "dist/tfjs.esm.js" @@ -767,11 +767,11 @@ ] }, "src/common/types.ts": { - "bytes": 800, + "bytes": 797, "imports": [] }, "src/common/extractSeparableConvParamsFactory.ts": { - "bytes": 1536, + "bytes": 1533, "imports": [ { "path": "dist/tfjs.esm.js" @@ -848,7 +848,7 @@ ] }, "src/common/loadConvParamsFactory.ts": { - "bytes": 469, + "bytes": 466, "imports": [] }, "src/faceFeatureExtractor/loadParamsFactory.ts": { @@ -863,7 +863,7 @@ ] }, "src/faceFeatureExtractor/extractParamsFromWeigthMap.ts": { - "bytes": 841, + "bytes": 838, "imports": [ { "path": "src/common/index.ts" @@ -874,7 +874,7 @@ ] }, "src/faceFeatureExtractor/FaceFeatureExtractor.ts": { - "bytes": 1809, + "bytes": 1806, "imports": [ { "path": "dist/tfjs.esm.js" @@ -900,7 +900,7 @@ ] }, "src/common/fullyConnectedLayer.ts": { - "bytes": 266, + "bytes": 263, "imports": [ { "path": "dist/tfjs.esm.js" @@ -916,7 +916,7 @@ ] }, "src/faceProcessor/extractParamsFromWeigthMap.ts": { - "bytes": 826, + "bytes": 823, "imports": [ { "path": "src/common/index.ts" @@ -924,11 +924,11 @@ ] }, "src/faceProcessor/util.ts": { - "bytes": 424, + "bytes": 421, "imports": [] }, "src/faceProcessor/FaceProcessor.ts": { - "bytes": 3037, + "bytes": 3034, "imports": [ { "path": "dist/tfjs.esm.js" @@ -958,7 +958,7 @@ "imports": [] }, "src/faceExpressionNet/FaceExpressionNet.ts": { - "bytes": 1667, + "bytes": 1664, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1092,7 +1092,7 @@ ] }, "src/xception/extractParamsFromWeigthMap.ts": { - "bytes": 3133, + "bytes": 3130, "imports": [ { "path": "src/common/index.ts" @@ -1106,7 +1106,7 @@ ] }, "src/xception/TinyXception.ts": { - "bytes": 3151, + "bytes": 3148, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1143,7 +1143,7 @@ ] }, "src/ageGenderNet/extractParamsFromWeigthMap.ts": { - "bytes": 894, + "bytes": 891, "imports": [ { "path": "src/common/index.ts" @@ -1151,11 +1151,11 @@ ] }, "src/ageGenderNet/types.ts": { - "bytes": 528, + "bytes": 525, "imports": [] }, "src/ageGenderNet/AgeGenderNet.ts": { - "bytes": 4272, + "bytes": 4269, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1198,7 +1198,7 @@ ] }, "src/faceLandmarkNet/FaceLandmark68NetBase.ts": { - "bytes": 3720, + "bytes": 3717, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1232,7 +1232,7 @@ ] }, "src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts": { - "bytes": 805, + "bytes": 802, "imports": [ { "path": "src/common/index.ts" @@ -1254,7 +1254,7 @@ ] }, "src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts": { - "bytes": 1819, + "bytes": 1816, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1305,7 +1305,7 @@ ] }, "src/faceRecognitionNet/scaleLayer.ts": { - "bytes": 232, + "bytes": 229, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1313,7 +1313,7 @@ ] }, "src/faceRecognitionNet/convLayer.ts": { - "bytes": 853, + "bytes": 850, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1324,7 +1324,7 @@ ] }, "src/faceRecognitionNet/extractParams.ts": { - "bytes": 4910, + "bytes": 4907, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1338,7 +1338,7 @@ ] }, "src/faceRecognitionNet/extractParamsFromWeigthMap.ts": { - "bytes": 3104, + "bytes": 3101, "imports": [ { "path": "src/common/index.ts" @@ -1349,7 +1349,7 @@ ] }, "src/faceRecognitionNet/residualLayer.ts": { - "bytes": 1345, + "bytes": 1342, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1360,7 +1360,7 @@ ] }, "src/faceRecognitionNet/FaceRecognitionNet.ts": { - "bytes": 2984, + "bytes": 2981, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1442,7 +1442,7 @@ ] }, "src/ssdMobilenetv1/extractParams.ts": { - "bytes": 8342, + "bytes": 8339, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1453,7 +1453,7 @@ ] }, "src/ssdMobilenetv1/extractParamsFromWeigthMap.ts": { - "bytes": 5785, + "bytes": 5782, "imports": [ { "path": "src/common/index.ts" @@ -1464,7 +1464,7 @@ ] }, "src/ssdMobilenetv1/pointwiseConvLayer.ts": { - "bytes": 394, + "bytes": 391, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1472,7 +1472,7 @@ ] }, "src/ssdMobilenetv1/mobileNetV1.ts": { - "bytes": 1814, + "bytes": 1811, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1483,11 +1483,11 @@ ] }, "src/ssdMobilenetv1/nonMaxSuppression.ts": { - "bytes": 2190, + "bytes": 2187, "imports": [] }, "src/ssdMobilenetv1/outputLayer.ts": { - "bytes": 2190, + "bytes": 2187, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1495,7 +1495,7 @@ ] }, "src/ssdMobilenetv1/boxPredictionLayer.ts": { - "bytes": 620, + "bytes": 617, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1506,7 +1506,7 @@ ] }, "src/ssdMobilenetv1/predictionLayer.ts": { - "bytes": 2058, + "bytes": 2055, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1524,7 +1524,7 @@ "imports": [] }, "src/ssdMobilenetv1/SsdMobilenetv1.ts": { - "bytes": 3829, + "bytes": 3826, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1591,7 +1591,7 @@ "imports": [] }, "src/tinyYolov2/leaky.ts": { - "bytes": 274, + "bytes": 271, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1599,7 +1599,7 @@ ] }, "src/tinyYolov2/convWithBatchNorm.ts": { - "bytes": 535, + "bytes": 532, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1610,7 +1610,7 @@ ] }, "src/tinyYolov2/depthwiseSeparableConv.ts": { - "bytes": 505, + "bytes": 502, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1621,7 +1621,7 @@ ] }, "src/tinyYolov2/extractParams.ts": { - "bytes": 3921, + "bytes": 3918, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1638,7 +1638,7 @@ ] }, "src/tinyYolov2/extractParamsFromWeigthMap.ts": { - "bytes": 3287, + "bytes": 3284, "imports": [ { "path": "src/common/disposeUnusedWeightTensors.ts" @@ -1656,7 +1656,7 @@ "imports": [] }, "src/tinyYolov2/TinyYolov2Base.ts": { - "bytes": 9703, + "bytes": 9700, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1709,7 +1709,7 @@ ] }, "src/tinyYolov2/TinyYolov2.ts": { - "bytes": 1804, + "bytes": 1801, "imports": [ { "path": "src/classes/index.ts" @@ -1723,7 +1723,7 @@ ] }, "src/tinyYolov2/types.ts": { - "bytes": 955, + "bytes": 952, "imports": [] }, "src/tinyYolov2/index.ts": { @@ -1756,7 +1756,7 @@ "imports": [] }, "src/globalApi/extractFacesAndComputeResults.ts": { - "bytes": 2040, + "bytes": 2037, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1778,7 +1778,7 @@ ] }, "src/tinyFaceDetector/TinyFaceDetector.ts": { - "bytes": 1473, + "bytes": 1470, "imports": [ { "path": "src/classes/index.ts" @@ -1821,7 +1821,7 @@ ] }, "src/globalApi/PredictFaceExpressionsTask.ts": { - "bytes": 3830, + "bytes": 3827, "imports": [ { "path": "src/factories/WithFaceExpressions.ts" @@ -1844,7 +1844,7 @@ ] }, "src/globalApi/PredictAgeAndGenderTask.ts": { - "bytes": 4011, + "bytes": 4008, "imports": [ { "path": "src/factories/WithAge.ts" @@ -1893,7 +1893,7 @@ ] }, "src/globalApi/DetectFaceLandmarksTasks.ts": { - "bytes": 4005, + "bytes": 4002, "imports": [ { "path": "dist/tfjs.esm.js" @@ -2067,7 +2067,7 @@ ] }, "src/index.ts": { - "bytes": 1027, + "bytes": 1024, "imports": [ { "path": "dist/tfjs.esm.js" @@ -2136,7 +2136,7 @@ "dist/face-api.js.map": { "imports": [], "inputs": {}, - "bytes": 1350466 + "bytes": 1350289 }, "dist/face-api.js": { "imports": [], diff --git a/dist/face-api.node-gpu.js.map b/dist/face-api.node-gpu.js.map index 013b056..d0d9587 100644 --- a/dist/face-api.node-gpu.js.map +++ b/dist/face-api.node-gpu.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../src/tfjs/tf-node-gpu.js", "../src/env/isNodejs.ts", "../src/index.ts", "../src/draw/index.ts", "../src/draw/drawContour.ts", "../src/utils/index.ts", "../src/classes/Dimensions.ts", "../src/classes/Point.ts", "../src/classes/Box.ts", "../src/classes/BoundingBox.ts", "../src/classes/ObjectDetection.ts", "../src/classes/FaceDetection.ts", "../src/ops/iou.ts", "../src/ops/minBbox.ts", "../src/ops/nonMaxSuppression.ts", "../src/ops/normalize.ts", "../src/ops/padToSquare.ts", "../src/ops/shuffleArray.ts", "../src/ops/index.ts", "../src/classes/Rect.ts", "../src/classes/FaceLandmarks.ts", "../src/classes/FaceLandmarks5.ts", "../src/classes/FaceLandmarks68.ts", "../src/classes/FaceMatch.ts", "../src/classes/LabeledBox.ts", "../src/classes/LabeledFaceDescriptors.ts", "../src/classes/PredictedBox.ts", "../src/factories/WithFaceDetection.ts", "../src/env/createBrowserEnv.ts", "../src/env/createFileSystem.ts", "../src/env/createNodejsEnv.ts", "../src/env/isBrowser.ts", "../src/env/index.ts", "../src/dom/resolveInput.ts", "../src/dom/getContext2dOrThrow.ts", "../src/draw/DrawTextField.ts", "../src/draw/DrawBox.ts", "../src/draw/drawDetections.ts", "../src/faceExpressionNet/FaceExpressionNet.ts", "../src/dom/isMediaLoaded.ts", "../src/dom/awaitMediaLoaded.ts", "../src/dom/bufferToImage.ts", "../src/dom/getMediaDimensions.ts", "../src/dom/createCanvas.ts", "../src/dom/imageTensorToCanvas.ts", "../src/dom/isMediaElement.ts", "../src/dom/NetInput.ts", "../src/dom/imageToSquare.ts", "../src/dom/toNetInput.ts", "../src/dom/extractFaces.ts", "../src/dom/extractFaceTensors.ts", "../src/dom/fetchOrThrow.ts", "../src/dom/fetchImage.ts", "../src/dom/fetchJson.ts", "../src/dom/fetchNetWeights.ts", "../src/dom/loadWeightMap.ts", "../src/common/getModelUris.ts", "../src/dom/matchDimensions.ts", "../src/faceFeatureExtractor/FaceFeatureExtractor.ts", "../src/NeuralNetwork.ts", "../src/faceFeatureExtractor/denseBlock.ts", "../src/common/depthwiseSeparableConv.ts", "../src/common/convLayer.ts", "../src/common/disposeUnusedWeightTensors.ts", "../src/common/extractConvParamsFactory.ts", "../src/common/extractFCParamsFactory.ts", "../src/common/extractSeparableConvParamsFactory.ts", "../src/common/types.ts", "../src/common/extractWeightEntryFactory.ts", "../src/common/extractWeightsFactory.ts", "../src/faceFeatureExtractor/extractorsFactory.ts", "../src/faceFeatureExtractor/extractParams.ts", "../src/common/loadConvParamsFactory.ts", "../src/faceFeatureExtractor/loadParamsFactory.ts", "../src/faceFeatureExtractor/extractParamsFromWeigthMap.ts", "../src/faceProcessor/FaceProcessor.ts", "../src/common/fullyConnectedLayer.ts", "../src/faceProcessor/extractParams.ts", "../src/faceProcessor/extractParamsFromWeigthMap.ts", "../src/faceProcessor/util.ts", "../src/faceExpressionNet/FaceExpressions.ts", "../src/factories/WithFaceExpressions.ts", "../src/draw/drawFaceExpressions.ts", "../src/factories/WithFaceLandmarks.ts", "../src/draw/DrawFaceLandmarks.ts", "../src/ageGenderNet/AgeGenderNet.ts", "../src/xception/TinyXception.ts", "../src/xception/extractParams.ts", "../src/xception/extractParamsFromWeigthMap.ts", "../src/ageGenderNet/extractParams.ts", "../src/ageGenderNet/extractParamsFromWeigthMap.ts", "../src/ageGenderNet/types.ts", "../src/faceLandmarkNet/FaceLandmark68NetBase.ts", "../src/faceLandmarkNet/FaceLandmark68Net.ts", "../src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts", "../src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts", "../src/faceFeatureExtractor/extractParamsTiny.ts", "../src/faceLandmarkNet/FaceLandmark68TinyNet.ts", "../src/faceLandmarkNet/index.ts", "../src/faceRecognitionNet/FaceRecognitionNet.ts", "../src/faceRecognitionNet/convLayer.ts", "../src/faceRecognitionNet/scaleLayer.ts", "../src/faceRecognitionNet/extractParams.ts", "../src/faceRecognitionNet/extractParamsFromWeigthMap.ts", "../src/faceRecognitionNet/residualLayer.ts", "../src/faceRecognitionNet/index.ts", "../src/factories/WithFaceDescriptor.ts", "../src/factories/WithAge.ts", "../src/factories/WithGender.ts", "../src/ssdMobilenetv1/SsdMobilenetv1.ts", "../src/ssdMobilenetv1/extractParams.ts", "../src/ssdMobilenetv1/extractParamsFromWeigthMap.ts", "../src/ssdMobilenetv1/mobileNetV1.ts", "../src/ssdMobilenetv1/pointwiseConvLayer.ts", "../src/ssdMobilenetv1/nonMaxSuppression.ts", "../src/ssdMobilenetv1/outputLayer.ts", "../src/ssdMobilenetv1/predictionLayer.ts", "../src/ssdMobilenetv1/boxPredictionLayer.ts", "../src/ssdMobilenetv1/SsdMobilenetv1Options.ts", "../src/ssdMobilenetv1/index.ts", "../src/tinyYolov2/const.ts", "../src/tinyYolov2/TinyYolov2Base.ts", "../src/tinyYolov2/config.ts", "../src/tinyYolov2/convWithBatchNorm.ts", "../src/tinyYolov2/leaky.ts", "../src/tinyYolov2/depthwiseSeparableConv.ts", "../src/tinyYolov2/extractParams.ts", "../src/tinyYolov2/extractParamsFromWeigthMap.ts", "../src/tinyYolov2/TinyYolov2Options.ts", "../src/tinyYolov2/TinyYolov2.ts", "../src/tinyYolov2/index.ts", "../src/tinyFaceDetector/TinyFaceDetectorOptions.ts", "../src/globalApi/ComposableTask.ts", "../src/globalApi/DetectFaceLandmarksTasks.ts", "../src/globalApi/extractFacesAndComputeResults.ts", "../src/tinyFaceDetector/const.ts", "../src/tinyFaceDetector/TinyFaceDetector.ts", "../src/globalApi/nets.ts", "../src/globalApi/PredictFaceExpressionsTask.ts", "../src/globalApi/PredictAgeAndGenderTask.ts", "../src/globalApi/ComputeFaceDescriptorsTasks.ts", "../src/globalApi/DetectFacesTasks.ts", "../src/globalApi/detectFaces.ts", "../src/globalApi/allFaces.ts", "../src/euclideanDistance.ts", "../src/globalApi/FaceMatcher.ts", "../src/tinyFaceDetector/index.ts", "../src/resizeResults.ts"], - "sourcesContent": ["/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable node/no-unpublished-import */\n\nexport * from '@tensorflow/tfjs-node-gpu';\n", "export function isNodejs(): boolean {\n return typeof global === 'object'\n && typeof require === 'function'\n && typeof module !== 'undefined'\n // issues with gatsby.js: module.exports is undefined\n // && !!module.exports\n && typeof process !== 'undefined' && !!process.version;\n}\n", "import * as tf from '../dist/tfjs.esm.js';\nimport * as draw from './draw/index';\nimport * as utils from './utils/index';\nimport * as pkg from '../package.json';\n\nexport { tf, draw, utils };\n\nexport * from './ageGenderNet/index';\nexport * from './classes/index';\nexport * from './dom/index';\nexport * from './env/index';\nexport * from './faceExpressionNet/index';\nexport * from './faceLandmarkNet/index';\nexport * from './faceRecognitionNet/index';\nexport * from './factories/index';\nexport * from './globalApi/index';\nexport * from './ops/index';\nexport * from './ssdMobilenetv1/index';\nexport * from './tinyFaceDetector/index';\nexport * from './tinyYolov2/index';\nexport * from './euclideanDistance';\nexport * from './NeuralNetwork';\nexport * from './resizeResults';\n\nconst node = (typeof process !== 'undefined');\n// eslint-disable-next-line no-undef\nconst browser = (typeof navigator !== 'undefined') && (typeof navigator.userAgent !== 'undefined');\nexport const version = { faceapi: pkg.version as string, node, browser };\n", "export * from './drawContour';\nexport * from './drawDetections';\nexport * from './drawFaceExpressions';\nexport * from './DrawBox';\nexport * from './DrawFaceLandmarks';\nexport * from './DrawTextField';\n", "import { Point } from '../classes/index';\n\nexport function drawContour(\n ctx: CanvasRenderingContext2D,\n points: Point[],\n isClosed: boolean = false,\n) {\n ctx.beginPath();\n\n points.slice(1).forEach(({ x, y }, prevIdx) => {\n const from = points[prevIdx];\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(x, y);\n });\n\n if (isClosed) {\n const from = points[points.length - 1];\n const to = points[0];\n if (!from || !to) {\n return;\n }\n\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n }\n\n ctx.stroke();\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Point } from '../classes/index';\nimport { Dimensions, IDimensions } from '../classes/Dimensions';\n\nexport function isTensor(tensor: any, dim: number) {\n return tensor instanceof tf.Tensor && tensor.shape.length === dim;\n}\n\nexport function isTensor1D(tensor: any): tensor is tf.Tensor1D {\n return isTensor(tensor, 1);\n}\n\nexport function isTensor2D(tensor: any): tensor is tf.Tensor2D {\n return isTensor(tensor, 2);\n}\n\nexport function isTensor3D(tensor: any): tensor is tf.Tensor3D {\n return isTensor(tensor, 3);\n}\n\nexport function isTensor4D(tensor: any): tensor is tf.Tensor4D {\n return isTensor(tensor, 4);\n}\n\nexport function isFloat(num: number) {\n return num % 1 !== 0;\n}\n\nexport function isEven(num: number) {\n return num % 2 === 0;\n}\n\nexport function round(num: number, prec: number = 2) {\n const f = 10 ** prec;\n return Math.floor(num * f) / f;\n}\n\nexport function isDimensions(obj: any): boolean {\n return obj && obj.width && obj.height;\n}\n\nexport function computeReshapedDimensions({ width, height }: IDimensions, inputSize: number) {\n const scale = inputSize / Math.max(height, width);\n return new Dimensions(Math.round(width * scale), Math.round(height * scale));\n}\n\nexport function getCenterPoint(pts: Point[]): Point {\n return pts.reduce((sum, pt) => sum.add(pt), new Point(0, 0))\n .div(new Point(pts.length, pts.length));\n}\n\nexport function range(num: number, start: number, step: number): number[] {\n return Array(num).fill(0).map((_, i) => start + (i * step));\n}\n\nexport function isValidNumber(num: any) {\n // eslint-disable-next-line no-mixed-operators\n return !!num && (num !== Infinity) && (num !== -Infinity) && !Number.isNaN(num) || num === 0;\n}\n\nexport function isValidProbablitiy(num: any) {\n return isValidNumber(num) && num >= 0 && num <= 1.0;\n}\n", "import { isValidNumber } from '../utils/index';\n\nexport interface IDimensions {\n width: number\n height: number\n}\n\nexport class Dimensions implements IDimensions {\n private _width: number\n\n private _height: number\n\n constructor(width: number, height: number) {\n if (!isValidNumber(width) || !isValidNumber(height)) {\n throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({ width, height })}`);\n }\n\n this._width = width;\n this._height = height;\n }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public reverse(): Dimensions {\n return new Dimensions(1 / this.width, 1 / this.height);\n }\n}\n", "export interface IPoint {\n x: number\n y: number\n}\n\nexport class Point implements IPoint {\n private _x: number\n\n private _y: number\n\n constructor(x: number, y: number) {\n this._x = x;\n this._y = y;\n }\n\n get x(): number { return this._x; }\n\n get y(): number { return this._y; }\n\n public add(pt: IPoint): Point {\n return new Point(this.x + pt.x, this.y + pt.y);\n }\n\n public sub(pt: IPoint): Point {\n return new Point(this.x - pt.x, this.y - pt.y);\n }\n\n public mul(pt: IPoint): Point {\n return new Point(this.x * pt.x, this.y * pt.y);\n }\n\n public div(pt: IPoint): Point {\n return new Point(this.x / pt.x, this.y / pt.y);\n }\n\n public abs(): Point {\n return new Point(Math.abs(this.x), Math.abs(this.y));\n }\n\n public magnitude(): number {\n return Math.sqrt((this.x ** 2) + (this.y ** 2));\n }\n\n public floor(): Point {\n return new Point(Math.floor(this.x), Math.floor(this.y));\n }\n}\n", "import { isDimensions, isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { IDimensions } from './Dimensions';\nimport { Point } from './Point';\nimport { IRect } from './Rect';\n\nexport class Box implements IBoundingBox, IRect {\n public static isRect(rect: any): boolean {\n return !!rect && [rect.x, rect.y, rect.width, rect.height].every(isValidNumber);\n }\n\n public static assertIsValidBox(box: any, callee: string, allowNegativeDimensions: boolean = false) {\n if (!Box.isRect(box)) {\n throw new Error(`${callee} - invalid box: ${JSON.stringify(box)}, expected object with properties x, y, width, height`);\n }\n\n if (!allowNegativeDimensions && (box.width < 0 || box.height < 0)) {\n throw new Error(`${callee} - width (${box.width}) and height (${box.height}) must be positive numbers`);\n }\n }\n\n private _x: number\n\n private _y: number\n\n private _width: number\n\n private _height: number\n\n constructor(_box: IBoundingBox | IRect, allowNegativeDimensions: boolean = true) {\n const box = (_box || {}) as any;\n\n const isBbox = [box.left, box.top, box.right, box.bottom].every(isValidNumber);\n const isRect = [box.x, box.y, box.width, box.height].every(isValidNumber);\n\n if (!isRect && !isBbox) {\n throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(box)}`);\n }\n\n const [x, y, width, height] = isRect\n ? [box.x, box.y, box.width, box.height]\n : [box.left, box.top, box.right - box.left, box.bottom - box.top];\n\n Box.assertIsValidBox({\n x, y, width, height,\n }, 'Box.constructor', allowNegativeDimensions);\n\n this._x = x;\n this._y = y;\n this._width = width;\n this._height = height;\n }\n\n public get x(): number { return this._x; }\n\n public get y(): number { return this._y; }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public get left(): number { return this.x; }\n\n public get top(): number { return this.y; }\n\n public get right(): number { return this.x + this.width; }\n\n public get bottom(): number { return this.y + this.height; }\n\n public get area(): number { return this.width * this.height; }\n\n public get topLeft(): Point { return new Point(this.left, this.top); }\n\n public get topRight(): Point { return new Point(this.right, this.top); }\n\n public get bottomLeft(): Point { return new Point(this.left, this.bottom); }\n\n public get bottomRight(): Point { return new Point(this.right, this.bottom); }\n\n public round(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.round(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public floor(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.floor(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public toSquare(): Box {\n let {\n x, y, width, height,\n } = this;\n const diff = Math.abs(width - height);\n if (width < height) {\n x -= (diff / 2);\n width += diff;\n }\n if (height < width) {\n y -= (diff / 2);\n height += diff;\n }\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public rescale(s: IDimensions | number): Box {\n const scaleX = isDimensions(s) ? (s as IDimensions).width : s as number;\n const scaleY = isDimensions(s) ? (s as IDimensions).height : s as number;\n return new Box({\n x: this.x * scaleX,\n y: this.y * scaleY,\n width: this.width * scaleX,\n height: this.height * scaleY,\n });\n }\n\n public pad(padX: number, padY: number): Box {\n const [x, y, width, height] = [\n this.x - (padX / 2),\n this.y - (padY / 2),\n this.width + padX,\n this.height + padY,\n ];\n return new Box({\n x, y, width, height,\n });\n }\n\n public clipAtImageBorders(imgWidth: number, imgHeight: number): Box {\n const {\n x, y, right, bottom,\n } = this;\n const clippedX = Math.max(x, 0);\n const clippedY = Math.max(y, 0);\n\n const newWidth = right - clippedX;\n const newHeight = bottom - clippedY;\n const clippedWidth = Math.min(newWidth, imgWidth - clippedX);\n const clippedHeight = Math.min(newHeight, imgHeight - clippedY);\n\n return (new Box({\n x: clippedX, y: clippedY, width: clippedWidth, height: clippedHeight,\n })).floor();\n }\n\n public shift(sx: number, sy: number): Box {\n const { width, height } = this;\n const x = this.x + sx;\n const y = this.y + sy;\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public padAtBorders(imageHeight: number, imageWidth: number) {\n const w = this.width + 1;\n const h = this.height + 1;\n\n const dx = 1;\n const dy = 1;\n let edx = w;\n let edy = h;\n\n let x = this.left;\n let y = this.top;\n let ex = this.right;\n let ey = this.bottom;\n\n if (ex > imageWidth) {\n edx = -ex + imageWidth + w;\n ex = imageWidth;\n }\n if (ey > imageHeight) {\n edy = -ey + imageHeight + h;\n ey = imageHeight;\n }\n if (x < 1) {\n edy = 2 - x;\n x = 1;\n }\n if (y < 1) {\n edy = 2 - y;\n y = 1;\n }\n\n return {\n dy, edy, dx, edx, y, ey, x, ex, w, h,\n };\n }\n\n public calibrate(region: Box) {\n return new Box({\n left: this.left + (region.left * this.width),\n top: this.top + (region.top * this.height),\n right: this.right + (region.right * this.width),\n bottom: this.bottom + (region.bottom * this.height),\n }).toSquare().round();\n }\n}\n", "import { Box } from './Box';\n\nexport interface IBoundingBox {\n left: number\n top: number\n right: number\n bottom: number\n}\n\nexport class BoundingBox extends Box implements IBoundingBox {\n constructor(left: number, top: number, right: number, bottom: number, allowNegativeDimensions: boolean = false) {\n super({\n left, top, right, bottom,\n }, allowNegativeDimensions);\n }\n}\n", "import { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { IRect, Rect } from './Rect';\n\nexport class ObjectDetection {\n private _score: number\n\n private _classScore: number\n\n private _className: string\n\n private _box: Rect\n\n private _imageDims: Dimensions\n\n constructor(\n score: number,\n classScore: number,\n className: string,\n relativeBox: IRect,\n imageDims: IDimensions,\n ) {\n this._imageDims = new Dimensions(imageDims.width, imageDims.height);\n this._score = score;\n this._classScore = classScore;\n this._className = className;\n this._box = new Box(relativeBox).rescale(this._imageDims);\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n\n public get className(): string { return this._className; }\n\n public get box(): Box { return this._box; }\n\n public get imageDims(): Dimensions { return this._imageDims; }\n\n public get imageWidth(): number { return this.imageDims.width; }\n\n public get imageHeight(): number { return this.imageDims.height; }\n\n public get relativeBox(): Box { return new Box(this._box).rescale(this.imageDims.reverse()); }\n\n public forSize(width: number, height: number): ObjectDetection {\n return new ObjectDetection(\n this.score,\n this.classScore,\n this.className,\n this.relativeBox,\n { width, height },\n );\n }\n}\n", "import { Box } from './Box';\nimport { IDimensions } from './Dimensions';\nimport { ObjectDetection } from './ObjectDetection';\nimport { Rect } from './Rect';\n\nexport interface IFaceDetecion {\n score: number\n box: Box\n}\n\nexport class FaceDetection extends ObjectDetection implements IFaceDetecion {\n constructor(\n score: number,\n relativeBox: Rect,\n imageDims: IDimensions,\n ) {\n super(score, score, '', relativeBox, imageDims);\n }\n\n public forSize(width: number, height: number): FaceDetection {\n const { score, relativeBox, imageDims } = super.forSize(width, height);\n return new FaceDetection(score, relativeBox, imageDims);\n }\n}\n", "import { Box } from '../classes/Box';\n\nexport function iou(box1: Box, box2: Box, isIOU: boolean = true) {\n const width = Math.max(0.0, Math.min(box1.right, box2.right) - Math.max(box1.left, box2.left));\n const height = Math.max(0.0, Math.min(box1.bottom, box2.bottom) - Math.max(box1.top, box2.top));\n const interSection = width * height;\n\n return isIOU\n ? interSection / (box1.area + box2.area - interSection)\n : interSection / Math.min(box1.area, box2.area);\n}\n", "import { BoundingBox, IPoint } from '../classes/index';\n\nexport function minBbox(pts: IPoint[]): BoundingBox {\n const xs = pts.map((pt) => pt.x);\n const ys = pts.map((pt) => pt.y);\n const minX = xs.reduce((min, x) => (x < min ? x : min), Infinity);\n const minY = ys.reduce((min, y) => (y < min ? y : min), Infinity);\n const maxX = xs.reduce((max, x) => (max < x ? x : max), 0);\n const maxY = ys.reduce((max, y) => (max < y ? y : max), 0);\n\n return new BoundingBox(minX, minY, maxX, maxY);\n}\n", "import { Box } from '../classes/Box';\nimport { iou } from './iou';\n\nexport function nonMaxSuppression(\n boxes: Box[],\n scores: number[],\n iouThreshold: number,\n isIOU: boolean = true,\n): number[] {\n let indicesSortedByScore = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .sort((c1, c2) => c1.score - c2.score)\n .map((c) => c.boxIndex);\n\n const pick: number[] = [];\n\n while (indicesSortedByScore.length > 0) {\n const curr = indicesSortedByScore.pop() as number;\n pick.push(curr);\n\n const indices = indicesSortedByScore;\n\n const outputs: number[] = [];\n for (let i = 0; i < indices.length; i++) {\n const idx = indices[i];\n\n const currBox = boxes[curr];\n const idxBox = boxes[idx];\n\n outputs.push(iou(currBox, idxBox, isIOU));\n }\n\n indicesSortedByScore = indicesSortedByScore.filter(\n (_, j) => outputs[j] <= iouThreshold,\n );\n }\n\n return pick;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nexport function normalize(x: tf.Tensor4D, meanRgb: number[]): tf.Tensor4D {\n return tf.tidy(() => {\n const [r, g, b] = meanRgb;\n const avg_r = tf.fill([...x.shape.slice(0, 3), 1], r, 'float32');\n const avg_g = tf.fill([...x.shape.slice(0, 3), 1], g, 'float32');\n const avg_b = tf.fill([...x.shape.slice(0, 3), 1], b, 'float32');\n const avg_rgb = tf.concat([avg_r, avg_g, avg_b], 3);\n\n return tf.sub(x, avg_rgb);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\n/**\n * Pads the smaller dimension of an image tensor with zeros, such that width === height.\n *\n * @param imgTensor The image tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The padded tensor with width === height.\n */\nexport function padToSquare(\n imgTensor: tf.Tensor4D,\n isCenterImage: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const [height, width] = imgTensor.shape.slice(1);\n if (height === width) {\n return imgTensor;\n }\n\n const dimDiff = Math.abs(height - width);\n const paddingAmount = Math.round(dimDiff * (isCenterImage ? 0.5 : 1));\n const paddingAxis = height > width ? 2 : 1;\n\n const createPaddingTensor = (paddingAmountLocal: number): tf.Tensor => {\n const paddingTensorShape = imgTensor.shape.slice();\n paddingTensorShape[paddingAxis] = paddingAmountLocal;\n return tf.fill(paddingTensorShape, 0, 'float32');\n };\n\n const paddingTensorAppend = createPaddingTensor(paddingAmount);\n const remainingPaddingAmount = dimDiff - (paddingTensorAppend.shape[paddingAxis] as number);\n\n const paddingTensorPrepend = isCenterImage && remainingPaddingAmount\n ? createPaddingTensor(remainingPaddingAmount)\n : null;\n\n const tensorsToStack = [\n paddingTensorPrepend,\n imgTensor,\n paddingTensorAppend,\n ]\n .filter((t) => !!t)\n // .map((t: tf.Tensor) => t.toFloat()) as tf.Tensor4D[]\n .map((t: tf.Tensor) => tf.cast(t, 'float32')) as tf.Tensor4D[];\n return tf.concat(tensorsToStack, paddingAxis);\n });\n}\n", "export function shuffleArray(inputArray: any[]) {\n const array = inputArray.slice();\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const x = array[i];\n array[i] = array[j];\n array[j] = x;\n }\n return array;\n}\n", "export * from './iou';\nexport * from './minBbox';\nexport * from './nonMaxSuppression';\nexport * from './normalize';\nexport * from './padToSquare';\nexport * from './shuffleArray';\n\nexport function sigmoid(x: number) {\n return 1 / (1 + Math.exp(-x));\n}\n\nexport function inverseSigmoid(x: number) {\n return Math.log(x / (1 - x));\n}\n", "import { Box } from './Box';\n\nexport interface IRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport class Rect extends Box implements IRect {\n constructor(x: number, y: number, width: number, height: number, allowNegativeDimensions: boolean = false) {\n super({\n x, y, width, height,\n }, allowNegativeDimensions);\n }\n}\n", "import { minBbox } from '../ops/index';\nimport { getCenterPoint } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { FaceDetection } from './FaceDetection';\nimport { Point } from './Point';\nimport { IRect, Rect } from './Rect';\n\n// face alignment constants\nconst relX = 0.5;\nconst relY = 0.43;\nconst relScale = 0.45;\n\nexport interface IFaceLandmarks {\n positions: Point[]\n shift: Point\n}\n\nexport class FaceLandmarks implements IFaceLandmarks {\n protected _shift: Point\n\n protected _positions: Point[]\n\n protected _imgDims: Dimensions\n\n constructor(\n relativeFaceLandmarkPositions: Point[],\n imgDims: IDimensions,\n shift: Point = new Point(0, 0),\n ) {\n const { width, height } = imgDims;\n this._imgDims = new Dimensions(width, height);\n this._shift = shift;\n this._positions = relativeFaceLandmarkPositions.map(\n (pt) => pt.mul(new Point(width, height)).add(shift),\n );\n }\n\n public get shift(): Point { return new Point(this._shift.x, this._shift.y); }\n\n public get imageWidth(): number { return this._imgDims.width; }\n\n public get imageHeight(): number { return this._imgDims.height; }\n\n public get positions(): Point[] { return this._positions; }\n\n public get relativePositions(): Point[] {\n return this._positions.map(\n (pt) => pt.sub(this._shift).div(new Point(this.imageWidth, this.imageHeight)),\n );\n }\n\n public forSize(width: number, height: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n { width, height },\n );\n }\n\n public shiftBy(x: number, y: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n this._imgDims,\n new Point(x, y),\n );\n }\n\n public shiftByPoint(pt: Point): T {\n return this.shiftBy(pt.x, pt.y);\n }\n\n /**\n * Aligns the face landmarks after face detection from the relative positions of the faces\n * bounding box, or it's current shift. This function should be used to align the face images\n * after face detection has been performed, before they are passed to the face recognition net.\n * This will make the computed face descriptor more accurate.\n *\n * @param detection (optional) The bounding box of the face or the face detection result. If\n * no argument was passed the position of the face landmarks are assumed to be relative to\n * it's current shift.\n * @returns The bounding box of the aligned face.\n */\n public align(\n detection?: FaceDetection | IRect | IBoundingBox | null,\n options: { useDlibAlignment?: boolean, minBoxPadding?: number } = { },\n ): Box {\n if (detection) {\n const box = detection instanceof FaceDetection\n ? detection.box.floor()\n : new Box(detection);\n\n return this.shiftBy(box.x, box.y).align(null, options);\n }\n\n const { useDlibAlignment, minBoxPadding } = { useDlibAlignment: false, minBoxPadding: 0.2, ...options };\n\n if (useDlibAlignment) {\n return this.alignDlib();\n }\n\n return this.alignMinBbox(minBoxPadding);\n }\n\n private alignDlib(): Box {\n const centers = this.getRefPointsForAlignment();\n\n const [leftEyeCenter, rightEyeCenter, mouthCenter] = centers;\n const distToMouth = (pt: Point) => mouthCenter.sub(pt).magnitude();\n const eyeToMouthDist = (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2;\n\n const size = Math.floor(eyeToMouthDist / relScale);\n\n const refPoint = getCenterPoint(centers);\n // TODO: pad in case rectangle is out of image bounds\n const x = Math.floor(Math.max(0, refPoint.x - (relX * size)));\n const y = Math.floor(Math.max(0, refPoint.y - (relY * size)));\n\n return new Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y));\n }\n\n private alignMinBbox(padding: number): Box {\n const box = minBbox(this.positions);\n return box.pad(box.width * padding, box.height * padding);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n throw new Error('getRefPointsForAlignment not implemented by base class');\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks5 extends FaceLandmarks {\n protected getRefPointsForAlignment(): Point[] {\n const pts = this.positions;\n return [\n pts[0],\n pts[1],\n getCenterPoint([pts[3], pts[4]]),\n ];\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks68 extends FaceLandmarks {\n public getJawOutline(): Point[] {\n return this.positions.slice(0, 17);\n }\n\n public getLeftEyeBrow(): Point[] {\n return this.positions.slice(17, 22);\n }\n\n public getRightEyeBrow(): Point[] {\n return this.positions.slice(22, 27);\n }\n\n public getNose(): Point[] {\n return this.positions.slice(27, 36);\n }\n\n public getLeftEye(): Point[] {\n return this.positions.slice(36, 42);\n }\n\n public getRightEye(): Point[] {\n return this.positions.slice(42, 48);\n }\n\n public getMouth(): Point[] {\n return this.positions.slice(48, 68);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n return [\n this.getLeftEye(),\n this.getRightEye(),\n this.getMouth(),\n ].map(getCenterPoint);\n }\n}\n", "import { round } from '../utils/index';\n\nexport interface IFaceMatch {\n label: string\n distance: number\n}\n\nexport class FaceMatch implements IFaceMatch {\n private _label: string\n\n private _distance: number\n\n constructor(label: string, distance: number) {\n this._label = label;\n this._distance = distance;\n }\n\n public get label(): string { return this._label; }\n\n public get distance(): number { return this._distance; }\n\n public toString(withDistance: boolean = true): string {\n return `${this.label}${withDistance ? ` (${round(this.distance)})` : ''}`;\n }\n}\n", "import { isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { IRect } from './Rect';\n\nexport class LabeledBox extends Box {\n public static assertIsValidLabeledBox(box: any, callee: string) {\n Box.assertIsValidBox(box, callee);\n\n if (!isValidNumber(box.label)) {\n throw new Error(`${callee} - expected property label (${box.label}) to be a number`);\n }\n }\n\n private _label: number\n\n constructor(box: IBoundingBox | IRect | any, label: number) {\n super(box);\n this._label = label;\n }\n\n public get label(): number { return this._label; }\n}\n", "export class LabeledFaceDescriptors {\n private _label: string\n\n private _descriptors: Float32Array[]\n\n constructor(label: string, descriptors: Float32Array[]) {\n if (!(typeof label === 'string')) {\n throw new Error('LabeledFaceDescriptors - constructor expected label to be a string');\n }\n\n if (!Array.isArray(descriptors) || descriptors.some((desc) => !(desc instanceof Float32Array))) {\n throw new Error('LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array');\n }\n\n this._label = label;\n this._descriptors = descriptors;\n }\n\n public get label(): string { return this._label; }\n\n public get descriptors(): Float32Array[] { return this._descriptors; }\n\n public toJSON(): any {\n return {\n label: this.label,\n descriptors: this.descriptors.map((d) => Array.from(d)),\n };\n }\n\n public static fromJSON(json: any): LabeledFaceDescriptors {\n const descriptors = json.descriptors.map((d: any) => new Float32Array(d));\n return new LabeledFaceDescriptors(json.label, descriptors);\n }\n}\n", "import { isValidProbablitiy } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { LabeledBox } from './LabeledBox';\nimport { IRect } from './Rect';\n\nexport class PredictedBox extends LabeledBox {\n public static assertIsValidPredictedBox(box: any, callee: string) {\n LabeledBox.assertIsValidLabeledBox(box, callee);\n\n if (\n !isValidProbablitiy(box.score)\n || !isValidProbablitiy(box.classScore)\n ) {\n throw new Error(`${callee} - expected properties score (${box.score}) and (${box.classScore}) to be a number between [0, 1]`);\n }\n }\n\n private _score: number\n\n private _classScore: number\n\n constructor(box: IBoundingBox | IRect | any, label: number, score: number, classScore: number) {\n super(box, label);\n this._score = score;\n this._classScore = classScore;\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\n\nexport type WithFaceDetection = TSource & {\n detection: FaceDetection\n}\n\nexport function isWithFaceDetection(obj: any): obj is WithFaceDetection<{}> {\n return obj.detection instanceof FaceDetection;\n}\n\nexport function extendWithFaceDetection<\n TSource\n>(\n sourceObj: TSource,\n detection: FaceDetection,\n): WithFaceDetection {\n const extension = { detection };\n return { ...sourceObj, ...extension };\n}\n", "import { Environment } from './types';\n\nexport function createBrowserEnv(): Environment {\n const fetch = window.fetch;\n if (!fetch) throw new Error('fetch - missing fetch implementation for browser environment');\n\n const readFile = () => {\n throw new Error('readFile - filesystem not available for browser environment');\n };\n\n return {\n Canvas: HTMLCanvasElement,\n CanvasRenderingContext2D,\n Image: HTMLImageElement,\n ImageData,\n Video: HTMLVideoElement,\n createCanvasElement: () => document.createElement('canvas'),\n createImageElement: () => document.createElement('img'),\n fetch,\n readFile,\n };\n}\n", "import { FileSystem } from './types';\n\nexport function createFileSystem(fs?: any): FileSystem {\n let requireFsError = '';\n\n if (!fs) {\n try {\n // eslint-disable-next-line global-require\n fs = require('fs');\n } catch (err) {\n requireFsError = err.toString();\n }\n }\n\n const readFile = fs\n ? (filePath: string) => new Promise((resolve, reject) => {\n fs.readFile(filePath, (err: any, buffer: Buffer) => (err ? reject(err) : resolve(buffer)));\n })\n : () => {\n throw new Error(`readFile - failed to require fs in nodejs environment with error: ${requireFsError}`);\n };\n\n return {\n readFile,\n };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { createFileSystem } from './createFileSystem';\nimport { Environment } from './types';\n\nexport function createNodejsEnv(): Environment {\n // eslint-disable-next-line dot-notation\n const Canvas = global['Canvas'] || global.HTMLCanvasElement;\n const Image = global.Image || global.HTMLImageElement;\n\n const createCanvasElement = () => {\n if (Canvas) return new Canvas();\n throw new Error('createCanvasElement - missing Canvas implementation for nodejs environment');\n };\n\n const createImageElement = () => {\n if (Image) return new Image();\n throw new Error('createImageElement - missing Image implementation for nodejs environment');\n };\n\n const fetch = global.fetch;\n // if (!fetch) throw new Error('fetch - missing fetch implementation for nodejs environment');\n\n const fileSystem = createFileSystem();\n\n return {\n Canvas: Canvas || class {},\n CanvasRenderingContext2D: global.CanvasRenderingContext2D || class {},\n Image: Image || class {},\n ImageData: global.ImageData || class {},\n Video: global.HTMLVideoElement || class {},\n createCanvasElement,\n createImageElement,\n fetch,\n ...fileSystem,\n };\n}\n", "export function isBrowser(): boolean {\n return typeof window === 'object'\n && typeof document !== 'undefined'\n && typeof HTMLImageElement !== 'undefined'\n && typeof HTMLCanvasElement !== 'undefined'\n && typeof HTMLVideoElement !== 'undefined'\n && typeof ImageData !== 'undefined'\n && typeof CanvasRenderingContext2D !== 'undefined';\n}\n", "import { createBrowserEnv } from './createBrowserEnv';\nimport { createFileSystem } from './createFileSystem';\nimport { createNodejsEnv } from './createNodejsEnv';\nimport { isBrowser } from './isBrowser';\nimport { isNodejs } from './isNodejs';\nimport { Environment } from './types';\n\nlet environment: Environment | null;\n\nfunction getEnv(): Environment {\n if (!environment) {\n throw new Error('getEnv - environment is not defined, check isNodejs() and isBrowser()');\n }\n return environment;\n}\n\nfunction setEnv(env: Environment) {\n environment = env;\n}\n\nfunction initialize() {\n // check for isBrowser() first to prevent electron renderer process\n // to be initialized with wrong environment due to isNodejs() returning true\n if (isBrowser()) return setEnv(createBrowserEnv());\n if (isNodejs()) return setEnv(createNodejsEnv());\n return null;\n}\n\nfunction monkeyPatch(env: Partial) {\n if (!environment) {\n initialize();\n }\n\n if (!environment) {\n throw new Error('monkeyPatch - environment is not defined, check isNodejs() and isBrowser()');\n }\n\n const { Canvas = environment.Canvas, Image = environment.Image } = env;\n environment.Canvas = Canvas;\n environment.Image = Image;\n environment.createCanvasElement = env.createCanvasElement || (() => new Canvas());\n environment.createImageElement = env.createImageElement || (() => new Image());\n\n environment.ImageData = env.ImageData || environment.ImageData;\n environment.Video = env.Video || environment.Video;\n environment.fetch = env.fetch || environment.fetch;\n environment.readFile = env.readFile || environment.readFile;\n}\n\nexport const env = {\n getEnv,\n setEnv,\n initialize,\n createBrowserEnv,\n createFileSystem,\n createNodejsEnv,\n monkeyPatch,\n isBrowser,\n isNodejs,\n};\n\ninitialize();\n\nexport * from './types';\n", "import { env } from '../env/index';\n\nexport function resolveInput(arg: string | any) {\n if (!env.isNodejs() && typeof arg === 'string') {\n return document.getElementById(arg);\n }\n return arg;\n}\n", "import { env } from '../env/index';\nimport { resolveInput } from './resolveInput';\n\nexport function getContext2dOrThrow(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D): CanvasRenderingContext2D {\n const { Canvas, CanvasRenderingContext2D } = env.getEnv();\n\n if (canvasArg instanceof CanvasRenderingContext2D) {\n return canvasArg;\n }\n\n const canvas = resolveInput(canvasArg);\n\n if (!(canvas instanceof Canvas)) {\n throw new Error('resolveContext2d - expected canvas to be of instance of Canvas');\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('resolveContext2d - canvas 2d context is null');\n }\n\n return ctx;\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IDimensions, IPoint } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { resolveInput } from '../dom/resolveInput';\n\n// eslint-disable-next-line no-shadow\nexport enum AnchorPosition {\n // eslint-disable-next-line no-unused-vars\n TOP_LEFT = 'TOP_LEFT',\n // eslint-disable-next-line no-unused-vars\n TOP_RIGHT = 'TOP_RIGHT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_LEFT = 'BOTTOM_LEFT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_RIGHT = 'BOTTOM_RIGHT'\n}\n\nexport interface IDrawTextFieldOptions {\n anchorPosition?: AnchorPosition\n backgroundColor?: string\n fontColor?: string\n fontSize?: number\n fontStyle?: string\n padding?: number\n}\n\nexport class DrawTextFieldOptions implements IDrawTextFieldOptions {\n public anchorPosition: AnchorPosition\n\n public backgroundColor: string\n\n public fontColor: string\n\n public fontSize: number\n\n public fontStyle: string\n\n public padding: number\n\n constructor(options: IDrawTextFieldOptions = {}) {\n const {\n anchorPosition, backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = options;\n this.anchorPosition = anchorPosition || AnchorPosition.TOP_LEFT;\n this.backgroundColor = backgroundColor || 'rgba(0, 0, 0, 0.5)';\n this.fontColor = fontColor || 'rgba(255, 255, 255, 1)';\n this.fontSize = fontSize || 14;\n this.fontStyle = fontStyle || 'Georgia';\n this.padding = padding || 4;\n }\n}\n\nexport class DrawTextField {\n public text: string[]\n\n public anchor : IPoint\n\n public options: DrawTextFieldOptions\n\n constructor(\n text: string | string[] | DrawTextField,\n anchor: IPoint,\n options: IDrawTextFieldOptions = {},\n ) {\n // eslint-disable-next-line no-nested-ternary\n this.text = typeof text === 'string'\n ? [text]\n : (text instanceof DrawTextField ? text.text : text);\n this.anchor = anchor;\n this.options = new DrawTextFieldOptions(options);\n }\n\n measureWidth(ctx: CanvasRenderingContext2D): number {\n const { padding } = this.options;\n return this.text.map((l) => ctx.measureText(l).width).reduce((w0, w1) => (w0 < w1 ? w1 : w0), 0) + (2 * padding);\n }\n\n measureHeight(): number {\n const { fontSize, padding } = this.options;\n return this.text.length * fontSize + (2 * padding);\n }\n\n getUpperLeft(ctx: CanvasRenderingContext2D, canvasDims?: IDimensions): IPoint {\n const { anchorPosition } = this.options;\n const isShiftLeft = anchorPosition === AnchorPosition.BOTTOM_RIGHT || anchorPosition === AnchorPosition.TOP_RIGHT;\n const isShiftTop = anchorPosition === AnchorPosition.BOTTOM_LEFT || anchorPosition === AnchorPosition.BOTTOM_RIGHT;\n\n const textFieldWidth = this.measureWidth(ctx);\n const textFieldHeight = this.measureHeight();\n const x = (isShiftLeft ? this.anchor.x - textFieldWidth : this.anchor.x);\n const y = isShiftTop ? this.anchor.y - textFieldHeight : this.anchor.y;\n\n // adjust anchor if text box exceeds canvas borders\n if (canvasDims) {\n const { width, height } = canvasDims;\n const newX = Math.max(Math.min(x, width - textFieldWidth), 0);\n const newY = Math.max(Math.min(y, height - textFieldHeight), 0);\n return { x: newX, y: newY };\n }\n return { x, y };\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const canvas = resolveInput(canvasArg);\n const ctx = getContext2dOrThrow(canvas);\n\n const {\n backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = this.options;\n\n ctx.font = `${fontSize}px ${fontStyle}`;\n const maxTextWidth = this.measureWidth(ctx);\n const textHeight = this.measureHeight();\n\n ctx.fillStyle = backgroundColor;\n const upperLeft = this.getUpperLeft(ctx, canvas);\n ctx.fillRect(upperLeft.x, upperLeft.y, maxTextWidth, textHeight);\n\n ctx.fillStyle = fontColor;\n this.text.forEach((textLine, i) => {\n const x = padding + upperLeft.x;\n const y = padding + upperLeft.y + ((i + 1) * fontSize);\n ctx.fillText(textLine, x, y);\n });\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { Box, IBoundingBox, IRect } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport {\n AnchorPosition, DrawTextField, DrawTextFieldOptions, IDrawTextFieldOptions,\n} from './DrawTextField';\n\nexport interface IDrawBoxOptions {\n boxColor?: string\n lineWidth?: number\n drawLabelOptions?: IDrawTextFieldOptions\n label?: string\n}\n\nexport class DrawBoxOptions {\n public boxColor: string\n\n public lineWidth: number\n\n public drawLabelOptions: DrawTextFieldOptions\n\n public label?: string\n\n constructor(options: IDrawBoxOptions = {}) {\n const {\n boxColor, lineWidth, label, drawLabelOptions,\n } = options;\n this.boxColor = boxColor || 'rgba(0, 0, 255, 1)';\n this.lineWidth = lineWidth || 2;\n this.label = label;\n\n const defaultDrawLabelOptions = {\n anchorPosition: AnchorPosition.BOTTOM_LEFT,\n backgroundColor: this.boxColor,\n };\n this.drawLabelOptions = new DrawTextFieldOptions({ ...defaultDrawLabelOptions, ...drawLabelOptions });\n }\n}\n\nexport class DrawBox {\n public box: Box\n\n public options: DrawBoxOptions\n\n constructor(\n box: IBoundingBox | IRect,\n options: IDrawBoxOptions = {},\n ) {\n this.box = new Box(box);\n this.options = new DrawBoxOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const { boxColor, lineWidth } = this.options;\n\n const {\n x, y, width, height,\n } = this.box;\n ctx.strokeStyle = boxColor;\n ctx.lineWidth = lineWidth;\n ctx.strokeRect(x, y, width, height);\n\n const { label } = this.options;\n if (label) {\n new DrawTextField([label], { x: x - (lineWidth / 2), y }, this.options.drawLabelOptions).draw(canvasArg);\n }\n }\n}\n", "import { Box, IBoundingBox, IRect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { round } from '../utils/index';\nimport { DrawBox } from './DrawBox';\n\nexport type TDrawDetectionsInput = IRect | IBoundingBox | FaceDetection | WithFaceDetection<{}>\n\nexport function drawDetections(\n canvasArg: string | HTMLCanvasElement,\n detections: TDrawDetectionsInput | Array,\n) {\n const detectionsArray = Array.isArray(detections) ? detections : [detections];\n\n detectionsArray.forEach((det) => {\n // eslint-disable-next-line no-nested-ternary\n const score = det instanceof FaceDetection\n ? det.score\n : (isWithFaceDetection(det) ? det.detection.score : undefined);\n\n // eslint-disable-next-line no-nested-ternary\n const box = det instanceof FaceDetection\n ? det.box\n : (isWithFaceDetection(det) ? det.detection.box : new Box(det));\n\n const label = score ? `${round(score)}` : undefined;\n new DrawBox(box, { label }).draw(canvasArg);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { FaceExpressions } from './FaceExpressions';\n\nexport class FaceExpressionNet extends FaceProcessor {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceExpressionNet', faceFeatureExtractor);\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n return tf.tidy(() => tf.softmax(this.runNet(input)));\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictExpressions(input: TNetInput) {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n const probabilitesByBatch = await Promise.all(tf.unstack(out).map(async (t) => {\n const data = await t.data();\n t.dispose();\n return data;\n }));\n out.dispose();\n\n const predictionsByBatch = probabilitesByBatch\n .map((probabilites) => new FaceExpressions(probabilites as Float32Array));\n\n return netInput.isBatchInput\n ? predictionsByBatch\n : predictionsByBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_expression_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n\n protected getClassifierChannelsOut(): number {\n return 7;\n }\n}\n", "import { env } from '../env/index';\n\nexport function isMediaLoaded(media: HTMLImageElement | HTMLVideoElement) : boolean {\n const { Image, Video } = env.getEnv();\n\n return (media instanceof Image && media.complete)\n || (media instanceof Video && media.readyState >= 3);\n}\n", "import { env } from '../env/index';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function awaitMediaLoaded(media: HTMLImageElement | HTMLVideoElement | HTMLCanvasElement) {\n // eslint-disable-next-line consistent-return\n return new Promise((resolve, reject) => {\n if (media instanceof env.getEnv().Canvas || isMediaLoaded(media)) {\n return resolve(null);\n }\n\n function onError(e: Event) {\n if (!e.currentTarget) return;\n // eslint-disable-next-line no-use-before-define\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n reject(e);\n }\n\n function onLoad(e: Event) {\n if (!e.currentTarget) return;\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n resolve(e);\n }\n\n media.addEventListener('load', onLoad);\n media.addEventListener('error', onError);\n });\n}\n", "import { env } from '../env/index';\n\nexport function bufferToImage(buf: Blob): Promise {\n return new Promise((resolve, reject) => {\n if (!(buf instanceof Blob)) reject(new Error('bufferToImage - expected buf to be of type: Blob'));\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result !== 'string') reject(new Error('bufferToImage - expected reader.result to be a string, in onload'));\n const img = env.getEnv().createImageElement();\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = reader.result as string;\n };\n reader.onerror = reject;\n reader.readAsDataURL(buf);\n });\n}\n", "import { Dimensions, IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\n\nexport function getMediaDimensions(input: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | IDimensions): Dimensions {\n const { Image, Video } = env.getEnv();\n\n if (input instanceof Image) {\n return new Dimensions(input.naturalWidth, input.naturalHeight);\n }\n if (input instanceof Video) {\n return new Dimensions(input.videoWidth, input.videoHeight);\n }\n return new Dimensions(input.width, input.height);\n}\n", "import { IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function createCanvas({ width, height }: IDimensions): HTMLCanvasElement {\n const { createCanvasElement } = env.getEnv();\n const canvas = createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n\nexport function createCanvasFromMedia(media: HTMLImageElement | HTMLVideoElement | ImageData, dims?: IDimensions): HTMLCanvasElement {\n const { ImageData } = env.getEnv();\n\n if (!(media instanceof ImageData) && !isMediaLoaded(media)) {\n throw new Error('createCanvasFromMedia - media has not finished loading yet');\n }\n\n const { width, height } = dims || getMediaDimensions(media);\n const canvas = createCanvas({ width, height });\n\n if (media instanceof ImageData) {\n getContext2dOrThrow(canvas).putImageData(media, 0, 0);\n } else {\n getContext2dOrThrow(canvas).drawImage(media, 0, 0, width, height);\n }\n return canvas;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { env } from '../env/index';\nimport { isTensor4D } from '../utils/index';\n\nexport async function imageTensorToCanvas(\n imgTensor: tf.Tensor,\n canvas?: HTMLCanvasElement,\n): Promise {\n const targetCanvas = canvas || env.getEnv().createCanvasElement();\n\n const [height, width, numChannels] = imgTensor.shape.slice(isTensor4D(imgTensor) ? 1 : 0);\n const imgTensor3D = tf.tidy(() => imgTensor.as3D(height, width, numChannels).toInt());\n await tf.browser.toPixels(imgTensor3D, targetCanvas);\n\n imgTensor3D.dispose();\n\n return targetCanvas;\n}\n", "import { env } from '../env/index';\n\nexport function isMediaElement(input: any) {\n const { Image, Canvas, Video } = env.getEnv();\n\n return input instanceof Image\n || input instanceof Canvas\n || input instanceof Video;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Dimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { padToSquare } from '../ops/padToSquare';\nimport {\n computeReshapedDimensions, isTensor3D, isTensor4D, range,\n} from '../utils/index';\nimport { createCanvasFromMedia } from './createCanvas';\nimport { imageToSquare } from './imageToSquare';\nimport { TResolvedNetInput } from './types';\n\nexport class NetInput {\n private _imageTensors: Array = []\n\n private _canvases: HTMLCanvasElement[] = []\n\n private _batchSize: number\n\n private _treatAsBatchInput: boolean = false\n\n private _inputDimensions: number[][] = []\n\n private _inputSize: number\n\n constructor(\n inputs: Array,\n treatAsBatchInput: boolean = false,\n ) {\n if (!Array.isArray(inputs)) {\n throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${inputs}`);\n }\n\n this._treatAsBatchInput = treatAsBatchInput;\n this._batchSize = inputs.length;\n\n inputs.forEach((input, idx) => {\n if (isTensor3D(input)) {\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = input.shape;\n return;\n }\n\n if (isTensor4D(input)) {\n const batchSize = (input as any).shape[0];\n if (batchSize !== 1) {\n throw new Error(`NetInput - tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = (input as any).shape.slice(1);\n return;\n }\n\n const canvas = (input as any) instanceof env.getEnv().Canvas ? input : createCanvasFromMedia(input);\n this._canvases[idx] = canvas;\n this._inputDimensions[idx] = [canvas.height, canvas.width, 3];\n });\n }\n\n public get imageTensors(): Array {\n return this._imageTensors;\n }\n\n public get canvases(): HTMLCanvasElement[] {\n return this._canvases;\n }\n\n public get isBatchInput(): boolean {\n return this.batchSize > 1 || this._treatAsBatchInput;\n }\n\n public get batchSize(): number {\n return this._batchSize;\n }\n\n public get inputDimensions(): number[][] {\n return this._inputDimensions;\n }\n\n public get inputSize(): number | undefined {\n return this._inputSize;\n }\n\n public get reshapedInputDimensions(): Dimensions[] {\n return range(this.batchSize, 0, 1).map(\n (_, batchIdx) => this.getReshapedInputDimensions(batchIdx),\n );\n }\n\n public getInput(batchIdx: number): tf.Tensor3D | tf.Tensor4D | HTMLCanvasElement {\n return this.canvases[batchIdx] || this.imageTensors[batchIdx];\n }\n\n public getInputDimensions(batchIdx: number): number[] {\n return this._inputDimensions[batchIdx];\n }\n\n public getInputHeight(batchIdx: number): number {\n return this._inputDimensions[batchIdx][0];\n }\n\n public getInputWidth(batchIdx: number): number {\n return this._inputDimensions[batchIdx][1];\n }\n\n public getReshapedInputDimensions(batchIdx: number): Dimensions {\n if (typeof this.inputSize !== 'number') {\n throw new Error('getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet');\n }\n\n const width = this.getInputWidth(batchIdx);\n const height = this.getInputHeight(batchIdx);\n return computeReshapedDimensions({ width, height }, this.inputSize);\n }\n\n /**\n * Create a batch tensor from all input canvases and tensors\n * with size [batchSize, inputSize, inputSize, 3].\n *\n * @param inputSize Height and width of the tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The batch tensor.\n */\n public toBatchTensor(inputSize: number, isCenterInputs: boolean = true): tf.Tensor4D {\n this._inputSize = inputSize;\n\n return tf.tidy(() => {\n const inputTensors = range(this.batchSize, 0, 1).map((batchIdx) => {\n const input = this.getInput(batchIdx);\n\n if (input instanceof tf.Tensor) {\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n let imgTensor = isTensor4D(input) ? input : input.expandDims();\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n imgTensor = padToSquare(imgTensor, isCenterInputs);\n\n if (imgTensor.shape[1] !== inputSize || imgTensor.shape[2] !== inputSize) {\n imgTensor = tf.image.resizeBilinear(imgTensor, [inputSize, inputSize]);\n }\n\n return imgTensor.as3D(inputSize, inputSize, 3);\n }\n\n if (input instanceof env.getEnv().Canvas) {\n return tf.browser.fromPixels(imageToSquare(input, inputSize, isCenterInputs));\n }\n\n throw new Error(`toBatchTensor - at batchIdx ${batchIdx}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${input}`);\n });\n\n // const batchTensor = tf.stack(inputTensors.map(t => t.toFloat())).as4D(this.batchSize, inputSize, inputSize, 3)\n const batchTensor = tf.stack(inputTensors.map((t) => tf.cast(t, 'float32'))).as4D(this.batchSize, inputSize, inputSize, 3);\n // const batchTensor = tf.stack(inputTensors.map(t => tf.Tensor.as4D(tf.cast(t, 'float32'))), this.batchSize, inputSize, inputSize, 3);\n\n return batchTensor;\n });\n }\n}\n", "import { env } from '../env/index';\nimport { createCanvas, createCanvasFromMedia } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function imageToSquare(input: HTMLImageElement | HTMLCanvasElement, inputSize: number, centerImage: boolean = false) {\n const { Image, Canvas } = env.getEnv();\n\n if (!(input instanceof Image || input instanceof Canvas)) {\n throw new Error('imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement');\n }\n\n const dims = getMediaDimensions(input);\n const scale = inputSize / Math.max(dims.height, dims.width);\n const width = scale * dims.width;\n const height = scale * dims.height;\n\n const targetCanvas = createCanvas({ width: inputSize, height: inputSize });\n const inputCanvas = input instanceof Canvas ? input : createCanvasFromMedia(input);\n\n const offset = Math.abs(width - height) / 2;\n const dx = centerImage && width < height ? offset : 0;\n const dy = centerImage && height < width ? offset : 0;\n getContext2dOrThrow(targetCanvas).drawImage(inputCanvas, dx, dy, width, height);\n\n return targetCanvas;\n}\n", "import { isTensor3D, isTensor4D } from '../utils/index';\nimport { awaitMediaLoaded } from './awaitMediaLoaded';\nimport { isMediaElement } from './isMediaElement';\nimport { NetInput } from './NetInput';\nimport { resolveInput } from './resolveInput';\nimport { TNetInput } from './types';\n\n/**\n * Validates the input to make sure, they are valid net inputs and awaits all media elements\n * to be finished loading.\n *\n * @param input The input, which can be a media element or an array of different media elements.\n * @returns A NetInput instance, which can be passed into one of the neural networks.\n */\nexport async function toNetInput(inputs: TNetInput): Promise {\n if (inputs instanceof NetInput) {\n return inputs;\n }\n\n const inputArgArray = Array.isArray(inputs)\n ? inputs\n : [inputs];\n\n if (!inputArgArray.length) {\n throw new Error('toNetInput - empty array passed as input');\n }\n\n const getIdxHint = (idx: number) => (Array.isArray(inputs) ? ` at input index ${idx}:` : '');\n\n const inputArray = inputArgArray.map(resolveInput);\n\n inputArray.forEach((input, i) => {\n if (!isMediaElement(input) && !isTensor3D(input) && !isTensor4D(input)) {\n if (typeof inputArgArray[i] === 'string') {\n throw new Error(`toNetInput -${getIdxHint(i)} string passed, but could not resolve HTMLElement for element id ${inputArgArray[i]}`);\n }\n\n throw new Error(`toNetInput -${getIdxHint(i)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);\n }\n\n if (isTensor4D(input)) {\n // if tf.Tensor4D is passed in the input array, the batch size has to be 1\n const batchSize = input.shape[0];\n if (batchSize !== 1) {\n throw new Error(`toNetInput -${getIdxHint(i)} tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n }\n });\n\n // wait for all media elements being loaded\n await Promise.all(\n inputArray.map((input) => isMediaElement(input) && awaitMediaLoaded(input)),\n );\n\n return new NetInput(inputArray, Array.isArray(inputs));\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { Rect } from '../classes/Rect';\nimport { env } from '../env/index';\nimport { createCanvas } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { imageTensorToCanvas } from './imageTensorToCanvas';\nimport { toNetInput } from './toNetInput';\nimport { TNetInput } from './types';\n\n/**\n * Extracts the image regions containing the detected faces.\n *\n * @param input The image that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns The Canvases of the corresponding image region for each detected face.\n */\nexport async function extractFaces(\n input: TNetInput,\n detections: Array,\n): Promise {\n const { Canvas } = env.getEnv();\n\n let canvas = input as HTMLCanvasElement;\n\n if (!(input instanceof Canvas)) {\n const netInput = await toNetInput(input);\n\n if (netInput.batchSize > 1) {\n throw new Error('extractFaces - batchSize > 1 not supported');\n }\n\n const tensorOrCanvas = netInput.getInput(0);\n canvas = tensorOrCanvas instanceof Canvas\n ? tensorOrCanvas\n : await imageTensorToCanvas(tensorOrCanvas);\n }\n\n const ctx = getContext2dOrThrow(canvas);\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(canvas.width, canvas.height).box.floor()\n : det),\n )\n .map((box) => box.clipAtImageBorders(canvas.width, canvas.height));\n\n return boxes.map(({\n x, y, width, height,\n }) => {\n const faceImg = createCanvas({ width, height });\n getContext2dOrThrow(faceImg)\n .putImageData(ctx.getImageData(x, y, width, height), 0, 0);\n return faceImg;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isTensor3D, isTensor4D } from '../utils/index';\n\n/**\n * Extracts the tensors of the image regions containing the detected faces.\n * Useful if you want to compute the face descriptors for the face images.\n * Using this method is faster then extracting a canvas for each face and\n * converting them to tensors individually.\n *\n * @param imageTensor The image tensor that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns Tensors of the corresponding image region for each detected face.\n */\nexport async function extractFaceTensors(\n imageTensor: tf.Tensor3D | tf.Tensor4D,\n detections: Array,\n): Promise {\n if (!isTensor3D(imageTensor) && !isTensor4D(imageTensor)) {\n throw new Error('extractFaceTensors - expected image tensor to be 3D or 4D');\n }\n\n if (isTensor4D(imageTensor) && imageTensor.shape[0] > 1) {\n throw new Error('extractFaceTensors - batchSize > 1 not supported');\n }\n\n return tf.tidy(() => {\n const [imgHeight, imgWidth, numChannels] = imageTensor.shape.slice(isTensor4D(imageTensor) ? 1 : 0);\n\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(imgWidth, imgHeight).box\n : det),\n )\n .map((box) => box.clipAtImageBorders(imgWidth, imgHeight));\n\n const faceTensors = boxes.map(({\n x, y, width, height,\n }) => tf.slice3d(imageTensor.as3D(imgHeight, imgWidth, numChannels), [y, x, 0], [height, width, numChannels]));\n\n return faceTensors;\n });\n}\n", "import { env } from '../env/index';\n\nexport async function fetchOrThrow(\n url: string,\n // eslint-disable-next-line no-undef\n init?: RequestInit,\n): Promise {\n const { fetch } = env.getEnv();\n const res = await fetch(url, init);\n if (!(res.status < 400)) {\n throw new Error(`failed to fetch: (${res.status}) ${res.statusText}, from url: ${res.url}`);\n }\n return res;\n}\n", "import { bufferToImage } from './bufferToImage';\nimport { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchImage(uri: string): Promise {\n const res = await fetchOrThrow(uri);\n const blob = await (res).blob();\n\n if (!blob.type.startsWith('image/')) {\n throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${blob.type}, for url: ${res.url}`);\n }\n return bufferToImage(blob);\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchJson(uri: string): Promise {\n return (await fetchOrThrow(uri)).json();\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchNetWeights(uri: string): Promise {\n return new Float32Array(await (await fetchOrThrow(uri)).arrayBuffer());\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { getModelUris } from '../common/getModelUris';\nimport { fetchJson } from './fetchJson';\n\nexport async function loadWeightMap(\n uri: string | undefined,\n defaultModelName: string,\n): Promise {\n const { manifestUri, modelBaseUri } = getModelUris(uri, defaultModelName);\n const manifest = await fetchJson(manifestUri);\n // if (manifest['weightsManifest']) manifest = manifest['weightsManifest'];\n return tf.io.loadWeights(manifest, modelBaseUri);\n}\n", "export function getModelUris(uri: string | undefined, defaultModelName: string) {\n const defaultManifestFilename = `${defaultModelName}-weights_manifest.json`;\n\n if (!uri) {\n return {\n modelBaseUri: '',\n manifestUri: defaultManifestFilename,\n };\n }\n\n if (uri === '/') {\n return {\n modelBaseUri: '/',\n manifestUri: `/${defaultManifestFilename}`,\n };\n }\n // eslint-disable-next-line no-nested-ternary\n const protocol = uri.startsWith('http://') ? 'http://' : uri.startsWith('https://') ? 'https://' : '';\n uri = uri.replace(protocol, '');\n\n const parts = uri.split('/').filter((s) => s);\n\n const manifestFile = uri.endsWith('.json')\n ? parts[parts.length - 1]\n : defaultManifestFilename;\n\n let modelBaseUri = protocol + (uri.endsWith('.json') ? parts.slice(0, parts.length - 1) : parts).join('/');\n modelBaseUri = uri.startsWith('/') ? `/${modelBaseUri}` : modelBaseUri;\n\n return {\n modelBaseUri,\n manifestUri: modelBaseUri === '/' ? `/${manifestFile}` : `${modelBaseUri}/${manifestFile}`,\n };\n}\n", "import { IDimensions } from '../classes/index';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function matchDimensions(input: IDimensions, reference: IDimensions, useMediaDimensions: boolean = false) {\n const { width, height } = useMediaDimensions\n ? getMediaDimensions(reference)\n : reference;\n input.width = width;\n input.height = height;\n return { width, height };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock4 } from './denseBlock';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { FaceFeatureExtractorParams, IFaceFeatureExtractor } from './types';\n\nexport class FaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('FaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock4(normalized, params.dense0, true);\n out = denseBlock4(out, params.dense1);\n out = denseBlock4(out, params.dense2);\n out = denseBlock4(out, params.dense3);\n out = tf.avgPool(out, [7, 7], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../dist/tfjs.esm.js';\n\nimport { ParamMapping } from './common/index';\nimport { getModelUris } from './common/getModelUris';\nimport { loadWeightMap } from './dom/index';\nimport { env } from './env/index';\n\nexport abstract class NeuralNetwork {\n\n protected _params: TNetParams | undefined = undefined\n protected _paramMappings: ParamMapping[] = []\n\n constructor(protected _name: string) {\n }\n\n public get params(): TNetParams | undefined { return this._params }\n public get paramMappings(): ParamMapping[] { return this._paramMappings }\n public get isLoaded(): boolean { return !!this.params }\n\n public getParamFromPath(paramPath: string): tf.Tensor {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n return obj[objProp]\n }\n\n public reassignParamFromPath(paramPath: string, tensor: tf.Tensor) {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n obj[objProp].dispose()\n obj[objProp] = tensor\n }\n\n public getParamList() {\n return this._paramMappings.map(({ paramPath }) => ({\n path: paramPath,\n tensor: this.getParamFromPath(paramPath)\n }))\n }\n\n public getTrainableParams() {\n return this.getParamList().filter(param => param.tensor instanceof tf.Variable)\n }\n\n public getFrozenParams() {\n return this.getParamList().filter(param => !(param.tensor instanceof tf.Variable))\n }\n\n public variable() {\n this.getFrozenParams().forEach(({ path, tensor }) => {\n this.reassignParamFromPath(path, tensor.variable())\n })\n }\n\n public freeze() {\n this.getTrainableParams().forEach(({ path, tensor: variable }) => {\n const tensor = tf.tensor(variable.dataSync())\n variable.dispose()\n this.reassignParamFromPath(path, tensor)\n })\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.getParamList().forEach(param => {\n if (throwOnRedispose && param.tensor.isDisposed) {\n throw new Error(`param tensor has already been disposed for path ${param.path}`)\n }\n param.tensor.dispose()\n })\n this._params = undefined\n }\n\n public serializeParams(): Float32Array {\n return new Float32Array(\n this.getParamList()\n .map(({ tensor }) => Array.from(tensor.dataSync()) as number[])\n .reduce((flat, arr) => flat.concat(arr))\n )\n }\n\n public async load(weightsOrUrl: Float32Array | string | undefined): Promise {\n if (weightsOrUrl instanceof Float32Array) {\n this.extractWeights(weightsOrUrl)\n return\n }\n\n await this.loadFromUri(weightsOrUrl)\n }\n\n public async loadFromUri(uri: string | undefined) {\n if (uri && typeof uri !== 'string') {\n throw new Error(`${this._name}.loadFromUri - expected model uri`)\n }\n\n const weightMap = await loadWeightMap(uri, this.getDefaultModelName())\n this.loadFromWeightMap(weightMap)\n }\n\n public async loadFromDisk(filePath: string | undefined) {\n if (filePath && typeof filePath !== 'string') {\n throw new Error(`${this._name}.loadFromDisk - expected model file path`)\n }\n\n const { readFile } = env.getEnv()\n\n const { manifestUri, modelBaseUri } = getModelUris(filePath, this.getDefaultModelName())\n\n const fetchWeightsFromDisk = (filePaths: string[]) => Promise.all(\n filePaths.map(filePath => readFile(filePath).then(buf => buf.buffer))\n )\n const loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk)\n const manifest = JSON.parse((await readFile(manifestUri)).toString())\n const weightMap = await loadWeights(manifest, modelBaseUri)\n\n this.loadFromWeightMap(weightMap)\n }\n\n public loadFromWeightMap(weightMap: tf.NamedTensorMap) {\n const {\n paramMappings,\n params\n } = this.extractParamsFromWeigthMap(weightMap)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n public extractWeights(weights: Float32Array) {\n const {\n paramMappings,\n params\n } = this.extractParams(weights)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n private traversePropertyPath(paramPath: string) {\n if (!this.params) {\n throw new Error(`traversePropertyPath - model has no loaded params`)\n }\n\n const result = paramPath.split('/').reduce((res: { nextObj: any, obj?: any, objProp?: string }, objProp) => {\n if (!res.nextObj.hasOwnProperty(objProp)) {\n throw new Error(`traversePropertyPath - object does not have property ${objProp}, for path ${paramPath}`)\n }\n\n return { obj: res.nextObj, objProp, nextObj: res.nextObj[objProp] }\n }, { nextObj: this.params })\n\n const { obj, objProp } = result\n if (!obj || !objProp || !(obj[objProp] instanceof tf.Tensor)) {\n throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${paramPath}`)\n }\n\n return { obj, objProp }\n }\n\n protected abstract getDefaultModelName(): string\n protected abstract extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TNetParams, paramMappings: ParamMapping[] }\n protected abstract extractParams(weights: Float32Array): { params: TNetParams, paramMappings: ParamMapping[] }\n}", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams, SeparableConvParams } from '../common/index';\nimport { depthwiseSeparableConv } from '../common/depthwiseSeparableConv';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function denseBlock3(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock3Params,\n isFirstLayer: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, [2, 2], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, [2, 2]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n });\n}\n\nexport function denseBlock4(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock4Params,\n isFirstLayer: boolean = false,\n isScaleDown: boolean = true,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, isScaleDown ? [2, 2] : [1, 1], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, isScaleDown ? [2, 2] : [1, 1]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n const in4 = tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n const out4 = depthwiseSeparableConv(in4, denseBlockParams.conv3, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, tf.add(out3, out4)))) as tf.Tensor4D;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { SeparableConvParams } from './types';\n\nexport function depthwiseSeparableConv(\n x: tf.Tensor4D,\n params: SeparableConvParams,\n stride: [number, number],\n): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same');\n out = tf.add(out, params.bias);\n return out;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams } from './types';\n\nexport function convLayer(\n x: tf.Tensor4D,\n params: ConvParams,\n padding: 'valid' | 'same' = 'same',\n withRelu: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out = tf.add(\n tf.conv2d(x, params.filters, [1, 1], padding),\n params.bias,\n ) as tf.Tensor4D;\n\n return withRelu ? tf.relu(out) : out;\n });\n}\n", "import { ParamMapping } from './types';\n\nexport function disposeUnusedWeightTensors(weightMap: any, paramMappings: ParamMapping[]) {\n Object.keys(weightMap).forEach((path) => {\n if (!paramMappings.some((pm) => pm.originalPath === path)) {\n weightMap[path].dispose();\n }\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams, ExtractWeightsFunction, ParamMapping } from './types';\n\nexport function extractConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams => {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ExtractWeightsFunction, FCParams, ParamMapping } from './types';\n\nexport function extractFCParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): FCParams => {\n const fc_weights = tf.tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]);\n const fc_bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return {\n weights: fc_weights,\n bias: fc_bias,\n };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ExtractWeightsFunction, ParamMapping, SeparableConvParams } from './types';\n\nexport function extractSeparableConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (channelsIn: number, channelsOut: number, mappedPrefix: string): SeparableConvParams => {\n const depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]);\n const pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]);\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/depthwise_filter` },\n { paramPath: `${mappedPrefix}/pointwise_filter` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n\nexport function loadSeparableConvParamsFactory(\n // eslint-disable-next-line no-unused-vars\n extractWeightEntry: (originalPath: string, paramRank: number) => T,\n) {\n return (prefix: string): SeparableConvParams => {\n const depthwise_filter = extractWeightEntry(`${prefix}/depthwise_filter`, 4);\n const pointwise_filter = extractWeightEntry(`${prefix}/pointwise_filter`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\n// eslint-disable-next-line no-unused-vars\nexport type ExtractWeightsFunction = (numWeights: number) => Float32Array\n\nexport type ParamMapping = {\n originalPath?: string\n paramPath: string\n}\n\nexport type ConvParams = {\n filters: tf.Tensor4D\n bias: tf.Tensor1D\n}\n\nexport type FCParams = {\n weights: tf.Tensor2D\n bias: tf.Tensor1D\n}\n\nexport class SeparableConvParams {\n // eslint-disable-next-line no-useless-constructor\n constructor(\n // eslint-disable-next-line no-unused-vars\n public depthwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public pointwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public bias: tf.Tensor1D,\n // eslint-disable-next-line no-empty-function\n ) {}\n}\n", "import { isTensor } from '../utils/index';\nimport { ParamMapping } from './types';\n\nexport function extractWeightEntryFactory(weightMap: any, paramMappings: ParamMapping[]) {\n return (originalPath: string, paramRank: number, mappedPath?: string) => {\n const tensor = weightMap[originalPath];\n\n if (!isTensor(tensor, paramRank)) {\n throw new Error(`expected weightMap[${originalPath}] to be a Tensor${paramRank}D, instead have ${tensor}`);\n }\n\n paramMappings.push(\n { originalPath, paramPath: mappedPath || originalPath },\n );\n\n return tensor;\n };\n}\n", "export function extractWeightsFactory(weights: Float32Array) {\n let remainingWeights = weights;\n\n function extractWeights(numWeights: number): Float32Array {\n const ret = remainingWeights.slice(0, numWeights);\n remainingWeights = remainingWeights.slice(numWeights);\n return ret;\n }\n\n function getRemainingWeights(): Float32Array {\n return remainingWeights;\n }\n\n return {\n extractWeights,\n getRemainingWeights,\n };\n}\n", "import {\n extractConvParamsFactory,\n extractSeparableConvParamsFactory,\n ExtractWeightsFunction,\n ParamMapping,\n} from '../common/index';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractDenseBlock3Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv0`)\n : extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/conv0`);\n const conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv1`);\n const conv2 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const { conv0, conv1, conv2 } = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer);\n const conv3 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock4Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock4Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock4Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock4Params(64, 128, 'dense2');\n const dense3 = extractDenseBlock4Params(128, 256, 'dense3');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: {\n dense0, dense1, dense2, dense3,\n },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams } from './types';\n\n// eslint-disable-next-line no-unused-vars\nexport function loadConvParamsFactory(extractWeightEntry: (originalPath: string, paramRank: number) => T) {\n return (prefix: string): ConvParams => {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return { filters, bias };\n };\n}\n", "import { extractWeightEntryFactory, loadSeparableConvParamsFactory, ParamMapping } from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractDenseBlock3Params(prefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(prefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n const conv3 = extractSeparableConvParams(`${prefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock4Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock4Params('dense0', true),\n dense1: extractDenseBlock4Params('dense1'),\n dense2: extractDenseBlock4Params('dense2'),\n dense3: extractDenseBlock4Params('dense3'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { NetInput } from '../dom/index';\nimport {\n FaceFeatureExtractorParams,\n IFaceFeatureExtractor,\n TinyFaceFeatureExtractorParams,\n} from '../faceFeatureExtractor/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { NetParams } from './types';\nimport { seperateWeightMaps } from './util';\n\nexport abstract class FaceProcessor<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends NeuralNetwork {\n protected _faceFeatureExtractor: IFaceFeatureExtractor\n\n constructor(_name: string, faceFeatureExtractor: IFaceFeatureExtractor) {\n super(_name);\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): IFaceFeatureExtractor {\n return this._faceFeatureExtractor;\n }\n\n protected abstract getDefaultModelName(): string\n\n protected abstract getClassifierChannelsIn(): number\n\n protected abstract getClassifierChannelsOut(): number\n\n public runNet(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n return fullyConnectedLayer(bottleneckFeatures.as2D(bottleneckFeatures.shape[0], -1), params.fc);\n });\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights, this.getClassifierChannelsIn(), this.getClassifierChannelsOut());\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const cIn = this.getClassifierChannelsIn();\n const cOut = this.getClassifierChannelsOut();\n const classifierWeightSize = (cOut * cIn) + cOut;\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FCParams } from './types';\n\nexport function fullyConnectedLayer(\n x: tf.Tensor2D,\n params: FCParams,\n): tf.Tensor2D {\n return tf.tidy(() => tf.add(\n tf.matMul(x, params.weights),\n params.bias,\n ));\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array, channelsIn: number, channelsOut: number): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const fc = extractFCParams(channelsIn, channelsOut, 'fc');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: extractFcParams('fc'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nexport function seperateWeightMaps(weightMap: tf.NamedTensorMap) {\n const featureExtractorMap: tf.NamedTensorMap = {};\n const classifierMap: tf.NamedTensorMap = {};\n\n Object.keys(weightMap).forEach((key) => {\n const map = key.startsWith('fc') ? classifierMap : featureExtractorMap;\n map[key] = weightMap[key];\n });\n\n return { featureExtractorMap, classifierMap };\n}\n", "export const FACE_EXPRESSION_LABELS = ['neutral', 'happy', 'sad', 'angry', 'fearful', 'disgusted', 'surprised'];\n\nexport class FaceExpressions {\n public neutral: number\n\n public happy: number\n\n public sad: number\n\n public angry: number\n\n public fearful: number\n\n public disgusted: number\n\n public surprised: number\n\n constructor(probabilities: number[] | Float32Array) {\n if (probabilities.length !== 7) {\n throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${probabilities.length}`);\n }\n\n FACE_EXPRESSION_LABELS.forEach((expression, idx) => {\n this[expression] = probabilities[idx];\n });\n }\n\n asSortedArray() {\n return FACE_EXPRESSION_LABELS\n .map((expression) => ({ expression, probability: this[expression] as number }))\n .sort((e0, e1) => e1.probability - e0.probability);\n }\n}\n", "import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\n\nexport type WithFaceExpressions = TSource & {\n expressions: FaceExpressions\n}\n\nexport function isWithFaceExpressions(obj: any): obj is WithFaceExpressions<{}> {\n return obj.expressions instanceof FaceExpressions;\n}\n\nexport function extendWithFaceExpressions<\n TSource\n>(\n sourceObj: TSource,\n expressions: FaceExpressions,\n): WithFaceExpressions {\n const extension = { expressions };\n return { ...sourceObj, ...extension };\n}\n", "import { IPoint, Point } from '../classes/index';\nimport { FaceExpressions } from '../faceExpressionNet/index';\nimport { isWithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { round } from '../utils/index';\nimport { DrawTextField } from './DrawTextField';\n\nexport type DrawFaceExpressionsInput = FaceExpressions | WithFaceExpressions<{}>\n\nexport function drawFaceExpressions(\n canvasArg: string | HTMLCanvasElement,\n faceExpressions: DrawFaceExpressionsInput | Array,\n minConfidence = 0.1,\n textFieldAnchor?: IPoint,\n) {\n const faceExpressionsArray = Array.isArray(faceExpressions) ? faceExpressions : [faceExpressions];\n\n faceExpressionsArray.forEach((e) => {\n // eslint-disable-next-line no-nested-ternary\n const expr = e instanceof FaceExpressions\n ? e\n : (isWithFaceExpressions(e) ? e.expressions : undefined);\n if (!expr) {\n throw new Error('drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof');\n }\n\n const sorted = expr.asSortedArray();\n const resultsToDisplay = sorted.filter((exprLocal) => exprLocal.probability > minConfidence);\n\n const anchor = isWithFaceDetection(e)\n ? e.detection.box.bottomLeft\n : (textFieldAnchor || new Point(0, 0));\n\n const drawTextField = new DrawTextField(\n resultsToDisplay.map((exprLocal) => `${exprLocal.expression} (${round(exprLocal.probability)})`),\n anchor,\n );\n drawTextField.draw(canvasArg);\n });\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { isWithFaceDetection, WithFaceDetection } from './WithFaceDetection';\n\nexport type WithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 > = TSource & {\n landmarks: TFaceLandmarks\n unshiftedLandmarks: TFaceLandmarks\n alignedRect: FaceDetection\n }\n\nexport function isWithFaceLandmarks(obj: any): obj is WithFaceLandmarks, FaceLandmarks> {\n return isWithFaceDetection(obj)\n // eslint-disable-next-line dot-notation\n && obj['landmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['unshiftedLandmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['alignedRect'] instanceof FaceDetection;\n}\n\nexport function extendWithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 >(sourceObj: TSource, unshiftedLandmarks: TFaceLandmarks): WithFaceLandmarks {\n const { box: shift } = sourceObj.detection;\n const landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y);\n\n const rect = landmarks.align();\n const { imageDims } = sourceObj.detection;\n const alignedRect = new FaceDetection(sourceObj.detection.score, rect.rescale(imageDims.reverse()), imageDims);\n\n const extension = {\n landmarks,\n unshiftedLandmarks,\n alignedRect,\n };\n\n return { ...sourceObj, ...extension };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IPoint } from '../classes/index';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { drawContour } from './drawContour';\n\nexport interface IDrawFaceLandmarksOptions {\n drawLines?: boolean\n drawPoints?: boolean\n lineWidth?: number\n pointSize?: number\n lineColor?: string\n pointColor?: string\n}\n\nexport class DrawFaceLandmarksOptions {\n public drawLines: boolean\n\n public drawPoints: boolean\n\n public lineWidth: number\n\n public pointSize: number\n\n public lineColor: string\n\n public pointColor: string\n\n constructor(options: IDrawFaceLandmarksOptions = {}) {\n const {\n drawLines = true, drawPoints = true, lineWidth, lineColor, pointSize, pointColor,\n } = options;\n this.drawLines = drawLines;\n this.drawPoints = drawPoints;\n this.lineWidth = lineWidth || 1;\n this.pointSize = pointSize || 2;\n this.lineColor = lineColor || 'rgba(0, 255, 255, 1)';\n this.pointColor = pointColor || 'rgba(255, 0, 255, 1)';\n }\n}\n\nexport class DrawFaceLandmarks {\n public faceLandmarks: FaceLandmarks\n\n public options: DrawFaceLandmarksOptions\n\n constructor(\n faceLandmarks: FaceLandmarks,\n options: IDrawFaceLandmarksOptions = {},\n ) {\n this.faceLandmarks = faceLandmarks;\n this.options = new DrawFaceLandmarksOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const {\n drawLines, drawPoints, lineWidth, lineColor, pointSize, pointColor,\n } = this.options;\n\n if (drawLines && this.faceLandmarks instanceof FaceLandmarks68) {\n ctx.strokeStyle = lineColor;\n ctx.lineWidth = lineWidth;\n drawContour(ctx, this.faceLandmarks.getJawOutline());\n drawContour(ctx, this.faceLandmarks.getLeftEyeBrow());\n drawContour(ctx, this.faceLandmarks.getRightEyeBrow());\n drawContour(ctx, this.faceLandmarks.getNose());\n drawContour(ctx, this.faceLandmarks.getLeftEye(), true);\n drawContour(ctx, this.faceLandmarks.getRightEye(), true);\n drawContour(ctx, this.faceLandmarks.getMouth(), true);\n }\n\n if (drawPoints) {\n ctx.strokeStyle = pointColor;\n ctx.fillStyle = pointColor;\n\n const drawPoint = (pt: IPoint) => {\n ctx.beginPath();\n ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI);\n ctx.fill();\n };\n this.faceLandmarks.positions.forEach(drawPoint);\n }\n }\n}\n\nexport type DrawFaceLandmarksInput = FaceLandmarks | WithFaceLandmarks>\n\nexport function drawFaceLandmarks(\n canvasArg: string | HTMLCanvasElement,\n faceLandmarks: DrawFaceLandmarksInput | Array,\n) {\n const faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks];\n faceLandmarksArray.forEach((f) => {\n // eslint-disable-next-line no-nested-ternary\n const landmarks = f instanceof FaceLandmarks\n ? f\n : (isWithFaceLandmarks(f) ? f.landmarks : undefined);\n if (!landmarks) {\n throw new Error('drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof');\n }\n\n new DrawFaceLandmarks(landmarks).draw(canvasArg);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { seperateWeightMaps } from '../faceProcessor/util';\nimport { TinyXception } from '../xception/TinyXception';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport {\n AgeAndGenderPrediction, Gender, NetOutput, NetParams,\n} from './types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\n\nexport class AgeGenderNet extends NeuralNetwork {\n private _faceFeatureExtractor: TinyXception\n\n constructor(faceFeatureExtractor: TinyXception = new TinyXception(2)) {\n super('AgeGenderNet');\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): TinyXception {\n return this._faceFeatureExtractor;\n }\n\n public runNet(input: NetInput | tf.Tensor4D): NetOutput {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n\n const pooled = tf.avgPool(bottleneckFeatures, [7, 7], [2, 2], 'valid').as2D(bottleneckFeatures.shape[0], -1);\n const age = fullyConnectedLayer(pooled, params.fc.age).as1D();\n const gender = fullyConnectedLayer(pooled, params.fc.gender);\n return { age, gender };\n });\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): NetOutput {\n return tf.tidy(() => {\n const { age, gender } = this.runNet(input);\n return { age, gender: tf.softmax(gender) };\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictAgeAndGender(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n\n const ages = tf.unstack(out.age);\n const genders = tf.unstack(out.gender);\n const ageAndGenderTensors = ages.map((ageTensor, i) => ({\n ageTensor,\n genderTensor: genders[i],\n }));\n\n const predictionsByBatch = await Promise.all(\n ageAndGenderTensors.map(async ({ ageTensor, genderTensor }) => {\n const age = (await ageTensor.data())[0];\n const probMale = (await genderTensor.data())[0];\n const isMale = probMale > 0.5;\n const gender = isMale ? Gender.MALE : Gender.FEMALE;\n const genderProbability = isMale ? probMale : (1 - probMale);\n\n ageTensor.dispose();\n genderTensor.dispose();\n return { age, gender, genderProbability };\n }),\n );\n out.age.dispose();\n out.gender.dispose();\n\n return netInput.isBatchInput ? predictionsByBatch as AgeAndGenderPrediction[] : predictionsByBatch[0] as AgeAndGenderPrediction;\n }\n\n protected getDefaultModelName(): string {\n return 'age_gender_model';\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights);\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const classifierWeightSize = (512 * 1 + 1) + (512 * 2 + 2);\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams, depthwiseSeparableConv } from '../common/index';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { range } from '../utils/index';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction conv(x: tf.Tensor4D, params: ConvParams, stride: [number, number]): tf.Tensor4D {\n return tf.add(tf.conv2d(x, params.filters, stride, 'same'), params.bias);\n}\n\nfunction reductionBlock(x: tf.Tensor4D, params: ReductionBlockParams, isActivateInput: boolean = true): tf.Tensor4D {\n let out = isActivateInput ? tf.relu(x) : x;\n out = depthwiseSeparableConv(out, params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = tf.maxPool(out, [3, 3], [2, 2], 'same');\n out = tf.add(out, conv(x, params.expansion_conv, [2, 2]));\n return out;\n}\n\nfunction mainBlock(x: tf.Tensor4D, params: MainBlockParams): tf.Tensor4D {\n let out = depthwiseSeparableConv(tf.relu(x), params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv2, [1, 1]);\n out = tf.add(out, x);\n return out;\n}\n\nexport class TinyXception extends NeuralNetwork {\n private _numMainBlocks: number\n\n constructor(numMainBlocks: number) {\n super('TinyXception');\n this._numMainBlocks = numMainBlocks;\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyXception - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = tf.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));\n out = reductionBlock(out, params.entry_flow.reduction_block_0, false);\n out = reductionBlock(out, params.entry_flow.reduction_block_1);\n\n range(this._numMainBlocks, 0, 1).forEach((idx) => {\n out = mainBlock(out, params.middle_flow[`main_block_${idx}`]);\n });\n\n out = reductionBlock(out, params.exit_flow.reduction_block);\n out = tf.relu(depthwiseSeparableConv(out, params.exit_flow.separable_conv, [1, 1]));\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_xception_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this._numMainBlocks);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights, this._numMainBlocks);\n }\n}\n", "import { extractConvParamsFactory, extractSeparableConvParamsFactory, extractWeightsFactory } from '../common/index';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractReductionBlockParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(channels: number, mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParams(weights: Float32Array, numMainBlocks: number): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const entry_flow_conv_in = extractConvParams(3, 32, 3, 'entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams(32, 64, 'entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams(64, 128, 'entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(128, `middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams(128, 256, 'exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams(256, 512, 'exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { entry_flow, middle_flow, exit_flow },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n disposeUnusedWeightTensors,\n extractWeightEntryFactory,\n loadSeparableConvParamsFactory,\n ParamMapping,\n} from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractReductionBlockParams(mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(`${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(`${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n numMainBlocks: number,\n): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const entry_flow_conv_in = extractConvParams('entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams('entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams('entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(`middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams('exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams('exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params: { entry_flow, middle_flow, exit_flow }, paramMappings };\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const age = extractFCParams(512, 1, 'fc/age');\n const gender = extractFCParams(512, 2, 'fc/gender');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc: { age, gender } },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: {\n age: extractFcParams('fc/age'),\n gender: extractFcParams('fc/gender'),\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FCParams } from '../common/index';\n\n// eslint-disable-next-line no-shadow\nexport enum Gender {\n // eslint-disable-next-line no-unused-vars\n FEMALE = 'female',\n // eslint-disable-next-line no-unused-vars\n MALE = 'male'\n}\n\nexport type AgeAndGenderPrediction = {\n age: number\n gender: Gender\n genderProbability: number\n}\n\nexport type NetOutput = { age: tf.Tensor1D, gender: tf.Tensor2D }\n\nexport type NetParams = {\n fc: {\n age: FCParams\n gender: FCParams\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { IDimensions, Point } from '../classes/index';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractorParams, TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { isEven } from '../utils/index';\n\nexport abstract class FaceLandmark68NetBase<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends FaceProcessor {\n public postProcess(output: tf.Tensor2D, inputSize: number, originalDimensions: IDimensions[]): tf.Tensor2D {\n const inputDimensions = originalDimensions.map(({ width, height }) => {\n const scale = inputSize / Math.max(height, width);\n return {\n width: width * scale,\n height: height * scale,\n };\n });\n\n const batchSize = inputDimensions.length;\n\n return tf.tidy(() => {\n const createInterleavedTensor = (fillX: number, fillY: number) => tf.stack([tf.fill([68], fillX, 'float32'), tf.fill([68], fillY, 'float32')], 1).as2D(1, 136).as1D();\n\n // eslint-disable-next-line no-unused-vars\n const getPadding = (batchIdx: number, cond: (w: number, h: number) => boolean): number => {\n const { width, height } = inputDimensions[batchIdx];\n return cond(width, height) ? Math.abs(width - height) / 2 : 0;\n };\n\n const getPaddingX = (batchIdx: number) => getPadding(batchIdx, (w, h) => w < h);\n const getPaddingY = (batchIdx: number) => getPadding(batchIdx, (w, h) => h < w);\n\n const landmarkTensors = output\n .mul(tf.fill([batchSize, 136], inputSize, 'float32'))\n .sub(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n getPaddingX(batchIdx),\n getPaddingY(batchIdx),\n ))))\n .div(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n inputDimensions[batchIdx].width,\n inputDimensions[batchIdx].height,\n ))));\n\n return landmarkTensors as tf.Tensor2D;\n });\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n return tf.tidy(() => {\n const out = this.runNet(input);\n return this.postProcess(\n out,\n input.inputSize as number,\n input.inputDimensions.map(([height, width]) => ({ height, width })),\n );\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async detectLandmarks(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const landmarkTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const landmarksForBatch = await Promise.all(landmarkTensors.map(\n async (landmarkTensor, batchIdx) => {\n const landmarksArray = Array.from(await landmarkTensor.data());\n const xCoords = landmarksArray.filter((_, i) => isEven(i));\n const yCoords = landmarksArray.filter((_, i) => !isEven(i));\n\n return new FaceLandmarks68(\n Array(68).fill(0).map((_, i) => new Point(xCoords[i] as number, yCoords[i] as number)),\n {\n height: netInput.getInputHeight(batchIdx),\n width: netInput.getInputWidth(batchIdx),\n },\n );\n },\n ));\n\n landmarkTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput ? landmarksForBatch as FaceLandmarks68[] : landmarksForBatch[0] as FaceLandmarks68;\n }\n\n protected getClassifierChannelsOut(): number {\n return 136;\n }\n}\n", "import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68Net extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceLandmark68Net', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock3 } from './denseBlock';\nimport { extractParamsFromWeigthMapTiny } from './extractParamsFromWeigthMapTiny';\nimport { extractParamsTiny } from './extractParamsTiny';\nimport { IFaceFeatureExtractor, TinyFaceFeatureExtractorParams } from './types';\n\nexport class TinyFaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('TinyFaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyFaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock3(normalized, params.dense0, true);\n out = denseBlock3(out, params.dense1);\n out = denseBlock3(out, params.dense2);\n out = tf.avgPool(out, [14, 14], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_tiny_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMapTiny(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParamsTiny(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMapTiny(\n weightMap: tf.NamedTensorMap,\n): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock3Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock3Params('dense0', true),\n dense1: extractDenseBlock3Params('dense1'),\n dense2: extractDenseBlock3Params('dense2'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsTiny(weights: Float32Array): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock3Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock3Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock3Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock3Params(64, 128, 'dense2');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { dense0, dense1, dense2 },\n };\n}\n", "import { TinyFaceFeatureExtractor } from '../faceFeatureExtractor/TinyFaceFeatureExtractor';\nimport { TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68TinyNet extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: TinyFaceFeatureExtractor = new TinyFaceFeatureExtractor()) {\n super('FaceLandmark68TinyNet', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_tiny_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 128;\n }\n}\n", "import { FaceLandmark68Net } from './FaceLandmark68Net';\n\nexport * from './FaceLandmark68Net';\nexport * from './FaceLandmark68TinyNet';\n\nexport class FaceLandmarkNet extends FaceLandmark68Net {}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { convDown } from './convLayer';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { residual, residualDown } from './residualLayer';\nimport { NetParams } from './types';\n\nexport class FaceRecognitionNet extends NeuralNetwork {\n constructor() {\n super('FaceRecognitionNet');\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceRecognitionNet - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(150, true).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(150, true), 'float32');\n\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = convDown(normalized, params.conv32_down);\n out = tf.maxPool(out, 3, 2, 'valid');\n\n out = residual(out, params.conv32_1);\n out = residual(out, params.conv32_2);\n out = residual(out, params.conv32_3);\n\n out = residualDown(out, params.conv64_down);\n out = residual(out, params.conv64_1);\n out = residual(out, params.conv64_2);\n out = residual(out, params.conv64_3);\n\n out = residualDown(out, params.conv128_down);\n out = residual(out, params.conv128_1);\n out = residual(out, params.conv128_2);\n\n out = residualDown(out, params.conv256_down);\n out = residual(out, params.conv256_1);\n out = residual(out, params.conv256_2);\n out = residualDown(out, params.conv256_down_out);\n\n const globalAvg = out.mean([1, 2]) as tf.Tensor2D;\n const fullyConnected = tf.matMul(globalAvg, params.fc);\n\n return fullyConnected;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async computeFaceDescriptor(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n\n const faceDescriptorTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const faceDescriptorsForBatch = await Promise.all(faceDescriptorTensors.map(\n (t) => t.data(),\n )) as Float32Array[];\n\n faceDescriptorTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput\n ? faceDescriptorsForBatch\n : faceDescriptorsForBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_recognition_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { scale } from './scaleLayer';\nimport { ConvLayerParams } from './types';\n\nfunction convLayer(\n x: tf.Tensor4D,\n params: ConvLayerParams,\n strides: [number, number],\n withRelu: boolean,\n padding: 'valid' | 'same' = 'same',\n): tf.Tensor4D {\n const { filters, bias } = params.conv;\n\n let out = tf.conv2d(x, filters, strides, padding);\n out = tf.add(out, bias);\n out = scale(out, params.scale);\n return withRelu ? tf.relu(out) : out;\n}\n\nexport function conv(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], true);\n}\n\nexport function convNoRelu(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], false);\n}\n\nexport function convDown(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [2, 2], true, 'valid');\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ScaleLayerParams } from './types';\n\nexport function scale(x: tf.Tensor4D, params: ScaleLayerParams): tf.Tensor4D {\n return tf.add(tf.mul(x, params.weights), params.biases);\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n ConvParams, extractWeightsFactory, ExtractWeightsFunction, ParamMapping,\n} from '../common/index';\nimport { isFloat } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractFilterValues(numFilterValues: number, numFilters: number, filterSize: number): tf.Tensor4D {\n const weights = extractWeights(numFilterValues);\n const depth = weights.length / (numFilters * filterSize * filterSize);\n\n if (isFloat(depth)) {\n throw new Error(`depth has to be an integer: ${depth}, weights.length: ${weights.length}, numFilters: ${numFilters}, filterSize: ${filterSize}`);\n }\n\n return tf.tidy(\n () => tf.transpose(\n tf.tensor4d(weights, [numFilters, depth, filterSize, filterSize]),\n [2, 3, 1, 0],\n ),\n );\n }\n\n function extractConvParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams {\n const filters = extractFilterValues(numFilterValues, numFilters, filterSize);\n const bias = tf.tensor1d(extractWeights(numFilters));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n }\n\n function extractScaleLayerParams(numWeights: number, mappedPrefix: string): ScaleLayerParams {\n const weights = tf.tensor1d(extractWeights(numWeights));\n const biases = tf.tensor1d(extractWeights(numWeights));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/biases` },\n );\n\n return {\n weights,\n biases,\n };\n }\n\n function extractConvLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvLayerParams {\n const conv = extractConvParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv`);\n const scale = extractScaleLayerParams(numFilters, `${mappedPrefix}/scale`);\n\n return { conv, scale };\n }\n\n function extractResidualLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n isDown: boolean = false,\n ): ResidualLayerParams {\n const conv1 = extractConvLayerParams((isDown ? 0.5 : 1) * numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv1`);\n const conv2 = extractConvLayerParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv2`);\n\n return { conv1, conv2 };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const conv32_down = extractConvLayerParams(4704, 32, 7, 'conv32_down');\n const conv32_1 = extractResidualLayerParams(9216, 32, 3, 'conv32_1');\n const conv32_2 = extractResidualLayerParams(9216, 32, 3, 'conv32_2');\n const conv32_3 = extractResidualLayerParams(9216, 32, 3, 'conv32_3');\n\n const conv64_down = extractResidualLayerParams(36864, 64, 3, 'conv64_down', true);\n const conv64_1 = extractResidualLayerParams(36864, 64, 3, 'conv64_1');\n const conv64_2 = extractResidualLayerParams(36864, 64, 3, 'conv64_2');\n const conv64_3 = extractResidualLayerParams(36864, 64, 3, 'conv64_3');\n\n const conv128_down = extractResidualLayerParams(147456, 128, 3, 'conv128_down', true);\n const conv128_1 = extractResidualLayerParams(147456, 128, 3, 'conv128_1');\n const conv128_2 = extractResidualLayerParams(147456, 128, 3, 'conv128_2');\n\n const conv256_down = extractResidualLayerParams(589824, 256, 3, 'conv256_down', true);\n const conv256_1 = extractResidualLayerParams(589824, 256, 3, 'conv256_1');\n const conv256_2 = extractResidualLayerParams(589824, 256, 3, 'conv256_2');\n const conv256_down_out = extractResidualLayerParams(589824, 256, 3, 'conv256_down_out');\n\n const fc = tf.tidy(\n () => tf.transpose(tf.tensor2d(extractWeights(256 * 128), [128, 256]), [1, 0]),\n );\n paramMappings.push({ paramPath: 'fc' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping } from '../common/index';\nimport { isTensor2D } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractScaleLayerParams(prefix: string): ScaleLayerParams {\n const weights = extractWeightEntry(`${prefix}/scale/weights`, 1);\n const biases = extractWeightEntry(`${prefix}/scale/biases`, 1);\n\n return { weights, biases };\n }\n\n function extractConvLayerParams(prefix: string): ConvLayerParams {\n const filters = extractWeightEntry(`${prefix}/conv/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/conv/bias`, 1);\n const scale = extractScaleLayerParams(prefix);\n\n return { conv: { filters, bias }, scale };\n }\n\n function extractResidualLayerParams(prefix: string): ResidualLayerParams {\n return {\n conv1: extractConvLayerParams(`${prefix}/conv1`),\n conv2: extractConvLayerParams(`${prefix}/conv2`),\n };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const conv32_down = extractConvLayerParams('conv32_down');\n const conv32_1 = extractResidualLayerParams('conv32_1');\n const conv32_2 = extractResidualLayerParams('conv32_2');\n const conv32_3 = extractResidualLayerParams('conv32_3');\n\n const conv64_down = extractResidualLayerParams('conv64_down');\n const conv64_1 = extractResidualLayerParams('conv64_1');\n const conv64_2 = extractResidualLayerParams('conv64_2');\n const conv64_3 = extractResidualLayerParams('conv64_3');\n\n const conv128_down = extractResidualLayerParams('conv128_down');\n const conv128_1 = extractResidualLayerParams('conv128_1');\n const conv128_2 = extractResidualLayerParams('conv128_2');\n\n const conv256_down = extractResidualLayerParams('conv256_down');\n const conv256_1 = extractResidualLayerParams('conv256_1');\n const conv256_2 = extractResidualLayerParams('conv256_2');\n const conv256_down_out = extractResidualLayerParams('conv256_down_out');\n\n const { fc } = weightMap;\n paramMappings.push({ originalPath: 'fc', paramPath: 'fc' });\n\n if (!isTensor2D(fc)) {\n throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${fc}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { conv, convDown, convNoRelu } from './convLayer';\nimport { ResidualLayerParams } from './types';\n\nexport function residual(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = conv(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n out = tf.add(out, x);\n out = tf.relu(out);\n return out;\n}\n\nexport function residualDown(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = convDown(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n\n let pooled = tf.avgPool(x, 2, 2, 'valid') as tf.Tensor4D;\n const zeros = tf.zeros(pooled.shape);\n const isPad = pooled.shape[3] !== out.shape[3];\n const isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2];\n\n if (isAdjustShape) {\n const padShapeX = [...out.shape] as [number, number, number, number];\n padShapeX[1] = 1;\n const zerosW = tf.zeros(padShapeX);\n out = tf.concat([out, zerosW], 1);\n\n const padShapeY = [...out.shape] as [number, number, number, number];\n padShapeY[2] = 1;\n const zerosH = tf.zeros(padShapeY);\n out = tf.concat([out, zerosH], 2);\n }\n\n pooled = isPad ? tf.concat([pooled, zeros], 3) : pooled;\n out = tf.add(pooled, out) as tf.Tensor4D;\n\n out = tf.relu(out);\n return out;\n}\n", "import { FaceRecognitionNet } from './FaceRecognitionNet';\n\nexport * from './FaceRecognitionNet';\n\nexport function createFaceRecognitionNet(weights: Float32Array) {\n const net = new FaceRecognitionNet();\n net.extractWeights(weights);\n return net;\n}\n", "export type WithFaceDescriptor = TSource & {\n descriptor: Float32Array\n}\n\nexport function extendWithFaceDescriptor<\n TSource\n>(\n sourceObj: TSource,\n descriptor: Float32Array,\n): WithFaceDescriptor {\n const extension = { descriptor };\n return { ...sourceObj, ...extension };\n}\n", "export type WithAge = TSource & {\n age: number\n}\n\nexport function isWithAge(obj: any): obj is WithAge<{}> {\n return typeof obj.age === 'number';\n}\n\nexport function extendWithAge<\n TSource\n>(\n sourceObj: TSource,\n age: number,\n): WithAge {\n const extension = { age };\n return { ...sourceObj, ...extension };\n}\n", "import { Gender } from '../ageGenderNet/types';\nimport { isValidProbablitiy } from '../utils/index';\n\nexport type WithGender = TSource & {\n gender: Gender\n genderProbability: number\n}\n\nexport function isWithGender(obj: any): obj is WithGender<{}> {\n return (obj.gender === Gender.MALE || obj.gender === Gender.FEMALE)\n && isValidProbablitiy(obj.genderProbability);\n}\n\nexport function extendWithGender<\n TSource\n>(\n sourceObj: TSource,\n gender: Gender,\n genderProbability: number,\n): WithGender {\n const extension = { gender, genderProbability };\n return { ...sourceObj, ...extension };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { mobileNetV1 } from './mobileNetV1';\nimport { nonMaxSuppression } from './nonMaxSuppression';\nimport { outputLayer } from './outputLayer';\nimport { predictionLayer } from './predictionLayer';\nimport { ISsdMobilenetv1Options, SsdMobilenetv1Options } from './SsdMobilenetv1Options';\nimport { NetParams } from './types';\n\nexport class SsdMobilenetv1 extends NeuralNetwork {\n constructor() {\n super('SsdMobilenetv1');\n }\n\n public forwardInput(input: NetInput) {\n const { params } = this;\n\n if (!params) {\n throw new Error('SsdMobilenetv1 - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(512, false).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(512, false), 'float32');\n\n const x = tf.sub(tf.mul(batchTensor, tf.scalar(0.007843137718737125)), tf.scalar(1)) as tf.Tensor4D;\n const features = mobileNetV1(x, params.mobilenetv1);\n\n const {\n boxPredictions,\n classPredictions,\n } = predictionLayer(features.out, features.conv11, params.prediction_layer);\n\n return outputLayer(boxPredictions, classPredictions, params.output_layer);\n });\n }\n\n public async forward(input: TNetInput) {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async locateFaces(\n input: TNetInput,\n options: ISsdMobilenetv1Options = {},\n ): Promise {\n const { maxResults, minConfidence } = new SsdMobilenetv1Options(options);\n\n const netInput = await toNetInput(input);\n\n const {\n boxes: _boxes,\n scores: _scores,\n } = this.forwardInput(netInput);\n\n // TODO batches\n const boxes = _boxes[0];\n const scores = _scores[0];\n for (let i = 1; i < _boxes.length; i++) {\n _boxes[i].dispose();\n _scores[i].dispose();\n }\n\n // TODO find a better way to filter by minConfidence\n const scoresData = Array.from(await scores.data());\n\n const iouThreshold = 0.5;\n const indices = nonMaxSuppression(\n boxes,\n scoresData as number[],\n maxResults,\n iouThreshold,\n minConfidence,\n );\n\n const reshapedDims = netInput.getReshapedInputDimensions(0);\n const inputSize = netInput.inputSize as number;\n const padX = inputSize / reshapedDims.width;\n const padY = inputSize / reshapedDims.height;\n\n const boxesData = boxes.arraySync();\n const results = indices\n .map((idx) => {\n const [top, bottom] = [\n Math.max(0, boxesData[idx][0]),\n Math.min(1.0, boxesData[idx][2]),\n ].map((val) => val * padY);\n const [left, right] = [\n Math.max(0, boxesData[idx][1]),\n Math.min(1.0, boxesData[idx][3]),\n ].map((val) => val * padX);\n return new FaceDetection(\n scoresData[idx] as number,\n new Rect(\n left,\n top,\n right - left,\n bottom - top,\n ),\n {\n height: netInput.getInputHeight(0),\n width: netInput.getInputWidth(0),\n },\n );\n });\n\n boxes.dispose();\n scores.dispose();\n\n return results;\n }\n\n protected getDefaultModelName(): string {\n return 'ssd_mobilenetv1_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n ExtractWeightsFunction, ParamMapping, ConvParams, extractWeightsFactory,\n} from '../common/index';\nimport {\n MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractDepthwiseConvParams(numChannels: number, mappedPrefix: string): MobileNetV1.DepthwiseConvParams {\n const filters = tf.tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]);\n const batch_norm_scale = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_offset = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_mean = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_variance = tf.tensor1d(extractWeights(numChannels));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/batch_norm_scale` },\n { paramPath: `${mappedPrefix}/batch_norm_offset` },\n { paramPath: `${mappedPrefix}/batch_norm_mean` },\n { paramPath: `${mappedPrefix}/batch_norm_variance` },\n );\n\n return {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n };\n }\n\n function extractConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n isPointwiseConv?: boolean,\n ): ConvParams {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/${isPointwiseConv ? 'batch_norm_offset' : 'bias'}` },\n );\n\n return { filters, bias };\n }\n\n function extractPointwiseConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): PointwiseConvParams {\n const {\n filters,\n bias,\n } = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true);\n\n return {\n filters,\n batch_norm_offset: bias,\n };\n }\n\n function extractConvPairParams(\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): MobileNetV1.ConvPairParams {\n const depthwise_conv = extractDepthwiseConvParams(channelsIn, `${mappedPrefix}/depthwise_conv`);\n const pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/pointwise_conv`);\n\n return { depthwise_conv, pointwise_conv };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n const conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0');\n\n const conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1');\n const conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2');\n const conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3');\n const conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4');\n const conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5');\n const conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6');\n const conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7');\n const conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8');\n const conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9');\n const conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10');\n const conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11');\n const conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12');\n const conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13');\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n conv_8,\n conv_9,\n conv_10,\n conv_11,\n conv_12,\n conv_13,\n };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n const conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0');\n const conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1');\n const conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2');\n const conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3');\n const conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4');\n const conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5');\n const conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6');\n const conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7');\n\n const box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor');\n const class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor');\n const box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor');\n const class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor');\n const box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor');\n const class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor');\n const box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor');\n const class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor');\n const box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor');\n const class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor');\n const box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor');\n const class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor');\n\n const box_predictor_0 = {\n box_encoding_predictor: box_encoding_0_predictor,\n class_predictor: class_predictor_0,\n };\n const box_predictor_1 = {\n box_encoding_predictor: box_encoding_1_predictor,\n class_predictor: class_predictor_1,\n };\n const box_predictor_2 = {\n box_encoding_predictor: box_encoding_2_predictor,\n class_predictor: class_predictor_2,\n };\n const box_predictor_3 = {\n box_encoding_predictor: box_encoding_3_predictor,\n class_predictor: class_predictor_3,\n };\n const box_predictor_4 = {\n box_encoding_predictor: box_encoding_4_predictor,\n class_predictor: class_predictor_4,\n };\n const box_predictor_5 = {\n box_encoding_predictor: box_encoding_5_predictor,\n class_predictor: class_predictor_5,\n };\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n box_predictor_0,\n box_predictor_1,\n box_predictor_2,\n box_predictor_3,\n box_predictor_4,\n box_predictor_5,\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const mobilenetv1 = extractMobilenetV1Params();\n const prediction_layer = extractPredictionLayerParams();\n const extra_dim = tf.tensor3d(\n extractWeights(5118 * 4),\n [1, 5118, 4],\n );\n const output_layer = {\n extra_dim,\n };\n\n paramMappings.push({ paramPath: 'output_layer/extra_dim' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n params: {\n mobilenetv1,\n prediction_layer,\n output_layer,\n },\n paramMappings,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n ConvParams, disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping,\n} from '../common/index';\nimport { isTensor3D } from '../utils/index';\nimport {\n BoxPredictionParams, MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractPointwiseConvParams(prefix: string, idx: number, mappedPrefix: string): PointwiseConvParams {\n const filters = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/weights`, 4, `${mappedPrefix}/filters`);\n const batch_norm_offset = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/convolution_bn_offset`, 1, `${mappedPrefix}/batch_norm_offset`);\n\n return { filters, batch_norm_offset };\n }\n\n function extractConvPairParams(idx: number): MobileNetV1.ConvPairParams {\n const mappedPrefix = `mobilenetv1/conv_${idx}`;\n const prefixDepthwiseConv = `MobilenetV1/Conv2d_${idx}_depthwise`;\n const mappedPrefixDepthwiseConv = `${mappedPrefix}/depthwise_conv`;\n const mappedPrefixPointwiseConv = `${mappedPrefix}/pointwise_conv`;\n\n const filters = extractWeightEntry(`${prefixDepthwiseConv}/depthwise_weights`, 4, `${mappedPrefixDepthwiseConv}/filters`);\n const batch_norm_scale = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/gamma`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_scale`);\n const batch_norm_offset = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/beta`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_offset`);\n const batch_norm_mean = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_mean`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_mean`);\n const batch_norm_variance = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_variance`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_variance`);\n\n return {\n depthwise_conv: {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n },\n pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv),\n };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n return {\n conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'),\n conv_1: extractConvPairParams(1),\n conv_2: extractConvPairParams(2),\n conv_3: extractConvPairParams(3),\n conv_4: extractConvPairParams(4),\n conv_5: extractConvPairParams(5),\n conv_6: extractConvPairParams(6),\n conv_7: extractConvPairParams(7),\n conv_8: extractConvPairParams(8),\n conv_9: extractConvPairParams(9),\n conv_10: extractConvPairParams(10),\n conv_11: extractConvPairParams(11),\n conv_12: extractConvPairParams(12),\n conv_13: extractConvPairParams(13),\n };\n }\n\n function extractConvParams(prefix: string, mappedPrefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/weights`, 4, `${mappedPrefix}/filters`);\n const bias = extractWeightEntry(`${prefix}/biases`, 1, `${mappedPrefix}/bias`);\n\n return { filters, bias };\n }\n\n function extractBoxPredictorParams(idx: number): BoxPredictionParams {\n const box_encoding_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/BoxEncodingPredictor`,\n `prediction_layer/box_predictor_${idx}/box_encoding_predictor`,\n );\n const class_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/ClassPredictor`,\n `prediction_layer/box_predictor_${idx}/class_predictor`,\n );\n\n return { box_encoding_predictor, class_predictor };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n return {\n conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'),\n conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'),\n conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'),\n conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'),\n conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'),\n conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'),\n conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'),\n conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'),\n box_predictor_0: extractBoxPredictorParams(0),\n box_predictor_1: extractBoxPredictorParams(1),\n box_predictor_2: extractBoxPredictorParams(2),\n box_predictor_3: extractBoxPredictorParams(3),\n box_predictor_4: extractBoxPredictorParams(4),\n box_predictor_5: extractBoxPredictorParams(5),\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const extra_dim = weightMap['Output/extra_dim'];\n paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' });\n\n if (!isTensor3D(extra_dim)) {\n throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${extra_dim}`);\n }\n\n const params = {\n mobilenetv1: extractMobilenetV1Params(),\n prediction_layer: extractPredictionLayerParams(),\n output_layer: {\n extra_dim,\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { MobileNetV1 } from './types';\n\nconst epsilon = 0.0010000000474974513;\n\nfunction depthwiseConvLayer(\n x: tf.Tensor4D,\n params: MobileNetV1.DepthwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.depthwiseConv2d(x, params.filters, strides, 'same');\n out = tf.batchNorm(\n out,\n params.batch_norm_mean,\n params.batch_norm_variance,\n params.batch_norm_offset,\n params.batch_norm_scale,\n epsilon,\n );\n return tf.clipByValue(out, 0, 6);\n });\n}\n\nfunction getStridesForLayerIdx(layerIdx: number): [number, number] {\n return [2, 4, 6, 12].some((idx) => idx === layerIdx) ? [2, 2] : [1, 1];\n}\n\nexport function mobileNetV1(x: tf.Tensor4D, params: MobileNetV1.Params) {\n return tf.tidy(() => {\n let conv11;\n let out = pointwiseConvLayer(x, params.conv_0, [2, 2]);\n\n const convPairParams = [\n params.conv_1,\n params.conv_2,\n params.conv_3,\n params.conv_4,\n params.conv_5,\n params.conv_6,\n params.conv_7,\n params.conv_8,\n params.conv_9,\n params.conv_10,\n params.conv_11,\n params.conv_12,\n params.conv_13,\n ];\n\n convPairParams.forEach((param, i) => {\n const layerIdx = i + 1;\n const depthwiseConvStrides = getStridesForLayerIdx(layerIdx);\n out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides);\n out = pointwiseConvLayer(out, param.pointwise_conv, [1, 1]);\n if (layerIdx === 11) {\n conv11 = out;\n }\n });\n\n if (conv11 === null) {\n throw new Error('mobileNetV1 - output of conv layer 11 is null');\n }\n\n return {\n out,\n conv11: conv11 as any,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { PointwiseConvParams } from './types';\n\nexport function pointwiseConvLayer(\n x: tf.Tensor4D,\n params: PointwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.conv2d(x, params.filters, strides, 'same');\n out = tf.add(out, params.batch_norm_offset);\n return tf.clipByValue(out, 0, 6);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nfunction IOU(boxes: tf.Tensor2D, i: number, j: number) {\n const boxesData = boxes.arraySync();\n const yminI = Math.min(boxesData[i][0], boxesData[i][2]);\n const xminI = Math.min(boxesData[i][1], boxesData[i][3]);\n const ymaxI = Math.max(boxesData[i][0], boxesData[i][2]);\n const xmaxI = Math.max(boxesData[i][1], boxesData[i][3]);\n const yminJ = Math.min(boxesData[j][0], boxesData[j][2]);\n const xminJ = Math.min(boxesData[j][1], boxesData[j][3]);\n const ymaxJ = Math.max(boxesData[j][0], boxesData[j][2]);\n const xmaxJ = Math.max(boxesData[j][1], boxesData[j][3]);\n const areaI = (ymaxI - yminI) * (xmaxI - xminI);\n const areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ);\n if (areaI <= 0 || areaJ <= 0) {\n return 0.0;\n }\n const intersectionYmin = Math.max(yminI, yminJ);\n const intersectionXmin = Math.max(xminI, xminJ);\n const intersectionYmax = Math.min(ymaxI, ymaxJ);\n const intersectionXmax = Math.min(xmaxI, xmaxJ);\n const intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0)\n * Math.max(intersectionXmax - intersectionXmin, 0.0);\n return intersectionArea / (areaI + areaJ - intersectionArea);\n}\n\nexport function nonMaxSuppression(\n boxes: tf.Tensor2D,\n scores: number[],\n maxOutputSize: number,\n iouThreshold: number,\n scoreThreshold: number,\n): number[] {\n const numBoxes = boxes.shape[0];\n const outputSize = Math.min(\n maxOutputSize,\n numBoxes,\n );\n\n const candidates = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .filter((c) => c.score > scoreThreshold)\n .sort((c1, c2) => c2.score - c1.score);\n\n const suppressFunc = (x: number) => (x <= iouThreshold ? 1 : 0);\n\n const selected: number[] = [];\n\n candidates.forEach((c) => {\n if (selected.length >= outputSize) {\n return;\n }\n const originalScore = c.score;\n\n for (let j = selected.length - 1; j >= 0; --j) {\n const iou = IOU(boxes, c.boxIndex, selected[j]);\n if (iou === 0.0) continue;\n c.score *= suppressFunc(iou);\n if (c.score <= scoreThreshold) break;\n }\n if (originalScore === c.score) {\n selected.push(c.boxIndex);\n }\n });\n\n return selected;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { OutputLayerParams } from './types';\n\nfunction getCenterCoordinatesAndSizesLayer(x: tf.Tensor2D) {\n const vec = tf.unstack(tf.transpose(x, [1, 0]));\n\n const sizes = [\n tf.sub(vec[2], vec[0]),\n tf.sub(vec[3], vec[1]),\n ];\n\n const centers = [\n tf.add(vec[0], tf.div(sizes[0], tf.scalar(2))),\n tf.add(vec[1], tf.div(sizes[1], tf.scalar(2))),\n ];\n\n return {\n sizes,\n centers,\n };\n}\n\nfunction decodeBoxesLayer(x0: tf.Tensor2D, x1: tf.Tensor2D) {\n const {\n sizes,\n centers,\n } = getCenterCoordinatesAndSizesLayer(x0);\n\n const vec = tf.unstack(tf.transpose(x1, [1, 0]));\n\n const div0_out = tf.div(tf.mul(tf.exp(tf.div(vec[2], tf.scalar(5))), sizes[0]), tf.scalar(2));\n const add0_out = tf.add(tf.mul(tf.div(vec[0], tf.scalar(10)), sizes[0]), centers[0]);\n\n const div1_out = tf.div(tf.mul(tf.exp(tf.div(vec[3], tf.scalar(5))), sizes[1]), tf.scalar(2));\n const add1_out = tf.add(tf.mul(tf.div(vec[1], tf.scalar(10)), sizes[1]), centers[1]);\n\n return tf.transpose(\n tf.stack([\n tf.sub(add0_out, div0_out),\n tf.sub(add1_out, div1_out),\n tf.add(add0_out, div0_out),\n tf.add(add1_out, div1_out),\n ]),\n [1, 0],\n );\n}\n\nexport function outputLayer(\n boxPredictions: tf.Tensor4D,\n classPredictions: tf.Tensor4D,\n params: OutputLayerParams,\n) {\n return tf.tidy(() => {\n const batchSize = boxPredictions.shape[0];\n\n let boxes = decodeBoxesLayer(\n tf.reshape(tf.tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]) as tf.Tensor2D,\n tf.reshape(boxPredictions, [-1, 4]) as tf.Tensor2D,\n );\n boxes = tf.reshape(\n boxes,\n [batchSize, (boxes.shape[0] / batchSize), 4],\n );\n\n const scoresAndClasses = tf.sigmoid(tf.slice(classPredictions, [0, 0, 1], [-1, -1, -1]));\n let scores = tf.slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]) as tf.Tensor;\n\n scores = tf.reshape(\n scores,\n [batchSize, scores.shape[1] as number],\n );\n\n const boxesByBatch = tf.unstack(boxes) as tf.Tensor2D[];\n const scoresByBatch = tf.unstack(scores) as tf.Tensor1D[];\n\n return {\n boxes: boxesByBatch,\n scores: scoresByBatch,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { boxPredictionLayer } from './boxPredictionLayer';\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { PredictionLayerParams } from './types';\n\nexport function predictionLayer(\n x: tf.Tensor4D,\n conv11: tf.Tensor4D,\n params: PredictionLayerParams,\n) {\n return tf.tidy(() => {\n const conv0 = pointwiseConvLayer(x, params.conv_0, [1, 1]);\n const conv1 = pointwiseConvLayer(conv0, params.conv_1, [2, 2]);\n const conv2 = pointwiseConvLayer(conv1, params.conv_2, [1, 1]);\n const conv3 = pointwiseConvLayer(conv2, params.conv_3, [2, 2]);\n const conv4 = pointwiseConvLayer(conv3, params.conv_4, [1, 1]);\n const conv5 = pointwiseConvLayer(conv4, params.conv_5, [2, 2]);\n const conv6 = pointwiseConvLayer(conv5, params.conv_6, [1, 1]);\n const conv7 = pointwiseConvLayer(conv6, params.conv_7, [2, 2]);\n\n const boxPrediction0 = boxPredictionLayer(conv11, params.box_predictor_0);\n const boxPrediction1 = boxPredictionLayer(x, params.box_predictor_1);\n const boxPrediction2 = boxPredictionLayer(conv1, params.box_predictor_2);\n const boxPrediction3 = boxPredictionLayer(conv3, params.box_predictor_3);\n const boxPrediction4 = boxPredictionLayer(conv5, params.box_predictor_4);\n const boxPrediction5 = boxPredictionLayer(conv7, params.box_predictor_5);\n\n const boxPredictions = tf.concat([\n boxPrediction0.boxPredictionEncoding,\n boxPrediction1.boxPredictionEncoding,\n boxPrediction2.boxPredictionEncoding,\n boxPrediction3.boxPredictionEncoding,\n boxPrediction4.boxPredictionEncoding,\n boxPrediction5.boxPredictionEncoding,\n ], 1) as tf.Tensor4D;\n\n const classPredictions = tf.concat([\n boxPrediction0.classPrediction,\n boxPrediction1.classPrediction,\n boxPrediction2.classPrediction,\n boxPrediction3.classPrediction,\n boxPrediction4.classPrediction,\n boxPrediction5.classPrediction,\n ], 1) as tf.Tensor4D;\n\n return {\n boxPredictions,\n classPredictions,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { convLayer } from '../common/index';\nimport { BoxPredictionParams } from './types';\n\nexport function boxPredictionLayer(\n x: tf.Tensor4D,\n params: BoxPredictionParams,\n) {\n return tf.tidy(() => {\n const batchSize = x.shape[0];\n\n const boxPredictionEncoding = tf.reshape(\n convLayer(x, params.box_encoding_predictor),\n [batchSize, -1, 1, 4],\n );\n const classPrediction = tf.reshape(\n convLayer(x, params.class_predictor),\n [batchSize, -1, 3],\n );\n\n return {\n boxPredictionEncoding,\n classPrediction,\n };\n });\n}\n", "export interface ISsdMobilenetv1Options {\n minConfidence?: number\n maxResults?: number\n}\n\nexport class SsdMobilenetv1Options {\n protected _name: string = 'SsdMobilenetv1Options'\n\n private _minConfidence: number\n\n private _maxResults: number\n\n constructor({ minConfidence, maxResults }: ISsdMobilenetv1Options = {}) {\n this._minConfidence = minConfidence || 0.5;\n this._maxResults = maxResults || 100;\n\n if (typeof this._minConfidence !== 'number' || this._minConfidence <= 0 || this._minConfidence >= 1) {\n throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);\n }\n\n if (typeof this._maxResults !== 'number') {\n throw new Error(`${this._name} - expected maxResults to be a number`);\n }\n }\n\n get minConfidence(): number { return this._minConfidence; }\n\n get maxResults(): number { return this._maxResults; }\n}\n", "import { SsdMobilenetv1 } from './SsdMobilenetv1';\n\nexport * from './SsdMobilenetv1';\nexport * from './SsdMobilenetv1Options';\n\nexport function createSsdMobilenetv1(weights: Float32Array) {\n const net = new SsdMobilenetv1();\n net.extractWeights(weights);\n return net;\n}\n\nexport function createFaceDetectionNet(weights: Float32Array) {\n return createSsdMobilenetv1(weights);\n}\n\n// alias for backward compatibily\nexport class FaceDetectionNet extends SsdMobilenetv1 {}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(0.738768, 0.874946),\n new Point(2.42204, 2.65704),\n new Point(4.30971, 7.04493),\n new Point(10.246, 4.59428),\n new Point(12.6868, 11.8741),\n];\n\nexport const BOX_ANCHORS_SEPARABLE = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB_SEPARABLE: [number, number, number] = [117.001, 114.697, 97.404];\n\nexport const DEFAULT_MODEL_NAME = 'tiny_yolov2_model';\nexport const DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model';\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { BoundingBox } from '../classes/BoundingBox';\nimport { Dimensions } from '../classes/Dimensions';\nimport { ObjectDetection } from '../classes/ObjectDetection';\nimport { convLayer } from '../common/index';\nimport { ConvParams, SeparableConvParams } from '../common/types';\nimport { toNetInput } from '../dom/index';\nimport { NetInput } from '../dom/NetInput';\nimport { TNetInput } from '../dom/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { sigmoid } from '../ops/index';\nimport { nonMaxSuppression } from '../ops/nonMaxSuppression';\nimport { normalize } from '../ops/normalize';\nimport { TinyYolov2Config, validateConfig } from './config';\nimport { convWithBatchNorm } from './convWithBatchNorm';\nimport { depthwiseSeparableConv } from './depthwiseSeparableConv';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { leaky } from './leaky';\nimport { ITinyYolov2Options, TinyYolov2Options } from './TinyYolov2Options';\nimport { DefaultTinyYolov2NetParams, MobilenetParams, TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2Base extends NeuralNetwork {\n public static DEFAULT_FILTER_SIZES = [\n 3, 16, 32, 64, 128, 256, 512, 1024, 1024,\n ]\n\n private _config: TinyYolov2Config\n\n constructor(config: TinyYolov2Config) {\n super('TinyYolov2');\n validateConfig(config);\n this._config = config;\n }\n\n public get config(): TinyYolov2Config {\n return this._config;\n }\n\n public get withClassScores(): boolean {\n return this.config.withClassScores || this.config.classes.length > 1;\n }\n\n public get boxEncodingSize(): number {\n return 5 + (this.withClassScores ? this.config.classes.length : 0);\n }\n\n public runTinyYolov2(x: tf.Tensor4D, params: DefaultTinyYolov2NetParams): tf.Tensor4D {\n let out = convWithBatchNorm(x, params.conv0);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = convWithBatchNorm(out, params.conv6);\n out = convWithBatchNorm(out, params.conv7);\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public runMobilenet(x: tf.Tensor4D, params: MobilenetParams): tf.Tensor4D {\n let out = this.config.isFirstLayerConv2d\n ? leaky(convLayer(x, params.conv0 as ConvParams, 'valid', false))\n : depthwiseSeparableConv(x, params.conv0 as SeparableConvParams);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = params.conv6 ? depthwiseSeparableConv(out, params.conv6) : out;\n out = params.conv7 ? depthwiseSeparableConv(out, params.conv7) : out;\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public forwardInput(input: NetInput, inputSize: number): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyYolov2 - load model before inference');\n }\n\n return tf.tidy(() => {\n // let batchTensor = input.toBatchTensor(inputSize, false).toFloat()\n let batchTensor = tf.cast(input.toBatchTensor(inputSize, false), 'float32');\n batchTensor = this.config.meanRgb\n ? normalize(batchTensor, this.config.meanRgb)\n : batchTensor;\n batchTensor = batchTensor.div(tf.scalar(256)) as tf.Tensor4D;\n\n return this.config.withSeparableConvs\n ? this.runMobilenet(batchTensor, params as MobilenetParams)\n : this.runTinyYolov2(batchTensor, params as DefaultTinyYolov2NetParams);\n });\n }\n\n public async forward(input: TNetInput, inputSize: number): Promise {\n return this.forwardInput(await toNetInput(input), inputSize);\n }\n\n public async detect(input: TNetInput, forwardParams: ITinyYolov2Options = {}): Promise {\n const { inputSize, scoreThreshold } = new TinyYolov2Options(forwardParams);\n\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput, inputSize);\n const out0 = tf.tidy(() => tf.unstack(out)[0].expandDims()) as tf.Tensor4D;\n\n const inputDimensions = {\n width: netInput.getInputWidth(0),\n height: netInput.getInputHeight(0),\n };\n\n const results = await this.extractBoxes(out0, netInput.getReshapedInputDimensions(0), scoreThreshold);\n out.dispose();\n out0.dispose();\n\n const boxes = results.map((res) => res.box);\n const scores = results.map((res) => res.score);\n const classScores = results.map((res) => res.classScore);\n const classNames = results.map((res) => this.config.classes[res.label]);\n\n const indices = nonMaxSuppression(\n boxes.map((box) => box.rescale(inputSize)),\n scores,\n this.config.iouThreshold,\n true,\n );\n\n const detections = indices.map((idx) => new ObjectDetection(\n scores[idx],\n classScores[idx],\n classNames[idx],\n boxes[idx],\n inputDimensions,\n ));\n\n return detections;\n }\n\n protected getDefaultModelName(): string {\n return '';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this.config);\n }\n\n protected extractParams(weights: Float32Array) {\n const filterSizes = this.config.filterSizes || TinyYolov2Base.DEFAULT_FILTER_SIZES;\n\n const numFilters = filterSizes ? filterSizes.length : undefined;\n if (numFilters !== 7 && numFilters !== 8 && numFilters !== 9) {\n throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${numFilters} filterSizes in config`);\n }\n return extractParams(weights, this.config, this.boxEncodingSize, filterSizes);\n }\n\n protected async extractBoxes(\n outputTensor: tf.Tensor4D,\n inputBlobDimensions: Dimensions,\n scoreThreshold?: number,\n ) {\n const { width, height } = inputBlobDimensions;\n const inputSize = Math.max(width, height);\n const correctionFactorX = inputSize / width;\n const correctionFactorY = inputSize / height;\n\n const numCells = outputTensor.shape[1];\n const numBoxes = this.config.anchors.length;\n\n const [boxesTensor, scoresTensor, classScoresTensor] = tf.tidy(() => {\n const reshaped = outputTensor.reshape([numCells, numCells, numBoxes, this.boxEncodingSize]);\n\n const boxes = reshaped.slice([0, 0, 0, 0], [numCells, numCells, numBoxes, 4]);\n const scores = reshaped.slice([0, 0, 0, 4], [numCells, numCells, numBoxes, 1]);\n const classScores = this.withClassScores\n ? tf.softmax(reshaped.slice([0, 0, 0, 5], [numCells, numCells, numBoxes, this.config.classes.length]), 3)\n : tf.scalar(0);\n return [boxes, scores, classScores];\n });\n\n const results = [] as any;\n\n const scoresData = await scoresTensor.array();\n const boxesData = await boxesTensor.array();\n for (let row = 0; row < numCells; row++) {\n for (let col = 0; col < numCells; col++) {\n for (let anchor = 0; anchor < numBoxes; anchor++) {\n const score = sigmoid(scoresData[row][col][anchor][0]);\n if (!scoreThreshold || score > scoreThreshold) {\n const ctX = ((col + sigmoid(boxesData[row][col][anchor][0])) / numCells) * correctionFactorX;\n const ctY = ((row + sigmoid(boxesData[row][col][anchor][1])) / numCells) * correctionFactorY;\n const widthLocal = ((Math.exp(boxesData[row][col][anchor][2]) * this.config.anchors[anchor].x) / numCells) * correctionFactorX;\n const heightLocal = ((Math.exp(boxesData[row][col][anchor][3]) * this.config.anchors[anchor].y) / numCells) * correctionFactorY;\n\n const x = (ctX - (widthLocal / 2));\n const y = (ctY - (heightLocal / 2));\n\n const pos = { row, col, anchor };\n const { classScore, label } = this.withClassScores\n ? await this.extractPredictedClass(classScoresTensor as tf.Tensor4D, pos)\n : { classScore: 1, label: 0 };\n\n results.push({\n box: new BoundingBox(x, y, x + widthLocal, y + heightLocal),\n score,\n classScore: score * classScore,\n label,\n ...pos,\n });\n }\n }\n }\n }\n\n boxesTensor.dispose();\n scoresTensor.dispose();\n classScoresTensor.dispose();\n\n return results;\n }\n\n private async extractPredictedClass(classesTensor: tf.Tensor4D, pos: { row: number, col: number, anchor: number }) {\n const { row, col, anchor } = pos;\n const classesData = await classesTensor.array();\n return Array(this.config.classes.length).fill(0)\n .map((_, i) => classesData[row][col][anchor][i])\n .map((classScore, label) => ({\n classScore,\n label,\n }))\n .reduce((max, curr) => (max.classScore > curr.classScore ? max : curr));\n }\n}\n", "import { Point } from '../classes/Point';\n\nexport type TinyYolov2Config = {\n withSeparableConvs: boolean\n iouThreshold: number\n anchors: Point[]\n classes: string[]\n meanRgb?: [number, number, number]\n withClassScores?: boolean,\n filterSizes?: number[]\n isFirstLayerConv2d?: boolean\n}\n\nconst isNumber = (arg: any) => typeof arg === 'number';\n\nexport function validateConfig(config: any) {\n if (!config) {\n throw new Error(`invalid config: ${config}`);\n }\n\n if (typeof config.withSeparableConvs !== 'boolean') {\n throw new Error(`config.withSeparableConvs has to be a boolean, have: ${config.withSeparableConvs}`);\n }\n\n if (!isNumber(config.iouThreshold) || config.iouThreshold < 0 || config.iouThreshold > 1.0) {\n throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${config.iouThreshold}`);\n }\n\n if (\n !Array.isArray(config.classes)\n || !config.classes.length\n || !config.classes.every((c: any) => typeof c === 'string')\n ) {\n throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(config.classes)}`);\n }\n\n if (\n !Array.isArray(config.anchors)\n || !config.anchors.length\n || !config.anchors.map((a: any) => a || {}).every((a: any) => isNumber(a.x) && isNumber(a.y))\n ) {\n throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(config.anchors)}`);\n }\n\n if (config.meanRgb && (\n !Array.isArray(config.meanRgb)\n || config.meanRgb.length !== 3\n || !config.meanRgb.every(isNumber)\n )) {\n throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(config.meanRgb)}`);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { leaky } from './leaky';\nimport { ConvWithBatchNorm } from './types';\n\nexport function convWithBatchNorm(x: tf.Tensor4D, params: ConvWithBatchNorm): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.conv2d(out, params.conv.filters, [1, 1], 'valid');\n out = tf.sub(out, params.bn.sub);\n out = tf.mul(out, params.bn.truediv);\n out = tf.add(out, params.conv.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nexport function leaky(x: tf.Tensor4D): tf.Tensor4D {\n return tf.tidy(() => {\n const min = tf.mul(x, tf.scalar(0.10000000149011612));\n return tf.add(tf.relu(tf.sub(x, min)), min);\n // return tf.maximum(x, min)\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { SeparableConvParams } from '../common/types';\nimport { leaky } from './leaky';\n\nexport function depthwiseSeparableConv(x: tf.Tensor4D, params: SeparableConvParams): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.separableConv2d(out, params.depthwise_filter, params.pointwise_filter, [1, 1], 'valid');\n out = tf.add(out, params.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { extractConvParamsFactory } from '../common/index';\nimport { extractSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightsFactory } from '../common/extractWeightsFactory';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n\n function extractBatchNormParams(size: number, mappedPrefix: string): BatchNorm {\n const sub = tf.tensor1d(extractWeights(size));\n const truediv = tf.tensor1d(extractWeights(size));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/sub` },\n { paramPath: `${mappedPrefix}/truediv` },\n );\n\n return { sub, truediv };\n }\n\n function extractConvWithBatchNormParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv`);\n const bn = extractBatchNormParams(channelsOut, `${mappedPrefix}/bn`);\n\n return { conv, bn };\n }\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParams(\n weights: Float32Array,\n config: TinyYolov2Config,\n boxEncodingSize: number,\n filterSizes: number[],\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n\n const conv0 = config.isFirstLayerConv2d\n ? extractConvParams(s0, s1, 3, 'conv0')\n : extractSeparableConvParams(s0, s1, 'conv0');\n const conv1 = extractSeparableConvParams(s1, s2, 'conv1');\n const conv2 = extractSeparableConvParams(s2, s3, 'conv2');\n const conv3 = extractSeparableConvParams(s3, s4, 'conv3');\n const conv4 = extractSeparableConvParams(s4, s5, 'conv4');\n const conv5 = extractSeparableConvParams(s5, s6, 'conv5');\n const conv6 = s7 ? extractSeparableConvParams(s6, s7, 'conv6') : undefined;\n const conv7 = s8 ? extractSeparableConvParams(s7, s8, 'conv7') : undefined;\n const conv8 = extractConvParams(s8 || s7 || s6, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n } else {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n const conv0 = extractConvWithBatchNormParams(s0, s1, 'conv0');\n const conv1 = extractConvWithBatchNormParams(s1, s2, 'conv1');\n const conv2 = extractConvWithBatchNormParams(s2, s3, 'conv2');\n const conv3 = extractConvWithBatchNormParams(s3, s4, 'conv3');\n const conv4 = extractConvWithBatchNormParams(s4, s5, 'conv4');\n const conv5 = extractConvWithBatchNormParams(s5, s6, 'conv5');\n const conv6 = extractConvWithBatchNormParams(s6, s7, 'conv6');\n const conv7 = extractConvWithBatchNormParams(s7, s8, 'conv7');\n const conv8 = extractConvParams(s8, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n }\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams } from '../common/index';\nimport { disposeUnusedWeightTensors } from '../common/disposeUnusedWeightTensors';\nimport { loadSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightEntryFactory } from '../common/extractWeightEntryFactory';\nimport { ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractBatchNormParams(prefix: string): BatchNorm {\n const sub = extractWeightEntry(`${prefix}/sub`, 1);\n const truediv = extractWeightEntry(`${prefix}/truediv`, 1);\n return { sub, truediv };\n }\n\n function extractConvParams(prefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { filters, bias };\n }\n\n function extractConvWithBatchNormParams(prefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(`${prefix}/conv`);\n const bn = extractBatchNormParams(`${prefix}/bn`);\n return { conv, bn };\n }\n\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n config: TinyYolov2Config,\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n // eslint-disable-next-line no-mixed-operators\n const numFilters = (config.filterSizes && config.filterSizes.length || 9);\n params = {\n conv0: config.isFirstLayerConv2d ? extractConvParams('conv0') : extractSeparableConvParams('conv0'),\n conv1: extractSeparableConvParams('conv1'),\n conv2: extractSeparableConvParams('conv2'),\n conv3: extractSeparableConvParams('conv3'),\n conv4: extractSeparableConvParams('conv4'),\n conv5: extractSeparableConvParams('conv5'),\n conv6: numFilters > 7 ? extractSeparableConvParams('conv6') : undefined,\n conv7: numFilters > 8 ? extractSeparableConvParams('conv7') : undefined,\n conv8: extractConvParams('conv8'),\n };\n } else {\n params = {\n conv0: extractConvWithBatchNormParams('conv0'),\n conv1: extractConvWithBatchNormParams('conv1'),\n conv2: extractConvWithBatchNormParams('conv2'),\n conv3: extractConvWithBatchNormParams('conv3'),\n conv4: extractConvWithBatchNormParams('conv4'),\n conv5: extractConvWithBatchNormParams('conv5'),\n conv6: extractConvWithBatchNormParams('conv6'),\n conv7: extractConvWithBatchNormParams('conv7'),\n conv8: extractConvParams('conv8'),\n };\n }\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "export interface ITinyYolov2Options {\n inputSize?: number\n scoreThreshold?: number\n}\n\nexport class TinyYolov2Options {\n protected _name: string = 'TinyYolov2Options'\n\n private _inputSize: number\n\n private _scoreThreshold: number\n\n constructor({ inputSize, scoreThreshold }: ITinyYolov2Options = {}) {\n this._inputSize = inputSize || 416;\n this._scoreThreshold = scoreThreshold || 0.5;\n\n if (typeof this._inputSize !== 'number' || this._inputSize % 32 !== 0) {\n throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);\n }\n\n if (typeof this._scoreThreshold !== 'number' || this._scoreThreshold <= 0 || this._scoreThreshold >= 1) {\n throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`);\n }\n }\n\n get inputSize(): number { return this._inputSize; }\n\n get scoreThreshold(): number { return this._scoreThreshold; }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/types';\nimport { TNetInput } from '../dom/types';\nimport {\n BOX_ANCHORS,\n BOX_ANCHORS_SEPARABLE,\n DEFAULT_MODEL_NAME,\n DEFAULT_MODEL_NAME_SEPARABLE_CONV,\n IOU_THRESHOLD,\n MEAN_RGB_SEPARABLE,\n} from './const';\nimport { TinyYolov2Base } from './TinyYolov2Base';\nimport { ITinyYolov2Options } from './TinyYolov2Options';\nimport { TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2 extends TinyYolov2Base {\n constructor(withSeparableConvs: boolean = true) {\n const config = {\n withSeparableConvs,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n ...(withSeparableConvs\n ? {\n anchors: BOX_ANCHORS_SEPARABLE,\n meanRgb: MEAN_RGB_SEPARABLE,\n }\n : {\n anchors: BOX_ANCHORS,\n withClassScores: true,\n }),\n };\n\n super(config);\n }\n\n public get withSeparableConvs(): boolean {\n return this.config.withSeparableConvs;\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME;\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { TinyYolov2 } from './TinyYolov2';\n\nexport * from './TinyYolov2Options';\n\nexport * from './config';\nexport * from './types';\n\nexport { TinyYolov2 };\n\nexport function createTinyYolov2(weights: Float32Array, withSeparableConvs: boolean = true) {\n const net = new TinyYolov2(withSeparableConvs);\n net.extractWeights(weights);\n return net;\n}\n", "import { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\n\nexport interface ITinyFaceDetectorOptions extends ITinyYolov2Options {}\n\nexport class TinyFaceDetectorOptions extends TinyYolov2Options {\n protected _name: string = 'TinyFaceDetectorOptions'\n}\n", "export class ComposableTask {\n public async then(\n // eslint-disable-next-line no-unused-vars\n onfulfilled: (value: T) => T | PromiseLike,\n ): Promise {\n return onfulfilled(await this.run());\n }\n\n public async run(): Promise {\n throw new Error('ComposableTask - run is not implemented');\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class DetectFaceLandmarksTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected useTinyLandmarkNet: boolean,\n ) {\n super();\n }\n\n protected get landmarkNet(): FaceLandmark68Net | FaceLandmark68TinyNet {\n return this.useTinyLandmarkNet\n ? nets.faceLandmark68TinyNet\n : nets.faceLandmark68Net;\n }\n}\n\nexport class DetectAllFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n const detections = parentResults.map((res) => res.detection);\n\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, detections)\n : await extractFaces(this.input, detections);\n\n const faceLandmarksByFace = await Promise.all(faces.map(\n (face) => this.landmarkNet.detectLandmarks(face),\n )) as FaceLandmarks68[];\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return parentResults.map((parentResult, i) => extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i]));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class DetectSingleFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { detection } = parentResult;\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, [detection])\n : await extractFaces(this.input, [detection]);\n\n const landmarks = await this.landmarkNet.detectLandmarks(faces[0]) as FaceLandmarks68;\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return extendWithFaceLandmarks(parentResult, landmarks);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\n\nexport async function extractAllFacesAndComputeResults, TResult>(\n parentResults: TSource[],\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResults: (faces: Array) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment: (parentResult: WithFaceLandmarks) => FaceDetection = ({ alignedRect }) => alignedRect,\n) {\n const faceBoxes = parentResults.map((parentResult) => (isWithFaceLandmarks(parentResult)\n ? getRectForAlignment(parentResult)\n : parentResult.detection));\n const faces: Array = extractedFaces || (\n input instanceof tf.Tensor\n ? await extractFaceTensors(input, faceBoxes)\n : await extractFaces(input, faceBoxes)\n );\n\n const results = await computeResults(faces);\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return results;\n}\n\nexport async function extractSingleFaceAndComputeResult, TResult>(\n parentResult: TSource,\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResult: (face: HTMLCanvasElement | tf.Tensor3D) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment?: (parentResultLocal: WithFaceLandmarks) => FaceDetection,\n) {\n return extractAllFacesAndComputeResults(\n [parentResult],\n input,\n async (faces) => computeResult(faces[0]),\n extractedFaces,\n getRectForAlignment,\n );\n}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB: [number, number, number] = [117.001, 114.697, 97.404];\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/index';\nimport { TNetInput } from '../dom/index';\nimport { ITinyYolov2Options } from '../tinyYolov2/index';\nimport { TinyYolov2Base } from '../tinyYolov2/TinyYolov2Base';\nimport { TinyYolov2NetParams } from '../tinyYolov2/types';\nimport { BOX_ANCHORS, IOU_THRESHOLD, MEAN_RGB } from './const';\n\nexport class TinyFaceDetector extends TinyYolov2Base {\n constructor() {\n const config = {\n withSeparableConvs: true,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n anchors: BOX_ANCHORS,\n meanRgb: MEAN_RGB,\n isFirstLayerConv2d: true,\n filterSizes: [3, 16, 32, 64, 128, 256, 512],\n };\n\n super(config);\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_face_detector_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { AgeGenderNet } from '../ageGenderNet/AgeGenderNet';\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet';\nimport { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { ITinyYolov2Options, TinyYolov2 } from '../tinyYolov2/index';\n\nexport const nets = {\n ssdMobilenetv1: new SsdMobilenetv1(),\n tinyFaceDetector: new TinyFaceDetector(),\n tinyYolov2: new TinyYolov2(),\n faceLandmark68Net: new FaceLandmark68Net(),\n faceLandmark68TinyNet: new FaceLandmark68TinyNet(),\n faceRecognitionNet: new FaceRecognitionNet(),\n faceExpressionNet: new FaceExpressionNet(),\n ageGenderNet: new AgeGenderNet(),\n};\n\n/**\n * Attempts to detect all faces in an image using SSD Mobilenetv1 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const ssdMobilenetv1 = (input: TNetInput, options: SsdMobilenetv1Options): Promise => nets.ssdMobilenetv1.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Face Detector.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyFaceDetector = (input: TNetInput, options: TinyFaceDetectorOptions): Promise => nets.tinyFaceDetector.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Yolov2 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyYolov2Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyYolov2 = (input: TNetInput, options: ITinyYolov2Options): Promise => nets.tinyYolov2.locateFaces(input, options);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarks = (input: TNetInput): Promise => nets.faceLandmark68Net.detectLandmarks(input);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image\n * using a tinier version of the 68 point face landmark model, which is slightly\n * faster at inference, but also slightly less accurate.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarksTiny = (input: TNetInput): Promise => nets.faceLandmark68TinyNet.detectLandmarks(input);\n\n/**\n * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image,\n * which uniquely represents the features of that persons face. The computed face descriptor can\n * be used to measure the similarity between faces, by computing the euclidean distance of two\n * face descriptors.\n *\n * @param inputs The face image extracted from the aligned bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Face descriptor with 128 entries or array thereof in case of batch input.\n */\nexport const computeFaceDescriptor = (input: TNetInput): Promise => nets.faceRecognitionNet.computeFaceDescriptor(input);\n\n/**\n * Recognizes the facial expressions from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Facial expressions with corresponding probabilities or array thereof in case of batch input.\n */\nexport const recognizeFaceExpressions = (input: TNetInput): Promise => nets.faceExpressionNet.predictExpressions(input);\n\n/**\n * Predicts age and gender from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Predictions with age, gender and gender probability or array thereof in case of batch input.\n */\nexport const predictAgeAndGender = (input: TNetInput): Promise => nets.ageGenderNet.predictAgeAndGender(input);\n\nexport const loadSsdMobilenetv1Model = (url: string) => nets.ssdMobilenetv1.load(url);\nexport const loadTinyFaceDetectorModel = (url: string) => nets.tinyFaceDetector.load(url);\nexport const loadTinyYolov2Model = (url: string) => nets.tinyYolov2.load(url);\nexport const loadFaceLandmarkModel = (url: string) => nets.faceLandmark68Net.load(url);\nexport const loadFaceLandmarkTinyModel = (url: string) => nets.faceLandmark68TinyNet.load(url);\nexport const loadFaceRecognitionModel = (url: string) => nets.faceRecognitionNet.load(url);\nexport const loadFaceExpressionModel = (url: string) => nets.faceExpressionNet.load(url);\nexport const loadAgeGenderModel = (url: string) => nets.ageGenderNet.load(url);\n\n// backward compatibility\nexport const loadFaceDetectionModel = loadSsdMobilenetv1Model;\nexport const locateFaces = ssdMobilenetv1;\nexport const detectLandmarks = detectFaceLandmarks;\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm.js';\n\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderTask,\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\n\nexport class PredictFaceExpressionsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const faceExpressionsByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map(\n (parentResult, i) => extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]),\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const faceExpressions = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithFaceExpressions(parentResult, faceExpressions);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictAllFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm.js';\n\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { TNetInput } from '../dom/index';\nimport { extendWithAge, WithAge } from '../factories/WithAge';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { extendWithGender, WithGender } from '../factories/WithGender';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllFaceExpressionsTask,\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class PredictAgeAndGenderTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase>[], TSource[]> {\n public async run(): Promise>[]> {\n const parentResults = await this.parentTask;\n\n const ageAndGenderByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map((parentResult, i) => {\n const { age, gender, genderProbability } = ageAndGenderByFace[i];\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n });\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase> | undefined, TSource | undefined> {\n public async run(): Promise> | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { age, gender, genderProbability } = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictAllAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDescriptor, WithFaceDescriptor } from '../factories/WithFaceDescriptor';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class ComputeFaceDescriptorsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n ) {\n super();\n }\n}\n\nexport class ComputeAllFaceDescriptorsTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const descriptors = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n (faces) => Promise.all(faces.map((face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise)),\n null,\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return descriptors.map((descriptor, i) => extendWithFaceDescriptor(parentResults[i], descriptor));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n\nexport class ComputeSingleFaceDescriptorTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n const descriptor = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise,\n null,\n // eslint-disable-next-line no-shadow\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return extendWithFaceDescriptor(parentResult, descriptor);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { TinyYolov2Options } from '../tinyYolov2/index';\nimport { ComposableTask } from './ComposableTask';\nimport { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';\nimport { nets } from './nets';\nimport { PredictAllAgeAndGenderTask, PredictSingleAgeAndGenderTask } from './PredictAgeAndGenderTask';\nimport { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionsTask } from './PredictFaceExpressionsTask';\nimport { FaceDetectionOptions } from './types';\n\nexport class DetectFacesTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n ) {\n super();\n }\n}\n\nexport class DetectAllFacesTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const { input, options } = this;\n\n // eslint-disable-next-line no-nested-ternary\n const faceDetectionFunction = options instanceof TinyFaceDetectorOptions\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyFaceDetector.locateFaces(input, options)\n : (\n // eslint-disable-next-line no-nested-ternary\n options instanceof SsdMobilenetv1Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.ssdMobilenetv1.locateFaces(input, options)\n : (\n options instanceof TinyYolov2Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyYolov2.locateFaces(input, options)\n : null\n )\n );\n\n if (!faceDetectionFunction) {\n throw new Error('detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options');\n }\n\n return faceDetectionFunction(input);\n }\n\n private runAndExtendWithFaceDetections(): Promise[]> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise[]>(async (resolve) => {\n const detections = await this.run();\n resolve(detections.map((detection) => extendWithFaceDetection({}, detection)));\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectAllFaceLandmarksTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n}\n\nexport class DetectSingleFaceTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const faceDetections = await new DetectAllFacesTask(this.input, this.options);\n let faceDetectionWithHighestScore = faceDetections[0];\n faceDetections.forEach((faceDetection) => {\n if (faceDetection.score > faceDetectionWithHighestScore.score) {\n faceDetectionWithHighestScore = faceDetection;\n }\n });\n return faceDetectionWithHighestScore;\n }\n\n private runAndExtendWithFaceDetection(): Promise | undefined> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise | undefined>(async (resolve) => {\n const detection = await this.run();\n resolve(detection ? extendWithFaceDetection<{}>({}, detection) : undefined);\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectSingleFaceLandmarksTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n}\n", "import { TNetInput } from '../dom/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { DetectAllFacesTask, DetectSingleFaceTask } from './DetectFacesTasks';\nimport { FaceDetectionOptions } from './types';\n\nexport function detectSingleFace(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectSingleFaceTask {\n return new DetectSingleFaceTask(input, options);\n}\n\nexport function detectAllFaces(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectAllFacesTask {\n return new DetectAllFacesTask(input, options);\n}\n", "import { TNetInput } from '../dom/index';\nimport { WithFaceDescriptor, WithFaceDetection, WithFaceLandmarks } from '../factories/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/index';\nimport { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\nimport { detectAllFaces } from './detectFaces';\n\n// export allFaces API for backward compatibility\n\nexport async function allFacesSsdMobilenetv1(\n input: TNetInput,\n minConfidence?: number,\n): Promise>>[]> {\n return detectAllFaces(input, new SsdMobilenetv1Options(minConfidence ? { minConfidence } : {}))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport async function allFacesTinyYolov2(\n input: TNetInput,\n forwardParams: ITinyYolov2Options = {},\n): Promise>>[]> {\n return detectAllFaces(input, new TinyYolov2Options(forwardParams))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport const allFaces = allFacesSsdMobilenetv1;\n", "export function euclideanDistance(arr1: number[] | Float32Array, arr2: number[] | Float32Array) {\n if (arr1.length !== arr2.length)\n throw new Error('euclideanDistance: arr1.length !== arr2.length')\n\n const desc1 = Array.from(arr1)\n const desc2 = Array.from(arr2)\n\n return Math.sqrt(\n desc1\n .map((val, i) => val - desc2[i])\n .reduce((res, diff) => res + Math.pow(diff, 2), 0)\n )\n}", "import { FaceMatch } from '../classes/FaceMatch';\nimport { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors';\nimport { euclideanDistance } from '../euclideanDistance';\nimport { WithFaceDescriptor } from '../factories/index';\n\nexport class FaceMatcher {\n private _labeledDescriptors: LabeledFaceDescriptors[]\n\n private _distanceThreshold: number\n\n constructor(\n inputs: LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>,\n distanceThreshold: number = 0.6,\n ) {\n this._distanceThreshold = distanceThreshold;\n\n const inputArray = Array.isArray(inputs) ? inputs : [inputs];\n\n if (!inputArray.length) {\n throw new Error('FaceRecognizer.constructor - expected atleast one input');\n }\n\n let count = 1;\n const createUniqueLabel = () => `person ${count++}`;\n\n this._labeledDescriptors = inputArray.map((desc) => {\n if (desc instanceof LabeledFaceDescriptors) {\n return desc;\n }\n\n if (desc instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc]);\n }\n\n if (desc.descriptor && desc.descriptor instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]);\n }\n\n throw new Error('FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>');\n });\n }\n\n public get labeledDescriptors(): LabeledFaceDescriptors[] { return this._labeledDescriptors; }\n\n public get distanceThreshold(): number { return this._distanceThreshold; }\n\n public computeMeanDistance(queryDescriptor: Float32Array, descriptors: Float32Array[]): number {\n return descriptors\n .map((d) => euclideanDistance(d, queryDescriptor))\n .reduce((d1, d2) => d1 + d2, 0)\n / (descriptors.length || 1);\n }\n\n public matchDescriptor(queryDescriptor: Float32Array): FaceMatch {\n return this.labeledDescriptors\n .map(({ descriptors, label }) => new FaceMatch(\n label,\n this.computeMeanDistance(queryDescriptor, descriptors),\n ))\n .reduce((best, curr) => (best.distance < curr.distance ? best : curr));\n }\n\n public findBestMatch(queryDescriptor: Float32Array): FaceMatch {\n const bestMatch = this.matchDescriptor(queryDescriptor);\n return bestMatch.distance < this.distanceThreshold\n ? bestMatch\n : new FaceMatch('unknown', bestMatch.distance);\n }\n\n public toJSON(): any {\n return {\n distanceThreshold: this.distanceThreshold,\n labeledDescriptors: this.labeledDescriptors.map((ld) => ld.toJSON()),\n };\n }\n\n public static fromJSON(json: any): FaceMatcher {\n const labeledDescriptors = json.labeledDescriptors\n .map((ld: any) => LabeledFaceDescriptors.fromJSON(ld));\n return new FaceMatcher(labeledDescriptors, json.distanceThreshold);\n }\n}\n", "import { TinyFaceDetector } from './TinyFaceDetector';\n\nexport * from './TinyFaceDetector';\nexport * from './TinyFaceDetectorOptions';\n\nexport function createTinyFaceDetector(weights: Float32Array) {\n const net = new TinyFaceDetector();\n net.extractWeights(weights);\n return net;\n}\n", "import { Dimensions, IDimensions } from './classes/index';\nimport { FaceDetection } from './classes/FaceDetection';\nimport { FaceLandmarks } from './classes/FaceLandmarks';\nimport { extendWithFaceDetection, isWithFaceDetection } from './factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, isWithFaceLandmarks } from './factories/WithFaceLandmarks';\n\nexport function resizeResults(results: T, dimensions: IDimensions): T {\n\n const { width, height } = new Dimensions(dimensions.width, dimensions.height)\n\n if (width <= 0 || height <= 0) {\n throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({ width, height })}`)\n }\n\n if (Array.isArray(results)) {\n // return results.map(obj => resizeResults(obj, { width, height })) as any as T\n return (results as Array).map(obj => resizeResults(obj, { width, height } as IDimensions)) as any as T\n }\n\n if (isWithFaceLandmarks(results)) {\n const resizedDetection = results.detection.forSize(width, height)\n const resizedLandmarks = results.unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height)\n return extendWithFaceLandmarks(extendWithFaceDetection(results, resizedDetection), resizedLandmarks)\n }\n\n if (isWithFaceDetection(results)) {\n return extendWithFaceDetection(results, results.detection.forSize(width, height))\n }\n\n if (results instanceof FaceLandmarks || results instanceof FaceDetection) {\n return (results as any).forSize(width, height)\n }\n\n return results\n}"], + "sources": ["../src/tfjs/tf-node-gpu.ts", "../src/env/isNodejs.ts", "../src/index.ts", "../src/draw/index.ts", "../src/draw/drawContour.ts", "../src/utils/index.ts", "../src/classes/Dimensions.ts", "../src/classes/Point.ts", "../src/classes/Box.ts", "../src/classes/BoundingBox.ts", "../src/classes/ObjectDetection.ts", "../src/classes/FaceDetection.ts", "../src/ops/iou.ts", "../src/ops/minBbox.ts", "../src/ops/nonMaxSuppression.ts", "../src/ops/normalize.ts", "../src/ops/padToSquare.ts", "../src/ops/shuffleArray.ts", "../src/ops/index.ts", "../src/classes/Rect.ts", "../src/classes/FaceLandmarks.ts", "../src/classes/FaceLandmarks5.ts", "../src/classes/FaceLandmarks68.ts", "../src/classes/FaceMatch.ts", "../src/classes/LabeledBox.ts", "../src/classes/LabeledFaceDescriptors.ts", "../src/classes/PredictedBox.ts", "../src/factories/WithFaceDetection.ts", "../src/env/createBrowserEnv.ts", "../src/env/createFileSystem.ts", "../src/env/createNodejsEnv.ts", "../src/env/isBrowser.ts", "../src/env/index.ts", "../src/dom/resolveInput.ts", "../src/dom/getContext2dOrThrow.ts", "../src/draw/DrawTextField.ts", "../src/draw/DrawBox.ts", "../src/draw/drawDetections.ts", "../src/faceExpressionNet/FaceExpressionNet.ts", "../src/dom/isMediaLoaded.ts", "../src/dom/awaitMediaLoaded.ts", "../src/dom/bufferToImage.ts", "../src/dom/getMediaDimensions.ts", "../src/dom/createCanvas.ts", "../src/dom/imageTensorToCanvas.ts", "../src/dom/isMediaElement.ts", "../src/dom/NetInput.ts", "../src/dom/imageToSquare.ts", "../src/dom/toNetInput.ts", "../src/dom/extractFaces.ts", "../src/dom/extractFaceTensors.ts", "../src/dom/fetchOrThrow.ts", "../src/dom/fetchImage.ts", "../src/dom/fetchJson.ts", "../src/dom/fetchNetWeights.ts", "../src/dom/loadWeightMap.ts", "../src/common/getModelUris.ts", "../src/dom/matchDimensions.ts", "../src/faceFeatureExtractor/FaceFeatureExtractor.ts", "../src/NeuralNetwork.ts", "../src/faceFeatureExtractor/denseBlock.ts", "../src/common/depthwiseSeparableConv.ts", "../src/common/convLayer.ts", "../src/common/disposeUnusedWeightTensors.ts", "../src/common/extractConvParamsFactory.ts", "../src/common/extractFCParamsFactory.ts", "../src/common/extractSeparableConvParamsFactory.ts", "../src/common/types.ts", "../src/common/extractWeightEntryFactory.ts", "../src/common/extractWeightsFactory.ts", "../src/faceFeatureExtractor/extractorsFactory.ts", "../src/faceFeatureExtractor/extractParams.ts", "../src/common/loadConvParamsFactory.ts", "../src/faceFeatureExtractor/loadParamsFactory.ts", "../src/faceFeatureExtractor/extractParamsFromWeigthMap.ts", "../src/faceProcessor/FaceProcessor.ts", "../src/common/fullyConnectedLayer.ts", "../src/faceProcessor/extractParams.ts", "../src/faceProcessor/extractParamsFromWeigthMap.ts", "../src/faceProcessor/util.ts", "../src/faceExpressionNet/FaceExpressions.ts", "../src/factories/WithFaceExpressions.ts", "../src/draw/drawFaceExpressions.ts", "../src/factories/WithFaceLandmarks.ts", "../src/draw/DrawFaceLandmarks.ts", "../src/ageGenderNet/AgeGenderNet.ts", "../src/xception/TinyXception.ts", "../src/xception/extractParams.ts", "../src/xception/extractParamsFromWeigthMap.ts", "../src/ageGenderNet/extractParams.ts", "../src/ageGenderNet/extractParamsFromWeigthMap.ts", "../src/ageGenderNet/types.ts", "../src/faceLandmarkNet/FaceLandmark68NetBase.ts", "../src/faceLandmarkNet/FaceLandmark68Net.ts", "../src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts", "../src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts", "../src/faceFeatureExtractor/extractParamsTiny.ts", "../src/faceLandmarkNet/FaceLandmark68TinyNet.ts", "../src/faceLandmarkNet/index.ts", "../src/faceRecognitionNet/FaceRecognitionNet.ts", "../src/faceRecognitionNet/convLayer.ts", "../src/faceRecognitionNet/scaleLayer.ts", "../src/faceRecognitionNet/extractParams.ts", "../src/faceRecognitionNet/extractParamsFromWeigthMap.ts", "../src/faceRecognitionNet/residualLayer.ts", "../src/faceRecognitionNet/index.ts", "../src/factories/WithFaceDescriptor.ts", "../src/factories/WithAge.ts", "../src/factories/WithGender.ts", "../src/ssdMobilenetv1/SsdMobilenetv1.ts", "../src/ssdMobilenetv1/extractParams.ts", "../src/ssdMobilenetv1/extractParamsFromWeigthMap.ts", "../src/ssdMobilenetv1/mobileNetV1.ts", "../src/ssdMobilenetv1/pointwiseConvLayer.ts", "../src/ssdMobilenetv1/nonMaxSuppression.ts", "../src/ssdMobilenetv1/outputLayer.ts", "../src/ssdMobilenetv1/predictionLayer.ts", "../src/ssdMobilenetv1/boxPredictionLayer.ts", "../src/ssdMobilenetv1/SsdMobilenetv1Options.ts", "../src/ssdMobilenetv1/index.ts", "../src/tinyYolov2/const.ts", "../src/tinyYolov2/TinyYolov2Base.ts", "../src/tinyYolov2/config.ts", "../src/tinyYolov2/convWithBatchNorm.ts", "../src/tinyYolov2/leaky.ts", "../src/tinyYolov2/depthwiseSeparableConv.ts", "../src/tinyYolov2/extractParams.ts", "../src/tinyYolov2/extractParamsFromWeigthMap.ts", "../src/tinyYolov2/TinyYolov2Options.ts", "../src/tinyYolov2/TinyYolov2.ts", "../src/tinyYolov2/index.ts", "../src/tinyFaceDetector/TinyFaceDetectorOptions.ts", "../src/globalApi/ComposableTask.ts", "../src/globalApi/DetectFaceLandmarksTasks.ts", "../src/globalApi/extractFacesAndComputeResults.ts", "../src/tinyFaceDetector/const.ts", "../src/tinyFaceDetector/TinyFaceDetector.ts", "../src/globalApi/nets.ts", "../src/globalApi/PredictFaceExpressionsTask.ts", "../src/globalApi/PredictAgeAndGenderTask.ts", "../src/globalApi/ComputeFaceDescriptorsTasks.ts", "../src/globalApi/DetectFacesTasks.ts", "../src/globalApi/detectFaces.ts", "../src/globalApi/allFaces.ts", "../src/euclideanDistance.ts", "../src/globalApi/FaceMatcher.ts", "../src/tinyFaceDetector/index.ts", "../src/resizeResults.ts"], + "sourcesContent": ["/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable node/no-unpublished-import */\n\nexport * from '@tensorflow/tfjs-node-gpu';\n", "export function isNodejs(): boolean {\n return typeof global === 'object'\n && typeof require === 'function'\n && typeof module !== 'undefined'\n // issues with gatsby.js: module.exports is undefined\n // && !!module.exports\n && typeof process !== 'undefined' && !!process.version;\n}\n", "import * as tf from '../dist/tfjs.esm';\nimport * as draw from './draw/index';\nimport * as utils from './utils/index';\nimport * as pkg from '../package.json';\n\nexport { tf, draw, utils };\n\nexport * from './ageGenderNet/index';\nexport * from './classes/index';\nexport * from './dom/index';\nexport * from './env/index';\nexport * from './faceExpressionNet/index';\nexport * from './faceLandmarkNet/index';\nexport * from './faceRecognitionNet/index';\nexport * from './factories/index';\nexport * from './globalApi/index';\nexport * from './ops/index';\nexport * from './ssdMobilenetv1/index';\nexport * from './tinyFaceDetector/index';\nexport * from './tinyYolov2/index';\nexport * from './euclideanDistance';\nexport * from './NeuralNetwork';\nexport * from './resizeResults';\n\nconst node = (typeof process !== 'undefined');\n// eslint-disable-next-line no-undef\nconst browser = (typeof navigator !== 'undefined') && (typeof navigator.userAgent !== 'undefined');\nexport const version = { faceapi: pkg.version as string, node, browser };\n", "export * from './drawContour';\nexport * from './drawDetections';\nexport * from './drawFaceExpressions';\nexport * from './DrawBox';\nexport * from './DrawFaceLandmarks';\nexport * from './DrawTextField';\n", "import { Point } from '../classes/index';\n\nexport function drawContour(\n ctx: CanvasRenderingContext2D,\n points: Point[],\n isClosed: boolean = false,\n) {\n ctx.beginPath();\n\n points.slice(1).forEach(({ x, y }, prevIdx) => {\n const from = points[prevIdx];\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(x, y);\n });\n\n if (isClosed) {\n const from = points[points.length - 1];\n const to = points[0];\n if (!from || !to) {\n return;\n }\n\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n }\n\n ctx.stroke();\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Point } from '../classes/index';\nimport { Dimensions, IDimensions } from '../classes/Dimensions';\n\nexport function isTensor(tensor: any, dim: number) {\n return tensor instanceof tf.Tensor && tensor.shape.length === dim;\n}\n\nexport function isTensor1D(tensor: any): tensor is tf.Tensor1D {\n return isTensor(tensor, 1);\n}\n\nexport function isTensor2D(tensor: any): tensor is tf.Tensor2D {\n return isTensor(tensor, 2);\n}\n\nexport function isTensor3D(tensor: any): tensor is tf.Tensor3D {\n return isTensor(tensor, 3);\n}\n\nexport function isTensor4D(tensor: any): tensor is tf.Tensor4D {\n return isTensor(tensor, 4);\n}\n\nexport function isFloat(num: number) {\n return num % 1 !== 0;\n}\n\nexport function isEven(num: number) {\n return num % 2 === 0;\n}\n\nexport function round(num: number, prec: number = 2) {\n const f = 10 ** prec;\n return Math.floor(num * f) / f;\n}\n\nexport function isDimensions(obj: any): boolean {\n return obj && obj.width && obj.height;\n}\n\nexport function computeReshapedDimensions({ width, height }: IDimensions, inputSize: number) {\n const scale = inputSize / Math.max(height, width);\n return new Dimensions(Math.round(width * scale), Math.round(height * scale));\n}\n\nexport function getCenterPoint(pts: Point[]): Point {\n return pts.reduce((sum, pt) => sum.add(pt), new Point(0, 0))\n .div(new Point(pts.length, pts.length));\n}\n\nexport function range(num: number, start: number, step: number): number[] {\n return Array(num).fill(0).map((_, i) => start + (i * step));\n}\n\nexport function isValidNumber(num: any) {\n // eslint-disable-next-line no-mixed-operators\n return !!num && (num !== Infinity) && (num !== -Infinity) && !Number.isNaN(num) || num === 0;\n}\n\nexport function isValidProbablitiy(num: any) {\n return isValidNumber(num) && num >= 0 && num <= 1.0;\n}\n", "import { isValidNumber } from '../utils/index';\n\nexport interface IDimensions {\n width: number\n height: number\n}\n\nexport class Dimensions implements IDimensions {\n private _width: number\n\n private _height: number\n\n constructor(width: number, height: number) {\n if (!isValidNumber(width) || !isValidNumber(height)) {\n throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({ width, height })}`);\n }\n\n this._width = width;\n this._height = height;\n }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public reverse(): Dimensions {\n return new Dimensions(1 / this.width, 1 / this.height);\n }\n}\n", "export interface IPoint {\n x: number\n y: number\n}\n\nexport class Point implements IPoint {\n private _x: number\n\n private _y: number\n\n constructor(x: number, y: number) {\n this._x = x;\n this._y = y;\n }\n\n get x(): number { return this._x; }\n\n get y(): number { return this._y; }\n\n public add(pt: IPoint): Point {\n return new Point(this.x + pt.x, this.y + pt.y);\n }\n\n public sub(pt: IPoint): Point {\n return new Point(this.x - pt.x, this.y - pt.y);\n }\n\n public mul(pt: IPoint): Point {\n return new Point(this.x * pt.x, this.y * pt.y);\n }\n\n public div(pt: IPoint): Point {\n return new Point(this.x / pt.x, this.y / pt.y);\n }\n\n public abs(): Point {\n return new Point(Math.abs(this.x), Math.abs(this.y));\n }\n\n public magnitude(): number {\n return Math.sqrt((this.x ** 2) + (this.y ** 2));\n }\n\n public floor(): Point {\n return new Point(Math.floor(this.x), Math.floor(this.y));\n }\n}\n", "import { isDimensions, isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { IDimensions } from './Dimensions';\nimport { Point } from './Point';\nimport { IRect } from './Rect';\n\nexport class Box implements IBoundingBox, IRect {\n public static isRect(rect: any): boolean {\n return !!rect && [rect.x, rect.y, rect.width, rect.height].every(isValidNumber);\n }\n\n public static assertIsValidBox(box: any, callee: string, allowNegativeDimensions: boolean = false) {\n if (!Box.isRect(box)) {\n throw new Error(`${callee} - invalid box: ${JSON.stringify(box)}, expected object with properties x, y, width, height`);\n }\n\n if (!allowNegativeDimensions && (box.width < 0 || box.height < 0)) {\n throw new Error(`${callee} - width (${box.width}) and height (${box.height}) must be positive numbers`);\n }\n }\n\n private _x: number\n\n private _y: number\n\n private _width: number\n\n private _height: number\n\n constructor(_box: IBoundingBox | IRect, allowNegativeDimensions: boolean = true) {\n const box = (_box || {}) as any;\n\n const isBbox = [box.left, box.top, box.right, box.bottom].every(isValidNumber);\n const isRect = [box.x, box.y, box.width, box.height].every(isValidNumber);\n\n if (!isRect && !isBbox) {\n throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(box)}`);\n }\n\n const [x, y, width, height] = isRect\n ? [box.x, box.y, box.width, box.height]\n : [box.left, box.top, box.right - box.left, box.bottom - box.top];\n\n Box.assertIsValidBox({\n x, y, width, height,\n }, 'Box.constructor', allowNegativeDimensions);\n\n this._x = x;\n this._y = y;\n this._width = width;\n this._height = height;\n }\n\n public get x(): number { return this._x; }\n\n public get y(): number { return this._y; }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public get left(): number { return this.x; }\n\n public get top(): number { return this.y; }\n\n public get right(): number { return this.x + this.width; }\n\n public get bottom(): number { return this.y + this.height; }\n\n public get area(): number { return this.width * this.height; }\n\n public get topLeft(): Point { return new Point(this.left, this.top); }\n\n public get topRight(): Point { return new Point(this.right, this.top); }\n\n public get bottomLeft(): Point { return new Point(this.left, this.bottom); }\n\n public get bottomRight(): Point { return new Point(this.right, this.bottom); }\n\n public round(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.round(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public floor(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.floor(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public toSquare(): Box {\n let {\n x, y, width, height,\n } = this;\n const diff = Math.abs(width - height);\n if (width < height) {\n x -= (diff / 2);\n width += diff;\n }\n if (height < width) {\n y -= (diff / 2);\n height += diff;\n }\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public rescale(s: IDimensions | number): Box {\n const scaleX = isDimensions(s) ? (s as IDimensions).width : s as number;\n const scaleY = isDimensions(s) ? (s as IDimensions).height : s as number;\n return new Box({\n x: this.x * scaleX,\n y: this.y * scaleY,\n width: this.width * scaleX,\n height: this.height * scaleY,\n });\n }\n\n public pad(padX: number, padY: number): Box {\n const [x, y, width, height] = [\n this.x - (padX / 2),\n this.y - (padY / 2),\n this.width + padX,\n this.height + padY,\n ];\n return new Box({\n x, y, width, height,\n });\n }\n\n public clipAtImageBorders(imgWidth: number, imgHeight: number): Box {\n const {\n x, y, right, bottom,\n } = this;\n const clippedX = Math.max(x, 0);\n const clippedY = Math.max(y, 0);\n\n const newWidth = right - clippedX;\n const newHeight = bottom - clippedY;\n const clippedWidth = Math.min(newWidth, imgWidth - clippedX);\n const clippedHeight = Math.min(newHeight, imgHeight - clippedY);\n\n return (new Box({\n x: clippedX, y: clippedY, width: clippedWidth, height: clippedHeight,\n })).floor();\n }\n\n public shift(sx: number, sy: number): Box {\n const { width, height } = this;\n const x = this.x + sx;\n const y = this.y + sy;\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public padAtBorders(imageHeight: number, imageWidth: number) {\n const w = this.width + 1;\n const h = this.height + 1;\n\n const dx = 1;\n const dy = 1;\n let edx = w;\n let edy = h;\n\n let x = this.left;\n let y = this.top;\n let ex = this.right;\n let ey = this.bottom;\n\n if (ex > imageWidth) {\n edx = -ex + imageWidth + w;\n ex = imageWidth;\n }\n if (ey > imageHeight) {\n edy = -ey + imageHeight + h;\n ey = imageHeight;\n }\n if (x < 1) {\n edy = 2 - x;\n x = 1;\n }\n if (y < 1) {\n edy = 2 - y;\n y = 1;\n }\n\n return {\n dy, edy, dx, edx, y, ey, x, ex, w, h,\n };\n }\n\n public calibrate(region: Box) {\n return new Box({\n left: this.left + (region.left * this.width),\n top: this.top + (region.top * this.height),\n right: this.right + (region.right * this.width),\n bottom: this.bottom + (region.bottom * this.height),\n }).toSquare().round();\n }\n}\n", "import { Box } from './Box';\n\nexport interface IBoundingBox {\n left: number\n top: number\n right: number\n bottom: number\n}\n\nexport class BoundingBox extends Box implements IBoundingBox {\n constructor(left: number, top: number, right: number, bottom: number, allowNegativeDimensions: boolean = false) {\n super({\n left, top, right, bottom,\n }, allowNegativeDimensions);\n }\n}\n", "import { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { IRect, Rect } from './Rect';\n\nexport class ObjectDetection {\n private _score: number\n\n private _classScore: number\n\n private _className: string\n\n private _box: Rect\n\n private _imageDims: Dimensions\n\n constructor(\n score: number,\n classScore: number,\n className: string,\n relativeBox: IRect,\n imageDims: IDimensions,\n ) {\n this._imageDims = new Dimensions(imageDims.width, imageDims.height);\n this._score = score;\n this._classScore = classScore;\n this._className = className;\n this._box = new Box(relativeBox).rescale(this._imageDims);\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n\n public get className(): string { return this._className; }\n\n public get box(): Box { return this._box; }\n\n public get imageDims(): Dimensions { return this._imageDims; }\n\n public get imageWidth(): number { return this.imageDims.width; }\n\n public get imageHeight(): number { return this.imageDims.height; }\n\n public get relativeBox(): Box { return new Box(this._box).rescale(this.imageDims.reverse()); }\n\n public forSize(width: number, height: number): ObjectDetection {\n return new ObjectDetection(\n this.score,\n this.classScore,\n this.className,\n this.relativeBox,\n { width, height },\n );\n }\n}\n", "import { Box } from './Box';\nimport { IDimensions } from './Dimensions';\nimport { ObjectDetection } from './ObjectDetection';\nimport { Rect } from './Rect';\n\nexport interface IFaceDetecion {\n score: number\n box: Box\n}\n\nexport class FaceDetection extends ObjectDetection implements IFaceDetecion {\n constructor(\n score: number,\n relativeBox: Rect,\n imageDims: IDimensions,\n ) {\n super(score, score, '', relativeBox, imageDims);\n }\n\n public forSize(width: number, height: number): FaceDetection {\n const { score, relativeBox, imageDims } = super.forSize(width, height);\n return new FaceDetection(score, relativeBox, imageDims);\n }\n}\n", "import { Box } from '../classes/Box';\n\nexport function iou(box1: Box, box2: Box, isIOU: boolean = true) {\n const width = Math.max(0.0, Math.min(box1.right, box2.right) - Math.max(box1.left, box2.left));\n const height = Math.max(0.0, Math.min(box1.bottom, box2.bottom) - Math.max(box1.top, box2.top));\n const interSection = width * height;\n\n return isIOU\n ? interSection / (box1.area + box2.area - interSection)\n : interSection / Math.min(box1.area, box2.area);\n}\n", "import { BoundingBox, IPoint } from '../classes/index';\n\nexport function minBbox(pts: IPoint[]): BoundingBox {\n const xs = pts.map((pt) => pt.x);\n const ys = pts.map((pt) => pt.y);\n const minX = xs.reduce((min, x) => (x < min ? x : min), Infinity);\n const minY = ys.reduce((min, y) => (y < min ? y : min), Infinity);\n const maxX = xs.reduce((max, x) => (max < x ? x : max), 0);\n const maxY = ys.reduce((max, y) => (max < y ? y : max), 0);\n\n return new BoundingBox(minX, minY, maxX, maxY);\n}\n", "import { Box } from '../classes/Box';\nimport { iou } from './iou';\n\nexport function nonMaxSuppression(\n boxes: Box[],\n scores: number[],\n iouThreshold: number,\n isIOU: boolean = true,\n): number[] {\n let indicesSortedByScore = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .sort((c1, c2) => c1.score - c2.score)\n .map((c) => c.boxIndex);\n\n const pick: number[] = [];\n\n while (indicesSortedByScore.length > 0) {\n const curr = indicesSortedByScore.pop() as number;\n pick.push(curr);\n\n const indices = indicesSortedByScore;\n\n const outputs: number[] = [];\n for (let i = 0; i < indices.length; i++) {\n const idx = indices[i];\n\n const currBox = boxes[curr];\n const idxBox = boxes[idx];\n\n outputs.push(iou(currBox, idxBox, isIOU));\n }\n\n indicesSortedByScore = indicesSortedByScore.filter(\n (_, j) => outputs[j] <= iouThreshold,\n );\n }\n\n return pick;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nexport function normalize(x: tf.Tensor4D, meanRgb: number[]): tf.Tensor4D {\n return tf.tidy(() => {\n const [r, g, b] = meanRgb;\n const avg_r = tf.fill([...x.shape.slice(0, 3), 1], r, 'float32');\n const avg_g = tf.fill([...x.shape.slice(0, 3), 1], g, 'float32');\n const avg_b = tf.fill([...x.shape.slice(0, 3), 1], b, 'float32');\n const avg_rgb = tf.concat([avg_r, avg_g, avg_b], 3);\n\n return tf.sub(x, avg_rgb);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\n/**\n * Pads the smaller dimension of an image tensor with zeros, such that width === height.\n *\n * @param imgTensor The image tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The padded tensor with width === height.\n */\nexport function padToSquare(\n imgTensor: tf.Tensor4D,\n isCenterImage: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const [height, width] = imgTensor.shape.slice(1);\n if (height === width) {\n return imgTensor;\n }\n\n const dimDiff = Math.abs(height - width);\n const paddingAmount = Math.round(dimDiff * (isCenterImage ? 0.5 : 1));\n const paddingAxis = height > width ? 2 : 1;\n\n const createPaddingTensor = (paddingAmountLocal: number): tf.Tensor => {\n const paddingTensorShape = imgTensor.shape.slice();\n paddingTensorShape[paddingAxis] = paddingAmountLocal;\n return tf.fill(paddingTensorShape, 0, 'float32');\n };\n\n const paddingTensorAppend = createPaddingTensor(paddingAmount);\n const remainingPaddingAmount = dimDiff - (paddingTensorAppend.shape[paddingAxis] as number);\n\n const paddingTensorPrepend = isCenterImage && remainingPaddingAmount\n ? createPaddingTensor(remainingPaddingAmount)\n : null;\n\n const tensorsToStack = [\n paddingTensorPrepend,\n imgTensor,\n paddingTensorAppend,\n ]\n .filter((t) => !!t)\n // .map((t: tf.Tensor) => t.toFloat()) as tf.Tensor4D[]\n .map((t: tf.Tensor) => tf.cast(t, 'float32')) as tf.Tensor4D[];\n return tf.concat(tensorsToStack, paddingAxis);\n });\n}\n", "export function shuffleArray(inputArray: any[]) {\n const array = inputArray.slice();\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const x = array[i];\n array[i] = array[j];\n array[j] = x;\n }\n return array;\n}\n", "export * from './iou';\nexport * from './minBbox';\nexport * from './nonMaxSuppression';\nexport * from './normalize';\nexport * from './padToSquare';\nexport * from './shuffleArray';\n\nexport function sigmoid(x: number) {\n return 1 / (1 + Math.exp(-x));\n}\n\nexport function inverseSigmoid(x: number) {\n return Math.log(x / (1 - x));\n}\n", "import { Box } from './Box';\n\nexport interface IRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport class Rect extends Box implements IRect {\n constructor(x: number, y: number, width: number, height: number, allowNegativeDimensions: boolean = false) {\n super({\n x, y, width, height,\n }, allowNegativeDimensions);\n }\n}\n", "import { minBbox } from '../ops/index';\nimport { getCenterPoint } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { FaceDetection } from './FaceDetection';\nimport { Point } from './Point';\nimport { IRect, Rect } from './Rect';\n\n// face alignment constants\nconst relX = 0.5;\nconst relY = 0.43;\nconst relScale = 0.45;\n\nexport interface IFaceLandmarks {\n positions: Point[]\n shift: Point\n}\n\nexport class FaceLandmarks implements IFaceLandmarks {\n protected _shift: Point\n\n protected _positions: Point[]\n\n protected _imgDims: Dimensions\n\n constructor(\n relativeFaceLandmarkPositions: Point[],\n imgDims: IDimensions,\n shift: Point = new Point(0, 0),\n ) {\n const { width, height } = imgDims;\n this._imgDims = new Dimensions(width, height);\n this._shift = shift;\n this._positions = relativeFaceLandmarkPositions.map(\n (pt) => pt.mul(new Point(width, height)).add(shift),\n );\n }\n\n public get shift(): Point { return new Point(this._shift.x, this._shift.y); }\n\n public get imageWidth(): number { return this._imgDims.width; }\n\n public get imageHeight(): number { return this._imgDims.height; }\n\n public get positions(): Point[] { return this._positions; }\n\n public get relativePositions(): Point[] {\n return this._positions.map(\n (pt) => pt.sub(this._shift).div(new Point(this.imageWidth, this.imageHeight)),\n );\n }\n\n public forSize(width: number, height: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n { width, height },\n );\n }\n\n public shiftBy(x: number, y: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n this._imgDims,\n new Point(x, y),\n );\n }\n\n public shiftByPoint(pt: Point): T {\n return this.shiftBy(pt.x, pt.y);\n }\n\n /**\n * Aligns the face landmarks after face detection from the relative positions of the faces\n * bounding box, or it's current shift. This function should be used to align the face images\n * after face detection has been performed, before they are passed to the face recognition net.\n * This will make the computed face descriptor more accurate.\n *\n * @param detection (optional) The bounding box of the face or the face detection result. If\n * no argument was passed the position of the face landmarks are assumed to be relative to\n * it's current shift.\n * @returns The bounding box of the aligned face.\n */\n public align(\n detection?: FaceDetection | IRect | IBoundingBox | null,\n options: { useDlibAlignment?: boolean, minBoxPadding?: number } = { },\n ): Box {\n if (detection) {\n const box = detection instanceof FaceDetection\n ? detection.box.floor()\n : new Box(detection);\n\n return this.shiftBy(box.x, box.y).align(null, options);\n }\n\n const { useDlibAlignment, minBoxPadding } = { useDlibAlignment: false, minBoxPadding: 0.2, ...options };\n\n if (useDlibAlignment) {\n return this.alignDlib();\n }\n\n return this.alignMinBbox(minBoxPadding);\n }\n\n private alignDlib(): Box {\n const centers = this.getRefPointsForAlignment();\n\n const [leftEyeCenter, rightEyeCenter, mouthCenter] = centers;\n const distToMouth = (pt: Point) => mouthCenter.sub(pt).magnitude();\n const eyeToMouthDist = (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2;\n\n const size = Math.floor(eyeToMouthDist / relScale);\n\n const refPoint = getCenterPoint(centers);\n // TODO: pad in case rectangle is out of image bounds\n const x = Math.floor(Math.max(0, refPoint.x - (relX * size)));\n const y = Math.floor(Math.max(0, refPoint.y - (relY * size)));\n\n return new Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y));\n }\n\n private alignMinBbox(padding: number): Box {\n const box = minBbox(this.positions);\n return box.pad(box.width * padding, box.height * padding);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n throw new Error('getRefPointsForAlignment not implemented by base class');\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks5 extends FaceLandmarks {\n protected getRefPointsForAlignment(): Point[] {\n const pts = this.positions;\n return [\n pts[0],\n pts[1],\n getCenterPoint([pts[3], pts[4]]),\n ];\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks68 extends FaceLandmarks {\n public getJawOutline(): Point[] {\n return this.positions.slice(0, 17);\n }\n\n public getLeftEyeBrow(): Point[] {\n return this.positions.slice(17, 22);\n }\n\n public getRightEyeBrow(): Point[] {\n return this.positions.slice(22, 27);\n }\n\n public getNose(): Point[] {\n return this.positions.slice(27, 36);\n }\n\n public getLeftEye(): Point[] {\n return this.positions.slice(36, 42);\n }\n\n public getRightEye(): Point[] {\n return this.positions.slice(42, 48);\n }\n\n public getMouth(): Point[] {\n return this.positions.slice(48, 68);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n return [\n this.getLeftEye(),\n this.getRightEye(),\n this.getMouth(),\n ].map(getCenterPoint);\n }\n}\n", "import { round } from '../utils/index';\n\nexport interface IFaceMatch {\n label: string\n distance: number\n}\n\nexport class FaceMatch implements IFaceMatch {\n private _label: string\n\n private _distance: number\n\n constructor(label: string, distance: number) {\n this._label = label;\n this._distance = distance;\n }\n\n public get label(): string { return this._label; }\n\n public get distance(): number { return this._distance; }\n\n public toString(withDistance: boolean = true): string {\n return `${this.label}${withDistance ? ` (${round(this.distance)})` : ''}`;\n }\n}\n", "import { isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { IRect } from './Rect';\n\nexport class LabeledBox extends Box {\n public static assertIsValidLabeledBox(box: any, callee: string) {\n Box.assertIsValidBox(box, callee);\n\n if (!isValidNumber(box.label)) {\n throw new Error(`${callee} - expected property label (${box.label}) to be a number`);\n }\n }\n\n private _label: number\n\n constructor(box: IBoundingBox | IRect | any, label: number) {\n super(box);\n this._label = label;\n }\n\n public get label(): number { return this._label; }\n}\n", "export class LabeledFaceDescriptors {\n private _label: string\n\n private _descriptors: Float32Array[]\n\n constructor(label: string, descriptors: Float32Array[]) {\n if (!(typeof label === 'string')) {\n throw new Error('LabeledFaceDescriptors - constructor expected label to be a string');\n }\n\n if (!Array.isArray(descriptors) || descriptors.some((desc) => !(desc instanceof Float32Array))) {\n throw new Error('LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array');\n }\n\n this._label = label;\n this._descriptors = descriptors;\n }\n\n public get label(): string { return this._label; }\n\n public get descriptors(): Float32Array[] { return this._descriptors; }\n\n public toJSON(): any {\n return {\n label: this.label,\n descriptors: this.descriptors.map((d) => Array.from(d)),\n };\n }\n\n public static fromJSON(json: any): LabeledFaceDescriptors {\n const descriptors = json.descriptors.map((d: any) => new Float32Array(d));\n return new LabeledFaceDescriptors(json.label, descriptors);\n }\n}\n", "import { isValidProbablitiy } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { LabeledBox } from './LabeledBox';\nimport { IRect } from './Rect';\n\nexport class PredictedBox extends LabeledBox {\n public static assertIsValidPredictedBox(box: any, callee: string) {\n LabeledBox.assertIsValidLabeledBox(box, callee);\n\n if (\n !isValidProbablitiy(box.score)\n || !isValidProbablitiy(box.classScore)\n ) {\n throw new Error(`${callee} - expected properties score (${box.score}) and (${box.classScore}) to be a number between [0, 1]`);\n }\n }\n\n private _score: number\n\n private _classScore: number\n\n constructor(box: IBoundingBox | IRect | any, label: number, score: number, classScore: number) {\n super(box, label);\n this._score = score;\n this._classScore = classScore;\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\n\nexport type WithFaceDetection = TSource & {\n detection: FaceDetection\n}\n\nexport function isWithFaceDetection(obj: any): obj is WithFaceDetection<{}> {\n return obj.detection instanceof FaceDetection;\n}\n\nexport function extendWithFaceDetection<\n TSource\n>(\n sourceObj: TSource,\n detection: FaceDetection,\n): WithFaceDetection {\n const extension = { detection };\n return { ...sourceObj, ...extension };\n}\n", "import { Environment } from './types';\n\nexport function createBrowserEnv(): Environment {\n const fetch = window.fetch;\n if (!fetch) throw new Error('fetch - missing fetch implementation for browser environment');\n\n const readFile = () => {\n throw new Error('readFile - filesystem not available for browser environment');\n };\n\n return {\n Canvas: HTMLCanvasElement,\n CanvasRenderingContext2D,\n Image: HTMLImageElement,\n ImageData,\n Video: HTMLVideoElement,\n createCanvasElement: () => document.createElement('canvas'),\n createImageElement: () => document.createElement('img'),\n fetch,\n readFile,\n };\n}\n", "import { FileSystem } from './types';\n\nexport function createFileSystem(fs?: any): FileSystem {\n let requireFsError = '';\n\n if (!fs) {\n try {\n // eslint-disable-next-line global-require\n fs = require('fs');\n } catch (err) {\n requireFsError = err.toString();\n }\n }\n\n const readFile = fs\n ? (filePath: string) => new Promise((resolve, reject) => {\n fs.readFile(filePath, (err: any, buffer: Buffer) => (err ? reject(err) : resolve(buffer)));\n })\n : () => {\n throw new Error(`readFile - failed to require fs in nodejs environment with error: ${requireFsError}`);\n };\n\n return {\n readFile,\n };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { createFileSystem } from './createFileSystem';\nimport { Environment } from './types';\n\nexport function createNodejsEnv(): Environment {\n // eslint-disable-next-line dot-notation\n const Canvas = global['Canvas'] || global.HTMLCanvasElement;\n const Image = global.Image || global.HTMLImageElement;\n\n const createCanvasElement = () => {\n if (Canvas) return new Canvas();\n throw new Error('createCanvasElement - missing Canvas implementation for nodejs environment');\n };\n\n const createImageElement = () => {\n if (Image) return new Image();\n throw new Error('createImageElement - missing Image implementation for nodejs environment');\n };\n\n const fetch = global.fetch;\n // if (!fetch) throw new Error('fetch - missing fetch implementation for nodejs environment');\n\n const fileSystem = createFileSystem();\n\n return {\n Canvas: Canvas || class {},\n CanvasRenderingContext2D: global.CanvasRenderingContext2D || class {},\n Image: Image || class {},\n ImageData: global.ImageData || class {},\n Video: global.HTMLVideoElement || class {},\n createCanvasElement,\n createImageElement,\n fetch,\n ...fileSystem,\n };\n}\n", "export function isBrowser(): boolean {\n return typeof window === 'object'\n && typeof document !== 'undefined'\n && typeof HTMLImageElement !== 'undefined'\n && typeof HTMLCanvasElement !== 'undefined'\n && typeof HTMLVideoElement !== 'undefined'\n && typeof ImageData !== 'undefined'\n && typeof CanvasRenderingContext2D !== 'undefined';\n}\n", "import { createBrowserEnv } from './createBrowserEnv';\nimport { createFileSystem } from './createFileSystem';\nimport { createNodejsEnv } from './createNodejsEnv';\nimport { isBrowser } from './isBrowser';\nimport { isNodejs } from './isNodejs';\nimport { Environment } from './types';\n\nlet environment: Environment | null;\n\nfunction getEnv(): Environment {\n if (!environment) {\n throw new Error('getEnv - environment is not defined, check isNodejs() and isBrowser()');\n }\n return environment;\n}\n\nfunction setEnv(env: Environment) {\n environment = env;\n}\n\nfunction initialize() {\n // check for isBrowser() first to prevent electron renderer process\n // to be initialized with wrong environment due to isNodejs() returning true\n if (isBrowser()) return setEnv(createBrowserEnv());\n if (isNodejs()) return setEnv(createNodejsEnv());\n return null;\n}\n\nfunction monkeyPatch(env: Partial) {\n if (!environment) {\n initialize();\n }\n\n if (!environment) {\n throw new Error('monkeyPatch - environment is not defined, check isNodejs() and isBrowser()');\n }\n\n const { Canvas = environment.Canvas, Image = environment.Image } = env;\n environment.Canvas = Canvas;\n environment.Image = Image;\n environment.createCanvasElement = env.createCanvasElement || (() => new Canvas());\n environment.createImageElement = env.createImageElement || (() => new Image());\n\n environment.ImageData = env.ImageData || environment.ImageData;\n environment.Video = env.Video || environment.Video;\n environment.fetch = env.fetch || environment.fetch;\n environment.readFile = env.readFile || environment.readFile;\n}\n\nexport const env = {\n getEnv,\n setEnv,\n initialize,\n createBrowserEnv,\n createFileSystem,\n createNodejsEnv,\n monkeyPatch,\n isBrowser,\n isNodejs,\n};\n\ninitialize();\n\nexport * from './types';\n", "import { env } from '../env/index';\n\nexport function resolveInput(arg: string | any) {\n if (!env.isNodejs() && typeof arg === 'string') {\n return document.getElementById(arg);\n }\n return arg;\n}\n", "import { env } from '../env/index';\nimport { resolveInput } from './resolveInput';\n\nexport function getContext2dOrThrow(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D): CanvasRenderingContext2D {\n const { Canvas, CanvasRenderingContext2D } = env.getEnv();\n\n if (canvasArg instanceof CanvasRenderingContext2D) {\n return canvasArg;\n }\n\n const canvas = resolveInput(canvasArg);\n\n if (!(canvas instanceof Canvas)) {\n throw new Error('resolveContext2d - expected canvas to be of instance of Canvas');\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('resolveContext2d - canvas 2d context is null');\n }\n\n return ctx;\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IDimensions, IPoint } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { resolveInput } from '../dom/resolveInput';\n\n// eslint-disable-next-line no-shadow\nexport enum AnchorPosition {\n // eslint-disable-next-line no-unused-vars\n TOP_LEFT = 'TOP_LEFT',\n // eslint-disable-next-line no-unused-vars\n TOP_RIGHT = 'TOP_RIGHT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_LEFT = 'BOTTOM_LEFT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_RIGHT = 'BOTTOM_RIGHT'\n}\n\nexport interface IDrawTextFieldOptions {\n anchorPosition?: AnchorPosition\n backgroundColor?: string\n fontColor?: string\n fontSize?: number\n fontStyle?: string\n padding?: number\n}\n\nexport class DrawTextFieldOptions implements IDrawTextFieldOptions {\n public anchorPosition: AnchorPosition\n\n public backgroundColor: string\n\n public fontColor: string\n\n public fontSize: number\n\n public fontStyle: string\n\n public padding: number\n\n constructor(options: IDrawTextFieldOptions = {}) {\n const {\n anchorPosition, backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = options;\n this.anchorPosition = anchorPosition || AnchorPosition.TOP_LEFT;\n this.backgroundColor = backgroundColor || 'rgba(0, 0, 0, 0.5)';\n this.fontColor = fontColor || 'rgba(255, 255, 255, 1)';\n this.fontSize = fontSize || 14;\n this.fontStyle = fontStyle || 'Georgia';\n this.padding = padding || 4;\n }\n}\n\nexport class DrawTextField {\n public text: string[]\n\n public anchor : IPoint\n\n public options: DrawTextFieldOptions\n\n constructor(\n text: string | string[] | DrawTextField,\n anchor: IPoint,\n options: IDrawTextFieldOptions = {},\n ) {\n // eslint-disable-next-line no-nested-ternary\n this.text = typeof text === 'string'\n ? [text]\n : (text instanceof DrawTextField ? text.text : text);\n this.anchor = anchor;\n this.options = new DrawTextFieldOptions(options);\n }\n\n measureWidth(ctx: CanvasRenderingContext2D): number {\n const { padding } = this.options;\n return this.text.map((l) => ctx.measureText(l).width).reduce((w0, w1) => (w0 < w1 ? w1 : w0), 0) + (2 * padding);\n }\n\n measureHeight(): number {\n const { fontSize, padding } = this.options;\n return this.text.length * fontSize + (2 * padding);\n }\n\n getUpperLeft(ctx: CanvasRenderingContext2D, canvasDims?: IDimensions): IPoint {\n const { anchorPosition } = this.options;\n const isShiftLeft = anchorPosition === AnchorPosition.BOTTOM_RIGHT || anchorPosition === AnchorPosition.TOP_RIGHT;\n const isShiftTop = anchorPosition === AnchorPosition.BOTTOM_LEFT || anchorPosition === AnchorPosition.BOTTOM_RIGHT;\n\n const textFieldWidth = this.measureWidth(ctx);\n const textFieldHeight = this.measureHeight();\n const x = (isShiftLeft ? this.anchor.x - textFieldWidth : this.anchor.x);\n const y = isShiftTop ? this.anchor.y - textFieldHeight : this.anchor.y;\n\n // adjust anchor if text box exceeds canvas borders\n if (canvasDims) {\n const { width, height } = canvasDims;\n const newX = Math.max(Math.min(x, width - textFieldWidth), 0);\n const newY = Math.max(Math.min(y, height - textFieldHeight), 0);\n return { x: newX, y: newY };\n }\n return { x, y };\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const canvas = resolveInput(canvasArg);\n const ctx = getContext2dOrThrow(canvas);\n\n const {\n backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = this.options;\n\n ctx.font = `${fontSize}px ${fontStyle}`;\n const maxTextWidth = this.measureWidth(ctx);\n const textHeight = this.measureHeight();\n\n ctx.fillStyle = backgroundColor;\n const upperLeft = this.getUpperLeft(ctx, canvas);\n ctx.fillRect(upperLeft.x, upperLeft.y, maxTextWidth, textHeight);\n\n ctx.fillStyle = fontColor;\n this.text.forEach((textLine, i) => {\n const x = padding + upperLeft.x;\n const y = padding + upperLeft.y + ((i + 1) * fontSize);\n ctx.fillText(textLine, x, y);\n });\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { Box, IBoundingBox, IRect } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport {\n AnchorPosition, DrawTextField, DrawTextFieldOptions, IDrawTextFieldOptions,\n} from './DrawTextField';\n\nexport interface IDrawBoxOptions {\n boxColor?: string\n lineWidth?: number\n drawLabelOptions?: IDrawTextFieldOptions\n label?: string\n}\n\nexport class DrawBoxOptions {\n public boxColor: string\n\n public lineWidth: number\n\n public drawLabelOptions: DrawTextFieldOptions\n\n public label?: string\n\n constructor(options: IDrawBoxOptions = {}) {\n const {\n boxColor, lineWidth, label, drawLabelOptions,\n } = options;\n this.boxColor = boxColor || 'rgba(0, 0, 255, 1)';\n this.lineWidth = lineWidth || 2;\n this.label = label;\n\n const defaultDrawLabelOptions = {\n anchorPosition: AnchorPosition.BOTTOM_LEFT,\n backgroundColor: this.boxColor,\n };\n this.drawLabelOptions = new DrawTextFieldOptions({ ...defaultDrawLabelOptions, ...drawLabelOptions });\n }\n}\n\nexport class DrawBox {\n public box: Box\n\n public options: DrawBoxOptions\n\n constructor(\n box: IBoundingBox | IRect,\n options: IDrawBoxOptions = {},\n ) {\n this.box = new Box(box);\n this.options = new DrawBoxOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const { boxColor, lineWidth } = this.options;\n\n const {\n x, y, width, height,\n } = this.box;\n ctx.strokeStyle = boxColor;\n ctx.lineWidth = lineWidth;\n ctx.strokeRect(x, y, width, height);\n\n const { label } = this.options;\n if (label) {\n new DrawTextField([label], { x: x - (lineWidth / 2), y }, this.options.drawLabelOptions).draw(canvasArg);\n }\n }\n}\n", "import { Box, IBoundingBox, IRect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { round } from '../utils/index';\nimport { DrawBox } from './DrawBox';\n\nexport type TDrawDetectionsInput = IRect | IBoundingBox | FaceDetection | WithFaceDetection<{}>\n\nexport function drawDetections(\n canvasArg: string | HTMLCanvasElement,\n detections: TDrawDetectionsInput | Array,\n) {\n const detectionsArray = Array.isArray(detections) ? detections : [detections];\n\n detectionsArray.forEach((det) => {\n // eslint-disable-next-line no-nested-ternary\n const score = det instanceof FaceDetection\n ? det.score\n : (isWithFaceDetection(det) ? det.detection.score : undefined);\n\n // eslint-disable-next-line no-nested-ternary\n const box = det instanceof FaceDetection\n ? det.box\n : (isWithFaceDetection(det) ? det.detection.box : new Box(det));\n\n const label = score ? `${round(score)}` : undefined;\n new DrawBox(box, { label }).draw(canvasArg);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { FaceExpressions } from './FaceExpressions';\n\nexport class FaceExpressionNet extends FaceProcessor {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceExpressionNet', faceFeatureExtractor);\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n return tf.tidy(() => tf.softmax(this.runNet(input)));\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictExpressions(input: TNetInput) {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n const probabilitesByBatch = await Promise.all(tf.unstack(out).map(async (t) => {\n const data = await t.data();\n t.dispose();\n return data;\n }));\n out.dispose();\n\n const predictionsByBatch = probabilitesByBatch\n .map((probabilites) => new FaceExpressions(probabilites as Float32Array));\n\n return netInput.isBatchInput\n ? predictionsByBatch\n : predictionsByBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_expression_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n\n protected getClassifierChannelsOut(): number {\n return 7;\n }\n}\n", "import { env } from '../env/index';\n\nexport function isMediaLoaded(media: HTMLImageElement | HTMLVideoElement) : boolean {\n const { Image, Video } = env.getEnv();\n\n return (media instanceof Image && media.complete)\n || (media instanceof Video && media.readyState >= 3);\n}\n", "import { env } from '../env/index';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function awaitMediaLoaded(media: HTMLImageElement | HTMLVideoElement | HTMLCanvasElement) {\n // eslint-disable-next-line consistent-return\n return new Promise((resolve, reject) => {\n if (media instanceof env.getEnv().Canvas || isMediaLoaded(media)) {\n return resolve(null);\n }\n\n function onError(e: Event) {\n if (!e.currentTarget) return;\n // eslint-disable-next-line no-use-before-define\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n reject(e);\n }\n\n function onLoad(e: Event) {\n if (!e.currentTarget) return;\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n resolve(e);\n }\n\n media.addEventListener('load', onLoad);\n media.addEventListener('error', onError);\n });\n}\n", "import { env } from '../env/index';\n\nexport function bufferToImage(buf: Blob): Promise {\n return new Promise((resolve, reject) => {\n if (!(buf instanceof Blob)) reject(new Error('bufferToImage - expected buf to be of type: Blob'));\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result !== 'string') reject(new Error('bufferToImage - expected reader.result to be a string, in onload'));\n const img = env.getEnv().createImageElement();\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = reader.result as string;\n };\n reader.onerror = reject;\n reader.readAsDataURL(buf);\n });\n}\n", "import { Dimensions, IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\n\nexport function getMediaDimensions(input: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | IDimensions): Dimensions {\n const { Image, Video } = env.getEnv();\n\n if (input instanceof Image) {\n return new Dimensions(input.naturalWidth, input.naturalHeight);\n }\n if (input instanceof Video) {\n return new Dimensions(input.videoWidth, input.videoHeight);\n }\n return new Dimensions(input.width, input.height);\n}\n", "import { IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function createCanvas({ width, height }: IDimensions): HTMLCanvasElement {\n const { createCanvasElement } = env.getEnv();\n const canvas = createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n\nexport function createCanvasFromMedia(media: HTMLImageElement | HTMLVideoElement | ImageData, dims?: IDimensions): HTMLCanvasElement {\n const { ImageData } = env.getEnv();\n\n if (!(media instanceof ImageData) && !isMediaLoaded(media)) {\n throw new Error('createCanvasFromMedia - media has not finished loading yet');\n }\n\n const { width, height } = dims || getMediaDimensions(media);\n const canvas = createCanvas({ width, height });\n\n if (media instanceof ImageData) {\n getContext2dOrThrow(canvas).putImageData(media, 0, 0);\n } else {\n getContext2dOrThrow(canvas).drawImage(media, 0, 0, width, height);\n }\n return canvas;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { env } from '../env/index';\nimport { isTensor4D } from '../utils/index';\n\nexport async function imageTensorToCanvas(\n imgTensor: tf.Tensor,\n canvas?: HTMLCanvasElement,\n): Promise {\n const targetCanvas = canvas || env.getEnv().createCanvasElement();\n\n const [height, width, numChannels] = imgTensor.shape.slice(isTensor4D(imgTensor) ? 1 : 0);\n const imgTensor3D = tf.tidy(() => imgTensor.as3D(height, width, numChannels).toInt());\n await tf.browser.toPixels(imgTensor3D, targetCanvas);\n\n imgTensor3D.dispose();\n\n return targetCanvas;\n}\n", "import { env } from '../env/index';\n\nexport function isMediaElement(input: any) {\n const { Image, Canvas, Video } = env.getEnv();\n\n return input instanceof Image\n || input instanceof Canvas\n || input instanceof Video;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Dimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { padToSquare } from '../ops/padToSquare';\nimport {\n computeReshapedDimensions, isTensor3D, isTensor4D, range,\n} from '../utils/index';\nimport { createCanvasFromMedia } from './createCanvas';\nimport { imageToSquare } from './imageToSquare';\nimport { TResolvedNetInput } from './types';\n\nexport class NetInput {\n private _imageTensors: Array = []\n\n private _canvases: HTMLCanvasElement[] = []\n\n private _batchSize: number\n\n private _treatAsBatchInput: boolean = false\n\n private _inputDimensions: number[][] = []\n\n private _inputSize: number\n\n constructor(\n inputs: Array,\n treatAsBatchInput: boolean = false,\n ) {\n if (!Array.isArray(inputs)) {\n throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${inputs}`);\n }\n\n this._treatAsBatchInput = treatAsBatchInput;\n this._batchSize = inputs.length;\n\n inputs.forEach((input, idx) => {\n if (isTensor3D(input)) {\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = input.shape;\n return;\n }\n\n if (isTensor4D(input)) {\n const batchSize = (input as any).shape[0];\n if (batchSize !== 1) {\n throw new Error(`NetInput - tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = (input as any).shape.slice(1);\n return;\n }\n\n const canvas = (input as any) instanceof env.getEnv().Canvas ? input : createCanvasFromMedia(input);\n this._canvases[idx] = canvas;\n this._inputDimensions[idx] = [canvas.height, canvas.width, 3];\n });\n }\n\n public get imageTensors(): Array {\n return this._imageTensors;\n }\n\n public get canvases(): HTMLCanvasElement[] {\n return this._canvases;\n }\n\n public get isBatchInput(): boolean {\n return this.batchSize > 1 || this._treatAsBatchInput;\n }\n\n public get batchSize(): number {\n return this._batchSize;\n }\n\n public get inputDimensions(): number[][] {\n return this._inputDimensions;\n }\n\n public get inputSize(): number | undefined {\n return this._inputSize;\n }\n\n public get reshapedInputDimensions(): Dimensions[] {\n return range(this.batchSize, 0, 1).map(\n (_, batchIdx) => this.getReshapedInputDimensions(batchIdx),\n );\n }\n\n public getInput(batchIdx: number): tf.Tensor3D | tf.Tensor4D | HTMLCanvasElement {\n return this.canvases[batchIdx] || this.imageTensors[batchIdx];\n }\n\n public getInputDimensions(batchIdx: number): number[] {\n return this._inputDimensions[batchIdx];\n }\n\n public getInputHeight(batchIdx: number): number {\n return this._inputDimensions[batchIdx][0];\n }\n\n public getInputWidth(batchIdx: number): number {\n return this._inputDimensions[batchIdx][1];\n }\n\n public getReshapedInputDimensions(batchIdx: number): Dimensions {\n if (typeof this.inputSize !== 'number') {\n throw new Error('getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet');\n }\n\n const width = this.getInputWidth(batchIdx);\n const height = this.getInputHeight(batchIdx);\n return computeReshapedDimensions({ width, height }, this.inputSize);\n }\n\n /**\n * Create a batch tensor from all input canvases and tensors\n * with size [batchSize, inputSize, inputSize, 3].\n *\n * @param inputSize Height and width of the tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The batch tensor.\n */\n public toBatchTensor(inputSize: number, isCenterInputs: boolean = true): tf.Tensor4D {\n this._inputSize = inputSize;\n\n return tf.tidy(() => {\n const inputTensors = range(this.batchSize, 0, 1).map((batchIdx) => {\n const input = this.getInput(batchIdx);\n\n if (input instanceof tf.Tensor) {\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n let imgTensor = isTensor4D(input) ? input : input.expandDims();\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n imgTensor = padToSquare(imgTensor, isCenterInputs);\n\n if (imgTensor.shape[1] !== inputSize || imgTensor.shape[2] !== inputSize) {\n imgTensor = tf.image.resizeBilinear(imgTensor, [inputSize, inputSize]);\n }\n\n return imgTensor.as3D(inputSize, inputSize, 3);\n }\n\n if (input instanceof env.getEnv().Canvas) {\n return tf.browser.fromPixels(imageToSquare(input, inputSize, isCenterInputs));\n }\n\n throw new Error(`toBatchTensor - at batchIdx ${batchIdx}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${input}`);\n });\n\n // const batchTensor = tf.stack(inputTensors.map(t => t.toFloat())).as4D(this.batchSize, inputSize, inputSize, 3)\n const batchTensor = tf.stack(inputTensors.map((t) => tf.cast(t, 'float32'))).as4D(this.batchSize, inputSize, inputSize, 3);\n // const batchTensor = tf.stack(inputTensors.map(t => tf.Tensor.as4D(tf.cast(t, 'float32'))), this.batchSize, inputSize, inputSize, 3);\n\n return batchTensor;\n });\n }\n}\n", "import { env } from '../env/index';\nimport { createCanvas, createCanvasFromMedia } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function imageToSquare(input: HTMLImageElement | HTMLCanvasElement, inputSize: number, centerImage: boolean = false) {\n const { Image, Canvas } = env.getEnv();\n\n if (!(input instanceof Image || input instanceof Canvas)) {\n throw new Error('imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement');\n }\n\n const dims = getMediaDimensions(input);\n const scale = inputSize / Math.max(dims.height, dims.width);\n const width = scale * dims.width;\n const height = scale * dims.height;\n\n const targetCanvas = createCanvas({ width: inputSize, height: inputSize });\n const inputCanvas = input instanceof Canvas ? input : createCanvasFromMedia(input);\n\n const offset = Math.abs(width - height) / 2;\n const dx = centerImage && width < height ? offset : 0;\n const dy = centerImage && height < width ? offset : 0;\n getContext2dOrThrow(targetCanvas).drawImage(inputCanvas, dx, dy, width, height);\n\n return targetCanvas;\n}\n", "import { isTensor3D, isTensor4D } from '../utils/index';\nimport { awaitMediaLoaded } from './awaitMediaLoaded';\nimport { isMediaElement } from './isMediaElement';\nimport { NetInput } from './NetInput';\nimport { resolveInput } from './resolveInput';\nimport { TNetInput } from './types';\n\n/**\n * Validates the input to make sure, they are valid net inputs and awaits all media elements\n * to be finished loading.\n *\n * @param input The input, which can be a media element or an array of different media elements.\n * @returns A NetInput instance, which can be passed into one of the neural networks.\n */\nexport async function toNetInput(inputs: TNetInput): Promise {\n if (inputs instanceof NetInput) {\n return inputs;\n }\n\n const inputArgArray = Array.isArray(inputs)\n ? inputs\n : [inputs];\n\n if (!inputArgArray.length) {\n throw new Error('toNetInput - empty array passed as input');\n }\n\n const getIdxHint = (idx: number) => (Array.isArray(inputs) ? ` at input index ${idx}:` : '');\n\n const inputArray = inputArgArray.map(resolveInput);\n\n inputArray.forEach((input, i) => {\n if (!isMediaElement(input) && !isTensor3D(input) && !isTensor4D(input)) {\n if (typeof inputArgArray[i] === 'string') {\n throw new Error(`toNetInput -${getIdxHint(i)} string passed, but could not resolve HTMLElement for element id ${inputArgArray[i]}`);\n }\n\n throw new Error(`toNetInput -${getIdxHint(i)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);\n }\n\n if (isTensor4D(input)) {\n // if tf.Tensor4D is passed in the input array, the batch size has to be 1\n const batchSize = input.shape[0];\n if (batchSize !== 1) {\n throw new Error(`toNetInput -${getIdxHint(i)} tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n }\n });\n\n // wait for all media elements being loaded\n await Promise.all(\n inputArray.map((input) => isMediaElement(input) && awaitMediaLoaded(input)),\n );\n\n return new NetInput(inputArray, Array.isArray(inputs));\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { Rect } from '../classes/Rect';\nimport { env } from '../env/index';\nimport { createCanvas } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { imageTensorToCanvas } from './imageTensorToCanvas';\nimport { toNetInput } from './toNetInput';\nimport { TNetInput } from './types';\n\n/**\n * Extracts the image regions containing the detected faces.\n *\n * @param input The image that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns The Canvases of the corresponding image region for each detected face.\n */\nexport async function extractFaces(\n input: TNetInput,\n detections: Array,\n): Promise {\n const { Canvas } = env.getEnv();\n\n let canvas = input as HTMLCanvasElement;\n\n if (!(input instanceof Canvas)) {\n const netInput = await toNetInput(input);\n\n if (netInput.batchSize > 1) {\n throw new Error('extractFaces - batchSize > 1 not supported');\n }\n\n const tensorOrCanvas = netInput.getInput(0);\n canvas = tensorOrCanvas instanceof Canvas\n ? tensorOrCanvas\n : await imageTensorToCanvas(tensorOrCanvas);\n }\n\n const ctx = getContext2dOrThrow(canvas);\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(canvas.width, canvas.height).box.floor()\n : det),\n )\n .map((box) => box.clipAtImageBorders(canvas.width, canvas.height));\n\n return boxes.map(({\n x, y, width, height,\n }) => {\n const faceImg = createCanvas({ width, height });\n getContext2dOrThrow(faceImg)\n .putImageData(ctx.getImageData(x, y, width, height), 0, 0);\n return faceImg;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isTensor3D, isTensor4D } from '../utils/index';\n\n/**\n * Extracts the tensors of the image regions containing the detected faces.\n * Useful if you want to compute the face descriptors for the face images.\n * Using this method is faster then extracting a canvas for each face and\n * converting them to tensors individually.\n *\n * @param imageTensor The image tensor that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns Tensors of the corresponding image region for each detected face.\n */\nexport async function extractFaceTensors(\n imageTensor: tf.Tensor3D | tf.Tensor4D,\n detections: Array,\n): Promise {\n if (!isTensor3D(imageTensor) && !isTensor4D(imageTensor)) {\n throw new Error('extractFaceTensors - expected image tensor to be 3D or 4D');\n }\n\n if (isTensor4D(imageTensor) && imageTensor.shape[0] > 1) {\n throw new Error('extractFaceTensors - batchSize > 1 not supported');\n }\n\n return tf.tidy(() => {\n const [imgHeight, imgWidth, numChannels] = imageTensor.shape.slice(isTensor4D(imageTensor) ? 1 : 0);\n\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(imgWidth, imgHeight).box\n : det),\n )\n .map((box) => box.clipAtImageBorders(imgWidth, imgHeight));\n\n const faceTensors = boxes.map(({\n x, y, width, height,\n }) => tf.slice3d(imageTensor.as3D(imgHeight, imgWidth, numChannels), [y, x, 0], [height, width, numChannels]));\n\n return faceTensors;\n });\n}\n", "import { env } from '../env/index';\n\nexport async function fetchOrThrow(\n url: string,\n // eslint-disable-next-line no-undef\n init?: RequestInit,\n): Promise {\n const { fetch } = env.getEnv();\n const res = await fetch(url, init);\n if (!(res.status < 400)) {\n throw new Error(`failed to fetch: (${res.status}) ${res.statusText}, from url: ${res.url}`);\n }\n return res;\n}\n", "import { bufferToImage } from './bufferToImage';\nimport { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchImage(uri: string): Promise {\n const res = await fetchOrThrow(uri);\n const blob = await (res).blob();\n\n if (!blob.type.startsWith('image/')) {\n throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${blob.type}, for url: ${res.url}`);\n }\n return bufferToImage(blob);\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchJson(uri: string): Promise {\n return (await fetchOrThrow(uri)).json();\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchNetWeights(uri: string): Promise {\n return new Float32Array(await (await fetchOrThrow(uri)).arrayBuffer());\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { getModelUris } from '../common/getModelUris';\nimport { fetchJson } from './fetchJson';\n\nexport async function loadWeightMap(\n uri: string | undefined,\n defaultModelName: string,\n): Promise {\n const { manifestUri, modelBaseUri } = getModelUris(uri, defaultModelName);\n const manifest = await fetchJson(manifestUri);\n // if (manifest['weightsManifest']) manifest = manifest['weightsManifest'];\n return tf.io.loadWeights(manifest, modelBaseUri);\n}\n", "export function getModelUris(uri: string | undefined, defaultModelName: string) {\n const defaultManifestFilename = `${defaultModelName}-weights_manifest.json`;\n\n if (!uri) {\n return {\n modelBaseUri: '',\n manifestUri: defaultManifestFilename,\n };\n }\n\n if (uri === '/') {\n return {\n modelBaseUri: '/',\n manifestUri: `/${defaultManifestFilename}`,\n };\n }\n // eslint-disable-next-line no-nested-ternary\n const protocol = uri.startsWith('http://') ? 'http://' : uri.startsWith('https://') ? 'https://' : '';\n uri = uri.replace(protocol, '');\n\n const parts = uri.split('/').filter((s) => s);\n\n const manifestFile = uri.endsWith('.json')\n ? parts[parts.length - 1]\n : defaultManifestFilename;\n\n let modelBaseUri = protocol + (uri.endsWith('.json') ? parts.slice(0, parts.length - 1) : parts).join('/');\n modelBaseUri = uri.startsWith('/') ? `/${modelBaseUri}` : modelBaseUri;\n\n return {\n modelBaseUri,\n manifestUri: modelBaseUri === '/' ? `/${manifestFile}` : `${modelBaseUri}/${manifestFile}`,\n };\n}\n", "import { IDimensions } from '../classes/index';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function matchDimensions(input: IDimensions, reference: IDimensions, useMediaDimensions: boolean = false) {\n const { width, height } = useMediaDimensions\n ? getMediaDimensions(reference)\n : reference;\n input.width = width;\n input.height = height;\n return { width, height };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock4 } from './denseBlock';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { FaceFeatureExtractorParams, IFaceFeatureExtractor } from './types';\n\nexport class FaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('FaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock4(normalized, params.dense0, true);\n out = denseBlock4(out, params.dense1);\n out = denseBlock4(out, params.dense2);\n out = denseBlock4(out, params.dense3);\n out = tf.avgPool(out, [7, 7], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../dist/tfjs.esm';\n\nimport { ParamMapping } from './common/index';\nimport { getModelUris } from './common/getModelUris';\nimport { loadWeightMap } from './dom/index';\nimport { env } from './env/index';\n\nexport abstract class NeuralNetwork {\n\n protected _params: TNetParams | undefined = undefined\n protected _paramMappings: ParamMapping[] = []\n\n constructor(protected _name: string) {\n }\n\n public get params(): TNetParams | undefined { return this._params }\n public get paramMappings(): ParamMapping[] { return this._paramMappings }\n public get isLoaded(): boolean { return !!this.params }\n\n public getParamFromPath(paramPath: string): tf.Tensor {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n return obj[objProp]\n }\n\n public reassignParamFromPath(paramPath: string, tensor: tf.Tensor) {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n obj[objProp].dispose()\n obj[objProp] = tensor\n }\n\n public getParamList() {\n return this._paramMappings.map(({ paramPath }) => ({\n path: paramPath,\n tensor: this.getParamFromPath(paramPath)\n }))\n }\n\n public getTrainableParams() {\n return this.getParamList().filter(param => param.tensor instanceof tf.Variable)\n }\n\n public getFrozenParams() {\n return this.getParamList().filter(param => !(param.tensor instanceof tf.Variable))\n }\n\n public variable() {\n this.getFrozenParams().forEach(({ path, tensor }) => {\n this.reassignParamFromPath(path, tensor.variable())\n })\n }\n\n public freeze() {\n this.getTrainableParams().forEach(({ path, tensor: variable }) => {\n const tensor = tf.tensor(variable.dataSync())\n variable.dispose()\n this.reassignParamFromPath(path, tensor)\n })\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.getParamList().forEach(param => {\n if (throwOnRedispose && param.tensor.isDisposed) {\n throw new Error(`param tensor has already been disposed for path ${param.path}`)\n }\n param.tensor.dispose()\n })\n this._params = undefined\n }\n\n public serializeParams(): Float32Array {\n return new Float32Array(\n this.getParamList()\n .map(({ tensor }) => Array.from(tensor.dataSync()) as number[])\n .reduce((flat, arr) => flat.concat(arr))\n )\n }\n\n public async load(weightsOrUrl: Float32Array | string | undefined): Promise {\n if (weightsOrUrl instanceof Float32Array) {\n this.extractWeights(weightsOrUrl)\n return\n }\n\n await this.loadFromUri(weightsOrUrl)\n }\n\n public async loadFromUri(uri: string | undefined) {\n if (uri && typeof uri !== 'string') {\n throw new Error(`${this._name}.loadFromUri - expected model uri`)\n }\n\n const weightMap = await loadWeightMap(uri, this.getDefaultModelName())\n this.loadFromWeightMap(weightMap)\n }\n\n public async loadFromDisk(filePath: string | undefined) {\n if (filePath && typeof filePath !== 'string') {\n throw new Error(`${this._name}.loadFromDisk - expected model file path`)\n }\n\n const { readFile } = env.getEnv()\n\n const { manifestUri, modelBaseUri } = getModelUris(filePath, this.getDefaultModelName())\n\n const fetchWeightsFromDisk = (filePaths: string[]) => Promise.all(\n filePaths.map(filePath => readFile(filePath).then(buf => buf.buffer))\n )\n const loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk)\n const manifest = JSON.parse((await readFile(manifestUri)).toString())\n const weightMap = await loadWeights(manifest, modelBaseUri)\n\n this.loadFromWeightMap(weightMap)\n }\n\n public loadFromWeightMap(weightMap: tf.NamedTensorMap) {\n const {\n paramMappings,\n params\n } = this.extractParamsFromWeigthMap(weightMap)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n public extractWeights(weights: Float32Array) {\n const {\n paramMappings,\n params\n } = this.extractParams(weights)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n private traversePropertyPath(paramPath: string) {\n if (!this.params) {\n throw new Error(`traversePropertyPath - model has no loaded params`)\n }\n\n const result = paramPath.split('/').reduce((res: { nextObj: any, obj?: any, objProp?: string }, objProp) => {\n if (!res.nextObj.hasOwnProperty(objProp)) {\n throw new Error(`traversePropertyPath - object does not have property ${objProp}, for path ${paramPath}`)\n }\n\n return { obj: res.nextObj, objProp, nextObj: res.nextObj[objProp] }\n }, { nextObj: this.params })\n\n const { obj, objProp } = result\n if (!obj || !objProp || !(obj[objProp] instanceof tf.Tensor)) {\n throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${paramPath}`)\n }\n\n return { obj, objProp }\n }\n\n protected abstract getDefaultModelName(): string\n protected abstract extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TNetParams, paramMappings: ParamMapping[] }\n protected abstract extractParams(weights: Float32Array): { params: TNetParams, paramMappings: ParamMapping[] }\n}", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams, SeparableConvParams } from '../common/index';\nimport { depthwiseSeparableConv } from '../common/depthwiseSeparableConv';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function denseBlock3(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock3Params,\n isFirstLayer: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, [2, 2], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, [2, 2]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n });\n}\n\nexport function denseBlock4(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock4Params,\n isFirstLayer: boolean = false,\n isScaleDown: boolean = true,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, isScaleDown ? [2, 2] : [1, 1], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, isScaleDown ? [2, 2] : [1, 1]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n const in4 = tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n const out4 = depthwiseSeparableConv(in4, denseBlockParams.conv3, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, tf.add(out3, out4)))) as tf.Tensor4D;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { SeparableConvParams } from './types';\n\nexport function depthwiseSeparableConv(\n x: tf.Tensor4D,\n params: SeparableConvParams,\n stride: [number, number],\n): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same');\n out = tf.add(out, params.bias);\n return out;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams } from './types';\n\nexport function convLayer(\n x: tf.Tensor4D,\n params: ConvParams,\n padding: 'valid' | 'same' = 'same',\n withRelu: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out = tf.add(\n tf.conv2d(x, params.filters, [1, 1], padding),\n params.bias,\n ) as tf.Tensor4D;\n\n return withRelu ? tf.relu(out) : out;\n });\n}\n", "import { ParamMapping } from './types';\n\nexport function disposeUnusedWeightTensors(weightMap: any, paramMappings: ParamMapping[]) {\n Object.keys(weightMap).forEach((path) => {\n if (!paramMappings.some((pm) => pm.originalPath === path)) {\n weightMap[path].dispose();\n }\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams, ExtractWeightsFunction, ParamMapping } from './types';\n\nexport function extractConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams => {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ExtractWeightsFunction, FCParams, ParamMapping } from './types';\n\nexport function extractFCParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): FCParams => {\n const fc_weights = tf.tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]);\n const fc_bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return {\n weights: fc_weights,\n bias: fc_bias,\n };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ExtractWeightsFunction, ParamMapping, SeparableConvParams } from './types';\n\nexport function extractSeparableConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (channelsIn: number, channelsOut: number, mappedPrefix: string): SeparableConvParams => {\n const depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]);\n const pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]);\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/depthwise_filter` },\n { paramPath: `${mappedPrefix}/pointwise_filter` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n\nexport function loadSeparableConvParamsFactory(\n // eslint-disable-next-line no-unused-vars\n extractWeightEntry: (originalPath: string, paramRank: number) => T,\n) {\n return (prefix: string): SeparableConvParams => {\n const depthwise_filter = extractWeightEntry(`${prefix}/depthwise_filter`, 4);\n const pointwise_filter = extractWeightEntry(`${prefix}/pointwise_filter`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\n// eslint-disable-next-line no-unused-vars\nexport type ExtractWeightsFunction = (numWeights: number) => Float32Array\n\nexport type ParamMapping = {\n originalPath?: string\n paramPath: string\n}\n\nexport type ConvParams = {\n filters: tf.Tensor4D\n bias: tf.Tensor1D\n}\n\nexport type FCParams = {\n weights: tf.Tensor2D\n bias: tf.Tensor1D\n}\n\nexport class SeparableConvParams {\n // eslint-disable-next-line no-useless-constructor\n constructor(\n // eslint-disable-next-line no-unused-vars\n public depthwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public pointwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public bias: tf.Tensor1D,\n // eslint-disable-next-line no-empty-function\n ) {}\n}\n", "import { isTensor } from '../utils/index';\nimport { ParamMapping } from './types';\n\nexport function extractWeightEntryFactory(weightMap: any, paramMappings: ParamMapping[]) {\n return (originalPath: string, paramRank: number, mappedPath?: string) => {\n const tensor = weightMap[originalPath];\n\n if (!isTensor(tensor, paramRank)) {\n throw new Error(`expected weightMap[${originalPath}] to be a Tensor${paramRank}D, instead have ${tensor}`);\n }\n\n paramMappings.push(\n { originalPath, paramPath: mappedPath || originalPath },\n );\n\n return tensor;\n };\n}\n", "export function extractWeightsFactory(weights: Float32Array) {\n let remainingWeights = weights;\n\n function extractWeights(numWeights: number): Float32Array {\n const ret = remainingWeights.slice(0, numWeights);\n remainingWeights = remainingWeights.slice(numWeights);\n return ret;\n }\n\n function getRemainingWeights(): Float32Array {\n return remainingWeights;\n }\n\n return {\n extractWeights,\n getRemainingWeights,\n };\n}\n", "import {\n extractConvParamsFactory,\n extractSeparableConvParamsFactory,\n ExtractWeightsFunction,\n ParamMapping,\n} from '../common/index';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractDenseBlock3Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv0`)\n : extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/conv0`);\n const conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv1`);\n const conv2 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const { conv0, conv1, conv2 } = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer);\n const conv3 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock4Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock4Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock4Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock4Params(64, 128, 'dense2');\n const dense3 = extractDenseBlock4Params(128, 256, 'dense3');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: {\n dense0, dense1, dense2, dense3,\n },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams } from './types';\n\n// eslint-disable-next-line no-unused-vars\nexport function loadConvParamsFactory(extractWeightEntry: (originalPath: string, paramRank: number) => T) {\n return (prefix: string): ConvParams => {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return { filters, bias };\n };\n}\n", "import { extractWeightEntryFactory, loadSeparableConvParamsFactory, ParamMapping } from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractDenseBlock3Params(prefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(prefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n const conv3 = extractSeparableConvParams(`${prefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock4Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock4Params('dense0', true),\n dense1: extractDenseBlock4Params('dense1'),\n dense2: extractDenseBlock4Params('dense2'),\n dense3: extractDenseBlock4Params('dense3'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { NetInput } from '../dom/index';\nimport {\n FaceFeatureExtractorParams,\n IFaceFeatureExtractor,\n TinyFaceFeatureExtractorParams,\n} from '../faceFeatureExtractor/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { NetParams } from './types';\nimport { seperateWeightMaps } from './util';\n\nexport abstract class FaceProcessor<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends NeuralNetwork {\n protected _faceFeatureExtractor: IFaceFeatureExtractor\n\n constructor(_name: string, faceFeatureExtractor: IFaceFeatureExtractor) {\n super(_name);\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): IFaceFeatureExtractor {\n return this._faceFeatureExtractor;\n }\n\n protected abstract getDefaultModelName(): string\n\n protected abstract getClassifierChannelsIn(): number\n\n protected abstract getClassifierChannelsOut(): number\n\n public runNet(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n return fullyConnectedLayer(bottleneckFeatures.as2D(bottleneckFeatures.shape[0], -1), params.fc);\n });\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights, this.getClassifierChannelsIn(), this.getClassifierChannelsOut());\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const cIn = this.getClassifierChannelsIn();\n const cOut = this.getClassifierChannelsOut();\n const classifierWeightSize = (cOut * cIn) + cOut;\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FCParams } from './types';\n\nexport function fullyConnectedLayer(\n x: tf.Tensor2D,\n params: FCParams,\n): tf.Tensor2D {\n return tf.tidy(() => tf.add(\n tf.matMul(x, params.weights),\n params.bias,\n ));\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array, channelsIn: number, channelsOut: number): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const fc = extractFCParams(channelsIn, channelsOut, 'fc');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: extractFcParams('fc'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nexport function seperateWeightMaps(weightMap: tf.NamedTensorMap) {\n const featureExtractorMap: tf.NamedTensorMap = {};\n const classifierMap: tf.NamedTensorMap = {};\n\n Object.keys(weightMap).forEach((key) => {\n const map = key.startsWith('fc') ? classifierMap : featureExtractorMap;\n map[key] = weightMap[key];\n });\n\n return { featureExtractorMap, classifierMap };\n}\n", "export const FACE_EXPRESSION_LABELS = ['neutral', 'happy', 'sad', 'angry', 'fearful', 'disgusted', 'surprised'];\n\nexport class FaceExpressions {\n public neutral: number\n\n public happy: number\n\n public sad: number\n\n public angry: number\n\n public fearful: number\n\n public disgusted: number\n\n public surprised: number\n\n constructor(probabilities: number[] | Float32Array) {\n if (probabilities.length !== 7) {\n throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${probabilities.length}`);\n }\n\n FACE_EXPRESSION_LABELS.forEach((expression, idx) => {\n this[expression] = probabilities[idx];\n });\n }\n\n asSortedArray() {\n return FACE_EXPRESSION_LABELS\n .map((expression) => ({ expression, probability: this[expression] as number }))\n .sort((e0, e1) => e1.probability - e0.probability);\n }\n}\n", "import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\n\nexport type WithFaceExpressions = TSource & {\n expressions: FaceExpressions\n}\n\nexport function isWithFaceExpressions(obj: any): obj is WithFaceExpressions<{}> {\n return obj.expressions instanceof FaceExpressions;\n}\n\nexport function extendWithFaceExpressions<\n TSource\n>(\n sourceObj: TSource,\n expressions: FaceExpressions,\n): WithFaceExpressions {\n const extension = { expressions };\n return { ...sourceObj, ...extension };\n}\n", "import { IPoint, Point } from '../classes/index';\nimport { FaceExpressions } from '../faceExpressionNet/index';\nimport { isWithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { round } from '../utils/index';\nimport { DrawTextField } from './DrawTextField';\n\nexport type DrawFaceExpressionsInput = FaceExpressions | WithFaceExpressions<{}>\n\nexport function drawFaceExpressions(\n canvasArg: string | HTMLCanvasElement,\n faceExpressions: DrawFaceExpressionsInput | Array,\n minConfidence = 0.1,\n textFieldAnchor?: IPoint,\n) {\n const faceExpressionsArray = Array.isArray(faceExpressions) ? faceExpressions : [faceExpressions];\n\n faceExpressionsArray.forEach((e) => {\n // eslint-disable-next-line no-nested-ternary\n const expr = e instanceof FaceExpressions\n ? e\n : (isWithFaceExpressions(e) ? e.expressions : undefined);\n if (!expr) {\n throw new Error('drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof');\n }\n\n const sorted = expr.asSortedArray();\n const resultsToDisplay = sorted.filter((exprLocal) => exprLocal.probability > minConfidence);\n\n const anchor = isWithFaceDetection(e)\n ? e.detection.box.bottomLeft\n : (textFieldAnchor || new Point(0, 0));\n\n const drawTextField = new DrawTextField(\n resultsToDisplay.map((exprLocal) => `${exprLocal.expression} (${round(exprLocal.probability)})`),\n anchor,\n );\n drawTextField.draw(canvasArg);\n });\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { isWithFaceDetection, WithFaceDetection } from './WithFaceDetection';\n\nexport type WithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 > = TSource & {\n landmarks: TFaceLandmarks\n unshiftedLandmarks: TFaceLandmarks\n alignedRect: FaceDetection\n }\n\nexport function isWithFaceLandmarks(obj: any): obj is WithFaceLandmarks, FaceLandmarks> {\n return isWithFaceDetection(obj)\n // eslint-disable-next-line dot-notation\n && obj['landmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['unshiftedLandmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['alignedRect'] instanceof FaceDetection;\n}\n\nexport function extendWithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 >(sourceObj: TSource, unshiftedLandmarks: TFaceLandmarks): WithFaceLandmarks {\n const { box: shift } = sourceObj.detection;\n const landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y);\n\n const rect = landmarks.align();\n const { imageDims } = sourceObj.detection;\n const alignedRect = new FaceDetection(sourceObj.detection.score, rect.rescale(imageDims.reverse()), imageDims);\n\n const extension = {\n landmarks,\n unshiftedLandmarks,\n alignedRect,\n };\n\n return { ...sourceObj, ...extension };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IPoint } from '../classes/index';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { drawContour } from './drawContour';\n\nexport interface IDrawFaceLandmarksOptions {\n drawLines?: boolean\n drawPoints?: boolean\n lineWidth?: number\n pointSize?: number\n lineColor?: string\n pointColor?: string\n}\n\nexport class DrawFaceLandmarksOptions {\n public drawLines: boolean\n\n public drawPoints: boolean\n\n public lineWidth: number\n\n public pointSize: number\n\n public lineColor: string\n\n public pointColor: string\n\n constructor(options: IDrawFaceLandmarksOptions = {}) {\n const {\n drawLines = true, drawPoints = true, lineWidth, lineColor, pointSize, pointColor,\n } = options;\n this.drawLines = drawLines;\n this.drawPoints = drawPoints;\n this.lineWidth = lineWidth || 1;\n this.pointSize = pointSize || 2;\n this.lineColor = lineColor || 'rgba(0, 255, 255, 1)';\n this.pointColor = pointColor || 'rgba(255, 0, 255, 1)';\n }\n}\n\nexport class DrawFaceLandmarks {\n public faceLandmarks: FaceLandmarks\n\n public options: DrawFaceLandmarksOptions\n\n constructor(\n faceLandmarks: FaceLandmarks,\n options: IDrawFaceLandmarksOptions = {},\n ) {\n this.faceLandmarks = faceLandmarks;\n this.options = new DrawFaceLandmarksOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const {\n drawLines, drawPoints, lineWidth, lineColor, pointSize, pointColor,\n } = this.options;\n\n if (drawLines && this.faceLandmarks instanceof FaceLandmarks68) {\n ctx.strokeStyle = lineColor;\n ctx.lineWidth = lineWidth;\n drawContour(ctx, this.faceLandmarks.getJawOutline());\n drawContour(ctx, this.faceLandmarks.getLeftEyeBrow());\n drawContour(ctx, this.faceLandmarks.getRightEyeBrow());\n drawContour(ctx, this.faceLandmarks.getNose());\n drawContour(ctx, this.faceLandmarks.getLeftEye(), true);\n drawContour(ctx, this.faceLandmarks.getRightEye(), true);\n drawContour(ctx, this.faceLandmarks.getMouth(), true);\n }\n\n if (drawPoints) {\n ctx.strokeStyle = pointColor;\n ctx.fillStyle = pointColor;\n\n const drawPoint = (pt: IPoint) => {\n ctx.beginPath();\n ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI);\n ctx.fill();\n };\n this.faceLandmarks.positions.forEach(drawPoint);\n }\n }\n}\n\nexport type DrawFaceLandmarksInput = FaceLandmarks | WithFaceLandmarks>\n\nexport function drawFaceLandmarks(\n canvasArg: string | HTMLCanvasElement,\n faceLandmarks: DrawFaceLandmarksInput | Array,\n) {\n const faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks];\n faceLandmarksArray.forEach((f) => {\n // eslint-disable-next-line no-nested-ternary\n const landmarks = f instanceof FaceLandmarks\n ? f\n : (isWithFaceLandmarks(f) ? f.landmarks : undefined);\n if (!landmarks) {\n throw new Error('drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof');\n }\n\n new DrawFaceLandmarks(landmarks).draw(canvasArg);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { seperateWeightMaps } from '../faceProcessor/util';\nimport { TinyXception } from '../xception/TinyXception';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport {\n AgeAndGenderPrediction, Gender, NetOutput, NetParams,\n} from './types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\n\nexport class AgeGenderNet extends NeuralNetwork {\n private _faceFeatureExtractor: TinyXception\n\n constructor(faceFeatureExtractor: TinyXception = new TinyXception(2)) {\n super('AgeGenderNet');\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): TinyXception {\n return this._faceFeatureExtractor;\n }\n\n public runNet(input: NetInput | tf.Tensor4D): NetOutput {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n\n const pooled = tf.avgPool(bottleneckFeatures, [7, 7], [2, 2], 'valid').as2D(bottleneckFeatures.shape[0], -1);\n const age = fullyConnectedLayer(pooled, params.fc.age).as1D();\n const gender = fullyConnectedLayer(pooled, params.fc.gender);\n return { age, gender };\n });\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): NetOutput {\n return tf.tidy(() => {\n const { age, gender } = this.runNet(input);\n return { age, gender: tf.softmax(gender) };\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictAgeAndGender(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n\n const ages = tf.unstack(out.age);\n const genders = tf.unstack(out.gender);\n const ageAndGenderTensors = ages.map((ageTensor, i) => ({\n ageTensor,\n genderTensor: genders[i],\n }));\n\n const predictionsByBatch = await Promise.all(\n ageAndGenderTensors.map(async ({ ageTensor, genderTensor }) => {\n const age = (await ageTensor.data())[0];\n const probMale = (await genderTensor.data())[0];\n const isMale = probMale > 0.5;\n const gender = isMale ? Gender.MALE : Gender.FEMALE;\n const genderProbability = isMale ? probMale : (1 - probMale);\n\n ageTensor.dispose();\n genderTensor.dispose();\n return { age, gender, genderProbability };\n }),\n );\n out.age.dispose();\n out.gender.dispose();\n\n return netInput.isBatchInput ? predictionsByBatch as AgeAndGenderPrediction[] : predictionsByBatch[0] as AgeAndGenderPrediction;\n }\n\n protected getDefaultModelName(): string {\n return 'age_gender_model';\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights);\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const classifierWeightSize = (512 * 1 + 1) + (512 * 2 + 2);\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams, depthwiseSeparableConv } from '../common/index';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { range } from '../utils/index';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction conv(x: tf.Tensor4D, params: ConvParams, stride: [number, number]): tf.Tensor4D {\n return tf.add(tf.conv2d(x, params.filters, stride, 'same'), params.bias);\n}\n\nfunction reductionBlock(x: tf.Tensor4D, params: ReductionBlockParams, isActivateInput: boolean = true): tf.Tensor4D {\n let out = isActivateInput ? tf.relu(x) : x;\n out = depthwiseSeparableConv(out, params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = tf.maxPool(out, [3, 3], [2, 2], 'same');\n out = tf.add(out, conv(x, params.expansion_conv, [2, 2]));\n return out;\n}\n\nfunction mainBlock(x: tf.Tensor4D, params: MainBlockParams): tf.Tensor4D {\n let out = depthwiseSeparableConv(tf.relu(x), params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv2, [1, 1]);\n out = tf.add(out, x);\n return out;\n}\n\nexport class TinyXception extends NeuralNetwork {\n private _numMainBlocks: number\n\n constructor(numMainBlocks: number) {\n super('TinyXception');\n this._numMainBlocks = numMainBlocks;\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyXception - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = tf.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));\n out = reductionBlock(out, params.entry_flow.reduction_block_0, false);\n out = reductionBlock(out, params.entry_flow.reduction_block_1);\n\n range(this._numMainBlocks, 0, 1).forEach((idx) => {\n out = mainBlock(out, params.middle_flow[`main_block_${idx}`]);\n });\n\n out = reductionBlock(out, params.exit_flow.reduction_block);\n out = tf.relu(depthwiseSeparableConv(out, params.exit_flow.separable_conv, [1, 1]));\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_xception_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this._numMainBlocks);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights, this._numMainBlocks);\n }\n}\n", "import { extractConvParamsFactory, extractSeparableConvParamsFactory, extractWeightsFactory } from '../common/index';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractReductionBlockParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(channels: number, mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParams(weights: Float32Array, numMainBlocks: number): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const entry_flow_conv_in = extractConvParams(3, 32, 3, 'entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams(32, 64, 'entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams(64, 128, 'entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(128, `middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams(128, 256, 'exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams(256, 512, 'exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { entry_flow, middle_flow, exit_flow },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n disposeUnusedWeightTensors,\n extractWeightEntryFactory,\n loadSeparableConvParamsFactory,\n ParamMapping,\n} from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractReductionBlockParams(mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(`${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(`${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n numMainBlocks: number,\n): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const entry_flow_conv_in = extractConvParams('entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams('entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams('entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(`middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams('exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams('exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params: { entry_flow, middle_flow, exit_flow }, paramMappings };\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const age = extractFCParams(512, 1, 'fc/age');\n const gender = extractFCParams(512, 2, 'fc/gender');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc: { age, gender } },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: {\n age: extractFcParams('fc/age'),\n gender: extractFcParams('fc/gender'),\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FCParams } from '../common/index';\n\n// eslint-disable-next-line no-shadow\nexport enum Gender {\n // eslint-disable-next-line no-unused-vars\n FEMALE = 'female',\n // eslint-disable-next-line no-unused-vars\n MALE = 'male'\n}\n\nexport type AgeAndGenderPrediction = {\n age: number\n gender: Gender\n genderProbability: number\n}\n\nexport type NetOutput = { age: tf.Tensor1D, gender: tf.Tensor2D }\n\nexport type NetParams = {\n fc: {\n age: FCParams\n gender: FCParams\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { IDimensions, Point } from '../classes/index';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractorParams, TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { isEven } from '../utils/index';\n\nexport abstract class FaceLandmark68NetBase<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends FaceProcessor {\n public postProcess(output: tf.Tensor2D, inputSize: number, originalDimensions: IDimensions[]): tf.Tensor2D {\n const inputDimensions = originalDimensions.map(({ width, height }) => {\n const scale = inputSize / Math.max(height, width);\n return {\n width: width * scale,\n height: height * scale,\n };\n });\n\n const batchSize = inputDimensions.length;\n\n return tf.tidy(() => {\n const createInterleavedTensor = (fillX: number, fillY: number) => tf.stack([tf.fill([68], fillX, 'float32'), tf.fill([68], fillY, 'float32')], 1).as2D(1, 136).as1D();\n\n // eslint-disable-next-line no-unused-vars\n const getPadding = (batchIdx: number, cond: (w: number, h: number) => boolean): number => {\n const { width, height } = inputDimensions[batchIdx];\n return cond(width, height) ? Math.abs(width - height) / 2 : 0;\n };\n\n const getPaddingX = (batchIdx: number) => getPadding(batchIdx, (w, h) => w < h);\n const getPaddingY = (batchIdx: number) => getPadding(batchIdx, (w, h) => h < w);\n\n const landmarkTensors = output\n .mul(tf.fill([batchSize, 136], inputSize, 'float32'))\n .sub(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n getPaddingX(batchIdx),\n getPaddingY(batchIdx),\n ))))\n .div(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n inputDimensions[batchIdx].width,\n inputDimensions[batchIdx].height,\n ))));\n\n return landmarkTensors as tf.Tensor2D;\n });\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n return tf.tidy(() => {\n const out = this.runNet(input);\n return this.postProcess(\n out,\n input.inputSize as number,\n input.inputDimensions.map(([height, width]) => ({ height, width })),\n );\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async detectLandmarks(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const landmarkTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const landmarksForBatch = await Promise.all(landmarkTensors.map(\n async (landmarkTensor, batchIdx) => {\n const landmarksArray = Array.from(await landmarkTensor.data());\n const xCoords = landmarksArray.filter((_, i) => isEven(i));\n const yCoords = landmarksArray.filter((_, i) => !isEven(i));\n\n return new FaceLandmarks68(\n Array(68).fill(0).map((_, i) => new Point(xCoords[i] as number, yCoords[i] as number)),\n {\n height: netInput.getInputHeight(batchIdx),\n width: netInput.getInputWidth(batchIdx),\n },\n );\n },\n ));\n\n landmarkTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput ? landmarksForBatch as FaceLandmarks68[] : landmarksForBatch[0] as FaceLandmarks68;\n }\n\n protected getClassifierChannelsOut(): number {\n return 136;\n }\n}\n", "import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68Net extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceLandmark68Net', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock3 } from './denseBlock';\nimport { extractParamsFromWeigthMapTiny } from './extractParamsFromWeigthMapTiny';\nimport { extractParamsTiny } from './extractParamsTiny';\nimport { IFaceFeatureExtractor, TinyFaceFeatureExtractorParams } from './types';\n\nexport class TinyFaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('TinyFaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyFaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock3(normalized, params.dense0, true);\n out = denseBlock3(out, params.dense1);\n out = denseBlock3(out, params.dense2);\n out = tf.avgPool(out, [14, 14], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_tiny_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMapTiny(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParamsTiny(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMapTiny(\n weightMap: tf.NamedTensorMap,\n): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock3Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock3Params('dense0', true),\n dense1: extractDenseBlock3Params('dense1'),\n dense2: extractDenseBlock3Params('dense2'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsTiny(weights: Float32Array): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock3Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock3Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock3Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock3Params(64, 128, 'dense2');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { dense0, dense1, dense2 },\n };\n}\n", "import { TinyFaceFeatureExtractor } from '../faceFeatureExtractor/TinyFaceFeatureExtractor';\nimport { TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68TinyNet extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: TinyFaceFeatureExtractor = new TinyFaceFeatureExtractor()) {\n super('FaceLandmark68TinyNet', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_tiny_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 128;\n }\n}\n", "import { FaceLandmark68Net } from './FaceLandmark68Net';\n\nexport * from './FaceLandmark68Net';\nexport * from './FaceLandmark68TinyNet';\n\nexport class FaceLandmarkNet extends FaceLandmark68Net {}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { convDown } from './convLayer';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { residual, residualDown } from './residualLayer';\nimport { NetParams } from './types';\n\nexport class FaceRecognitionNet extends NeuralNetwork {\n constructor() {\n super('FaceRecognitionNet');\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceRecognitionNet - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(150, true).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(150, true), 'float32');\n\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = convDown(normalized, params.conv32_down);\n out = tf.maxPool(out, 3, 2, 'valid');\n\n out = residual(out, params.conv32_1);\n out = residual(out, params.conv32_2);\n out = residual(out, params.conv32_3);\n\n out = residualDown(out, params.conv64_down);\n out = residual(out, params.conv64_1);\n out = residual(out, params.conv64_2);\n out = residual(out, params.conv64_3);\n\n out = residualDown(out, params.conv128_down);\n out = residual(out, params.conv128_1);\n out = residual(out, params.conv128_2);\n\n out = residualDown(out, params.conv256_down);\n out = residual(out, params.conv256_1);\n out = residual(out, params.conv256_2);\n out = residualDown(out, params.conv256_down_out);\n\n const globalAvg = out.mean([1, 2]) as tf.Tensor2D;\n const fullyConnected = tf.matMul(globalAvg, params.fc);\n\n return fullyConnected;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async computeFaceDescriptor(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n\n const faceDescriptorTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const faceDescriptorsForBatch = await Promise.all(faceDescriptorTensors.map(\n (t) => t.data(),\n )) as Float32Array[];\n\n faceDescriptorTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput\n ? faceDescriptorsForBatch\n : faceDescriptorsForBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_recognition_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { scale } from './scaleLayer';\nimport { ConvLayerParams } from './types';\n\nfunction convLayer(\n x: tf.Tensor4D,\n params: ConvLayerParams,\n strides: [number, number],\n withRelu: boolean,\n padding: 'valid' | 'same' = 'same',\n): tf.Tensor4D {\n const { filters, bias } = params.conv;\n\n let out = tf.conv2d(x, filters, strides, padding);\n out = tf.add(out, bias);\n out = scale(out, params.scale);\n return withRelu ? tf.relu(out) : out;\n}\n\nexport function conv(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], true);\n}\n\nexport function convNoRelu(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], false);\n}\n\nexport function convDown(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [2, 2], true, 'valid');\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ScaleLayerParams } from './types';\n\nexport function scale(x: tf.Tensor4D, params: ScaleLayerParams): tf.Tensor4D {\n return tf.add(tf.mul(x, params.weights), params.biases);\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n ConvParams, extractWeightsFactory, ExtractWeightsFunction, ParamMapping,\n} from '../common/index';\nimport { isFloat } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractFilterValues(numFilterValues: number, numFilters: number, filterSize: number): tf.Tensor4D {\n const weights = extractWeights(numFilterValues);\n const depth = weights.length / (numFilters * filterSize * filterSize);\n\n if (isFloat(depth)) {\n throw new Error(`depth has to be an integer: ${depth}, weights.length: ${weights.length}, numFilters: ${numFilters}, filterSize: ${filterSize}`);\n }\n\n return tf.tidy(\n () => tf.transpose(\n tf.tensor4d(weights, [numFilters, depth, filterSize, filterSize]),\n [2, 3, 1, 0],\n ),\n );\n }\n\n function extractConvParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams {\n const filters = extractFilterValues(numFilterValues, numFilters, filterSize);\n const bias = tf.tensor1d(extractWeights(numFilters));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n }\n\n function extractScaleLayerParams(numWeights: number, mappedPrefix: string): ScaleLayerParams {\n const weights = tf.tensor1d(extractWeights(numWeights));\n const biases = tf.tensor1d(extractWeights(numWeights));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/biases` },\n );\n\n return {\n weights,\n biases,\n };\n }\n\n function extractConvLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvLayerParams {\n const conv = extractConvParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv`);\n const scale = extractScaleLayerParams(numFilters, `${mappedPrefix}/scale`);\n\n return { conv, scale };\n }\n\n function extractResidualLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n isDown: boolean = false,\n ): ResidualLayerParams {\n const conv1 = extractConvLayerParams((isDown ? 0.5 : 1) * numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv1`);\n const conv2 = extractConvLayerParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv2`);\n\n return { conv1, conv2 };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const conv32_down = extractConvLayerParams(4704, 32, 7, 'conv32_down');\n const conv32_1 = extractResidualLayerParams(9216, 32, 3, 'conv32_1');\n const conv32_2 = extractResidualLayerParams(9216, 32, 3, 'conv32_2');\n const conv32_3 = extractResidualLayerParams(9216, 32, 3, 'conv32_3');\n\n const conv64_down = extractResidualLayerParams(36864, 64, 3, 'conv64_down', true);\n const conv64_1 = extractResidualLayerParams(36864, 64, 3, 'conv64_1');\n const conv64_2 = extractResidualLayerParams(36864, 64, 3, 'conv64_2');\n const conv64_3 = extractResidualLayerParams(36864, 64, 3, 'conv64_3');\n\n const conv128_down = extractResidualLayerParams(147456, 128, 3, 'conv128_down', true);\n const conv128_1 = extractResidualLayerParams(147456, 128, 3, 'conv128_1');\n const conv128_2 = extractResidualLayerParams(147456, 128, 3, 'conv128_2');\n\n const conv256_down = extractResidualLayerParams(589824, 256, 3, 'conv256_down', true);\n const conv256_1 = extractResidualLayerParams(589824, 256, 3, 'conv256_1');\n const conv256_2 = extractResidualLayerParams(589824, 256, 3, 'conv256_2');\n const conv256_down_out = extractResidualLayerParams(589824, 256, 3, 'conv256_down_out');\n\n const fc = tf.tidy(\n () => tf.transpose(tf.tensor2d(extractWeights(256 * 128), [128, 256]), [1, 0]),\n );\n paramMappings.push({ paramPath: 'fc' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping } from '../common/index';\nimport { isTensor2D } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractScaleLayerParams(prefix: string): ScaleLayerParams {\n const weights = extractWeightEntry(`${prefix}/scale/weights`, 1);\n const biases = extractWeightEntry(`${prefix}/scale/biases`, 1);\n\n return { weights, biases };\n }\n\n function extractConvLayerParams(prefix: string): ConvLayerParams {\n const filters = extractWeightEntry(`${prefix}/conv/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/conv/bias`, 1);\n const scale = extractScaleLayerParams(prefix);\n\n return { conv: { filters, bias }, scale };\n }\n\n function extractResidualLayerParams(prefix: string): ResidualLayerParams {\n return {\n conv1: extractConvLayerParams(`${prefix}/conv1`),\n conv2: extractConvLayerParams(`${prefix}/conv2`),\n };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const conv32_down = extractConvLayerParams('conv32_down');\n const conv32_1 = extractResidualLayerParams('conv32_1');\n const conv32_2 = extractResidualLayerParams('conv32_2');\n const conv32_3 = extractResidualLayerParams('conv32_3');\n\n const conv64_down = extractResidualLayerParams('conv64_down');\n const conv64_1 = extractResidualLayerParams('conv64_1');\n const conv64_2 = extractResidualLayerParams('conv64_2');\n const conv64_3 = extractResidualLayerParams('conv64_3');\n\n const conv128_down = extractResidualLayerParams('conv128_down');\n const conv128_1 = extractResidualLayerParams('conv128_1');\n const conv128_2 = extractResidualLayerParams('conv128_2');\n\n const conv256_down = extractResidualLayerParams('conv256_down');\n const conv256_1 = extractResidualLayerParams('conv256_1');\n const conv256_2 = extractResidualLayerParams('conv256_2');\n const conv256_down_out = extractResidualLayerParams('conv256_down_out');\n\n const { fc } = weightMap;\n paramMappings.push({ originalPath: 'fc', paramPath: 'fc' });\n\n if (!isTensor2D(fc)) {\n throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${fc}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { conv, convDown, convNoRelu } from './convLayer';\nimport { ResidualLayerParams } from './types';\n\nexport function residual(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = conv(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n out = tf.add(out, x);\n out = tf.relu(out);\n return out;\n}\n\nexport function residualDown(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = convDown(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n\n let pooled = tf.avgPool(x, 2, 2, 'valid') as tf.Tensor4D;\n const zeros = tf.zeros(pooled.shape);\n const isPad = pooled.shape[3] !== out.shape[3];\n const isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2];\n\n if (isAdjustShape) {\n const padShapeX = [...out.shape] as [number, number, number, number];\n padShapeX[1] = 1;\n const zerosW = tf.zeros(padShapeX);\n out = tf.concat([out, zerosW], 1);\n\n const padShapeY = [...out.shape] as [number, number, number, number];\n padShapeY[2] = 1;\n const zerosH = tf.zeros(padShapeY);\n out = tf.concat([out, zerosH], 2);\n }\n\n pooled = isPad ? tf.concat([pooled, zeros], 3) : pooled;\n out = tf.add(pooled, out) as tf.Tensor4D;\n\n out = tf.relu(out);\n return out;\n}\n", "import { FaceRecognitionNet } from './FaceRecognitionNet';\n\nexport * from './FaceRecognitionNet';\n\nexport function createFaceRecognitionNet(weights: Float32Array) {\n const net = new FaceRecognitionNet();\n net.extractWeights(weights);\n return net;\n}\n", "export type WithFaceDescriptor = TSource & {\n descriptor: Float32Array\n}\n\nexport function extendWithFaceDescriptor<\n TSource\n>(\n sourceObj: TSource,\n descriptor: Float32Array,\n): WithFaceDescriptor {\n const extension = { descriptor };\n return { ...sourceObj, ...extension };\n}\n", "export type WithAge = TSource & {\n age: number\n}\n\nexport function isWithAge(obj: any): obj is WithAge<{}> {\n return typeof obj.age === 'number';\n}\n\nexport function extendWithAge<\n TSource\n>(\n sourceObj: TSource,\n age: number,\n): WithAge {\n const extension = { age };\n return { ...sourceObj, ...extension };\n}\n", "import { Gender } from '../ageGenderNet/types';\nimport { isValidProbablitiy } from '../utils/index';\n\nexport type WithGender = TSource & {\n gender: Gender\n genderProbability: number\n}\n\nexport function isWithGender(obj: any): obj is WithGender<{}> {\n return (obj.gender === Gender.MALE || obj.gender === Gender.FEMALE)\n && isValidProbablitiy(obj.genderProbability);\n}\n\nexport function extendWithGender<\n TSource\n>(\n sourceObj: TSource,\n gender: Gender,\n genderProbability: number,\n): WithGender {\n const extension = { gender, genderProbability };\n return { ...sourceObj, ...extension };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { mobileNetV1 } from './mobileNetV1';\nimport { nonMaxSuppression } from './nonMaxSuppression';\nimport { outputLayer } from './outputLayer';\nimport { predictionLayer } from './predictionLayer';\nimport { ISsdMobilenetv1Options, SsdMobilenetv1Options } from './SsdMobilenetv1Options';\nimport { NetParams } from './types';\n\nexport class SsdMobilenetv1 extends NeuralNetwork {\n constructor() {\n super('SsdMobilenetv1');\n }\n\n public forwardInput(input: NetInput) {\n const { params } = this;\n\n if (!params) {\n throw new Error('SsdMobilenetv1 - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(512, false).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(512, false), 'float32');\n\n const x = tf.sub(tf.mul(batchTensor, tf.scalar(0.007843137718737125)), tf.scalar(1)) as tf.Tensor4D;\n const features = mobileNetV1(x, params.mobilenetv1);\n\n const {\n boxPredictions,\n classPredictions,\n } = predictionLayer(features.out, features.conv11, params.prediction_layer);\n\n return outputLayer(boxPredictions, classPredictions, params.output_layer);\n });\n }\n\n public async forward(input: TNetInput) {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async locateFaces(\n input: TNetInput,\n options: ISsdMobilenetv1Options = {},\n ): Promise {\n const { maxResults, minConfidence } = new SsdMobilenetv1Options(options);\n\n const netInput = await toNetInput(input);\n\n const {\n boxes: _boxes,\n scores: _scores,\n } = this.forwardInput(netInput);\n\n // TODO batches\n const boxes = _boxes[0];\n const scores = _scores[0];\n for (let i = 1; i < _boxes.length; i++) {\n _boxes[i].dispose();\n _scores[i].dispose();\n }\n\n // TODO find a better way to filter by minConfidence\n const scoresData = Array.from(await scores.data());\n\n const iouThreshold = 0.5;\n const indices = nonMaxSuppression(\n boxes,\n scoresData as number[],\n maxResults,\n iouThreshold,\n minConfidence,\n );\n\n const reshapedDims = netInput.getReshapedInputDimensions(0);\n const inputSize = netInput.inputSize as number;\n const padX = inputSize / reshapedDims.width;\n const padY = inputSize / reshapedDims.height;\n\n const boxesData = boxes.arraySync();\n const results = indices\n .map((idx) => {\n const [top, bottom] = [\n Math.max(0, boxesData[idx][0]),\n Math.min(1.0, boxesData[idx][2]),\n ].map((val) => val * padY);\n const [left, right] = [\n Math.max(0, boxesData[idx][1]),\n Math.min(1.0, boxesData[idx][3]),\n ].map((val) => val * padX);\n return new FaceDetection(\n scoresData[idx] as number,\n new Rect(\n left,\n top,\n right - left,\n bottom - top,\n ),\n {\n height: netInput.getInputHeight(0),\n width: netInput.getInputWidth(0),\n },\n );\n });\n\n boxes.dispose();\n scores.dispose();\n\n return results;\n }\n\n protected getDefaultModelName(): string {\n return 'ssd_mobilenetv1_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n ExtractWeightsFunction, ParamMapping, ConvParams, extractWeightsFactory,\n} from '../common/index';\nimport {\n MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractDepthwiseConvParams(numChannels: number, mappedPrefix: string): MobileNetV1.DepthwiseConvParams {\n const filters = tf.tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]);\n const batch_norm_scale = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_offset = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_mean = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_variance = tf.tensor1d(extractWeights(numChannels));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/batch_norm_scale` },\n { paramPath: `${mappedPrefix}/batch_norm_offset` },\n { paramPath: `${mappedPrefix}/batch_norm_mean` },\n { paramPath: `${mappedPrefix}/batch_norm_variance` },\n );\n\n return {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n };\n }\n\n function extractConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n isPointwiseConv?: boolean,\n ): ConvParams {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/${isPointwiseConv ? 'batch_norm_offset' : 'bias'}` },\n );\n\n return { filters, bias };\n }\n\n function extractPointwiseConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): PointwiseConvParams {\n const {\n filters,\n bias,\n } = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true);\n\n return {\n filters,\n batch_norm_offset: bias,\n };\n }\n\n function extractConvPairParams(\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): MobileNetV1.ConvPairParams {\n const depthwise_conv = extractDepthwiseConvParams(channelsIn, `${mappedPrefix}/depthwise_conv`);\n const pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/pointwise_conv`);\n\n return { depthwise_conv, pointwise_conv };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n const conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0');\n\n const conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1');\n const conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2');\n const conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3');\n const conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4');\n const conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5');\n const conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6');\n const conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7');\n const conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8');\n const conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9');\n const conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10');\n const conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11');\n const conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12');\n const conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13');\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n conv_8,\n conv_9,\n conv_10,\n conv_11,\n conv_12,\n conv_13,\n };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n const conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0');\n const conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1');\n const conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2');\n const conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3');\n const conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4');\n const conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5');\n const conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6');\n const conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7');\n\n const box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor');\n const class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor');\n const box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor');\n const class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor');\n const box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor');\n const class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor');\n const box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor');\n const class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor');\n const box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor');\n const class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor');\n const box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor');\n const class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor');\n\n const box_predictor_0 = {\n box_encoding_predictor: box_encoding_0_predictor,\n class_predictor: class_predictor_0,\n };\n const box_predictor_1 = {\n box_encoding_predictor: box_encoding_1_predictor,\n class_predictor: class_predictor_1,\n };\n const box_predictor_2 = {\n box_encoding_predictor: box_encoding_2_predictor,\n class_predictor: class_predictor_2,\n };\n const box_predictor_3 = {\n box_encoding_predictor: box_encoding_3_predictor,\n class_predictor: class_predictor_3,\n };\n const box_predictor_4 = {\n box_encoding_predictor: box_encoding_4_predictor,\n class_predictor: class_predictor_4,\n };\n const box_predictor_5 = {\n box_encoding_predictor: box_encoding_5_predictor,\n class_predictor: class_predictor_5,\n };\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n box_predictor_0,\n box_predictor_1,\n box_predictor_2,\n box_predictor_3,\n box_predictor_4,\n box_predictor_5,\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const mobilenetv1 = extractMobilenetV1Params();\n const prediction_layer = extractPredictionLayerParams();\n const extra_dim = tf.tensor3d(\n extractWeights(5118 * 4),\n [1, 5118, 4],\n );\n const output_layer = {\n extra_dim,\n };\n\n paramMappings.push({ paramPath: 'output_layer/extra_dim' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n params: {\n mobilenetv1,\n prediction_layer,\n output_layer,\n },\n paramMappings,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n ConvParams, disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping,\n} from '../common/index';\nimport { isTensor3D } from '../utils/index';\nimport {\n BoxPredictionParams, MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractPointwiseConvParams(prefix: string, idx: number, mappedPrefix: string): PointwiseConvParams {\n const filters = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/weights`, 4, `${mappedPrefix}/filters`);\n const batch_norm_offset = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/convolution_bn_offset`, 1, `${mappedPrefix}/batch_norm_offset`);\n\n return { filters, batch_norm_offset };\n }\n\n function extractConvPairParams(idx: number): MobileNetV1.ConvPairParams {\n const mappedPrefix = `mobilenetv1/conv_${idx}`;\n const prefixDepthwiseConv = `MobilenetV1/Conv2d_${idx}_depthwise`;\n const mappedPrefixDepthwiseConv = `${mappedPrefix}/depthwise_conv`;\n const mappedPrefixPointwiseConv = `${mappedPrefix}/pointwise_conv`;\n\n const filters = extractWeightEntry(`${prefixDepthwiseConv}/depthwise_weights`, 4, `${mappedPrefixDepthwiseConv}/filters`);\n const batch_norm_scale = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/gamma`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_scale`);\n const batch_norm_offset = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/beta`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_offset`);\n const batch_norm_mean = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_mean`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_mean`);\n const batch_norm_variance = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_variance`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_variance`);\n\n return {\n depthwise_conv: {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n },\n pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv),\n };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n return {\n conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'),\n conv_1: extractConvPairParams(1),\n conv_2: extractConvPairParams(2),\n conv_3: extractConvPairParams(3),\n conv_4: extractConvPairParams(4),\n conv_5: extractConvPairParams(5),\n conv_6: extractConvPairParams(6),\n conv_7: extractConvPairParams(7),\n conv_8: extractConvPairParams(8),\n conv_9: extractConvPairParams(9),\n conv_10: extractConvPairParams(10),\n conv_11: extractConvPairParams(11),\n conv_12: extractConvPairParams(12),\n conv_13: extractConvPairParams(13),\n };\n }\n\n function extractConvParams(prefix: string, mappedPrefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/weights`, 4, `${mappedPrefix}/filters`);\n const bias = extractWeightEntry(`${prefix}/biases`, 1, `${mappedPrefix}/bias`);\n\n return { filters, bias };\n }\n\n function extractBoxPredictorParams(idx: number): BoxPredictionParams {\n const box_encoding_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/BoxEncodingPredictor`,\n `prediction_layer/box_predictor_${idx}/box_encoding_predictor`,\n );\n const class_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/ClassPredictor`,\n `prediction_layer/box_predictor_${idx}/class_predictor`,\n );\n\n return { box_encoding_predictor, class_predictor };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n return {\n conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'),\n conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'),\n conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'),\n conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'),\n conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'),\n conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'),\n conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'),\n conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'),\n box_predictor_0: extractBoxPredictorParams(0),\n box_predictor_1: extractBoxPredictorParams(1),\n box_predictor_2: extractBoxPredictorParams(2),\n box_predictor_3: extractBoxPredictorParams(3),\n box_predictor_4: extractBoxPredictorParams(4),\n box_predictor_5: extractBoxPredictorParams(5),\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const extra_dim = weightMap['Output/extra_dim'];\n paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' });\n\n if (!isTensor3D(extra_dim)) {\n throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${extra_dim}`);\n }\n\n const params = {\n mobilenetv1: extractMobilenetV1Params(),\n prediction_layer: extractPredictionLayerParams(),\n output_layer: {\n extra_dim,\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { MobileNetV1 } from './types';\n\nconst epsilon = 0.0010000000474974513;\n\nfunction depthwiseConvLayer(\n x: tf.Tensor4D,\n params: MobileNetV1.DepthwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.depthwiseConv2d(x, params.filters, strides, 'same');\n out = tf.batchNorm(\n out,\n params.batch_norm_mean,\n params.batch_norm_variance,\n params.batch_norm_offset,\n params.batch_norm_scale,\n epsilon,\n );\n return tf.clipByValue(out, 0, 6);\n });\n}\n\nfunction getStridesForLayerIdx(layerIdx: number): [number, number] {\n return [2, 4, 6, 12].some((idx) => idx === layerIdx) ? [2, 2] : [1, 1];\n}\n\nexport function mobileNetV1(x: tf.Tensor4D, params: MobileNetV1.Params) {\n return tf.tidy(() => {\n let conv11;\n let out = pointwiseConvLayer(x, params.conv_0, [2, 2]);\n\n const convPairParams = [\n params.conv_1,\n params.conv_2,\n params.conv_3,\n params.conv_4,\n params.conv_5,\n params.conv_6,\n params.conv_7,\n params.conv_8,\n params.conv_9,\n params.conv_10,\n params.conv_11,\n params.conv_12,\n params.conv_13,\n ];\n\n convPairParams.forEach((param, i) => {\n const layerIdx = i + 1;\n const depthwiseConvStrides = getStridesForLayerIdx(layerIdx);\n out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides);\n out = pointwiseConvLayer(out, param.pointwise_conv, [1, 1]);\n if (layerIdx === 11) {\n conv11 = out;\n }\n });\n\n if (conv11 === null) {\n throw new Error('mobileNetV1 - output of conv layer 11 is null');\n }\n\n return {\n out,\n conv11: conv11 as any,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { PointwiseConvParams } from './types';\n\nexport function pointwiseConvLayer(\n x: tf.Tensor4D,\n params: PointwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.conv2d(x, params.filters, strides, 'same');\n out = tf.add(out, params.batch_norm_offset);\n return tf.clipByValue(out, 0, 6);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nfunction IOU(boxes: tf.Tensor2D, i: number, j: number) {\n const boxesData = boxes.arraySync();\n const yminI = Math.min(boxesData[i][0], boxesData[i][2]);\n const xminI = Math.min(boxesData[i][1], boxesData[i][3]);\n const ymaxI = Math.max(boxesData[i][0], boxesData[i][2]);\n const xmaxI = Math.max(boxesData[i][1], boxesData[i][3]);\n const yminJ = Math.min(boxesData[j][0], boxesData[j][2]);\n const xminJ = Math.min(boxesData[j][1], boxesData[j][3]);\n const ymaxJ = Math.max(boxesData[j][0], boxesData[j][2]);\n const xmaxJ = Math.max(boxesData[j][1], boxesData[j][3]);\n const areaI = (ymaxI - yminI) * (xmaxI - xminI);\n const areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ);\n if (areaI <= 0 || areaJ <= 0) {\n return 0.0;\n }\n const intersectionYmin = Math.max(yminI, yminJ);\n const intersectionXmin = Math.max(xminI, xminJ);\n const intersectionYmax = Math.min(ymaxI, ymaxJ);\n const intersectionXmax = Math.min(xmaxI, xmaxJ);\n const intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0)\n * Math.max(intersectionXmax - intersectionXmin, 0.0);\n return intersectionArea / (areaI + areaJ - intersectionArea);\n}\n\nexport function nonMaxSuppression(\n boxes: tf.Tensor2D,\n scores: number[],\n maxOutputSize: number,\n iouThreshold: number,\n scoreThreshold: number,\n): number[] {\n const numBoxes = boxes.shape[0];\n const outputSize = Math.min(\n maxOutputSize,\n numBoxes,\n );\n\n const candidates = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .filter((c) => c.score > scoreThreshold)\n .sort((c1, c2) => c2.score - c1.score);\n\n const suppressFunc = (x: number) => (x <= iouThreshold ? 1 : 0);\n\n const selected: number[] = [];\n\n candidates.forEach((c) => {\n if (selected.length >= outputSize) {\n return;\n }\n const originalScore = c.score;\n\n for (let j = selected.length - 1; j >= 0; --j) {\n const iou = IOU(boxes, c.boxIndex, selected[j]);\n if (iou === 0.0) continue;\n c.score *= suppressFunc(iou);\n if (c.score <= scoreThreshold) break;\n }\n if (originalScore === c.score) {\n selected.push(c.boxIndex);\n }\n });\n\n return selected;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { OutputLayerParams } from './types';\n\nfunction getCenterCoordinatesAndSizesLayer(x: tf.Tensor2D) {\n const vec = tf.unstack(tf.transpose(x, [1, 0]));\n\n const sizes = [\n tf.sub(vec[2], vec[0]),\n tf.sub(vec[3], vec[1]),\n ];\n\n const centers = [\n tf.add(vec[0], tf.div(sizes[0], tf.scalar(2))),\n tf.add(vec[1], tf.div(sizes[1], tf.scalar(2))),\n ];\n\n return {\n sizes,\n centers,\n };\n}\n\nfunction decodeBoxesLayer(x0: tf.Tensor2D, x1: tf.Tensor2D) {\n const {\n sizes,\n centers,\n } = getCenterCoordinatesAndSizesLayer(x0);\n\n const vec = tf.unstack(tf.transpose(x1, [1, 0]));\n\n const div0_out = tf.div(tf.mul(tf.exp(tf.div(vec[2], tf.scalar(5))), sizes[0]), tf.scalar(2));\n const add0_out = tf.add(tf.mul(tf.div(vec[0], tf.scalar(10)), sizes[0]), centers[0]);\n\n const div1_out = tf.div(tf.mul(tf.exp(tf.div(vec[3], tf.scalar(5))), sizes[1]), tf.scalar(2));\n const add1_out = tf.add(tf.mul(tf.div(vec[1], tf.scalar(10)), sizes[1]), centers[1]);\n\n return tf.transpose(\n tf.stack([\n tf.sub(add0_out, div0_out),\n tf.sub(add1_out, div1_out),\n tf.add(add0_out, div0_out),\n tf.add(add1_out, div1_out),\n ]),\n [1, 0],\n );\n}\n\nexport function outputLayer(\n boxPredictions: tf.Tensor4D,\n classPredictions: tf.Tensor4D,\n params: OutputLayerParams,\n) {\n return tf.tidy(() => {\n const batchSize = boxPredictions.shape[0];\n\n let boxes = decodeBoxesLayer(\n tf.reshape(tf.tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]) as tf.Tensor2D,\n tf.reshape(boxPredictions, [-1, 4]) as tf.Tensor2D,\n );\n boxes = tf.reshape(\n boxes,\n [batchSize, (boxes.shape[0] / batchSize), 4],\n );\n\n const scoresAndClasses = tf.sigmoid(tf.slice(classPredictions, [0, 0, 1], [-1, -1, -1]));\n let scores = tf.slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]) as tf.Tensor;\n\n scores = tf.reshape(\n scores,\n [batchSize, scores.shape[1] as number],\n );\n\n const boxesByBatch = tf.unstack(boxes) as tf.Tensor2D[];\n const scoresByBatch = tf.unstack(scores) as tf.Tensor1D[];\n\n return {\n boxes: boxesByBatch,\n scores: scoresByBatch,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { boxPredictionLayer } from './boxPredictionLayer';\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { PredictionLayerParams } from './types';\n\nexport function predictionLayer(\n x: tf.Tensor4D,\n conv11: tf.Tensor4D,\n params: PredictionLayerParams,\n) {\n return tf.tidy(() => {\n const conv0 = pointwiseConvLayer(x, params.conv_0, [1, 1]);\n const conv1 = pointwiseConvLayer(conv0, params.conv_1, [2, 2]);\n const conv2 = pointwiseConvLayer(conv1, params.conv_2, [1, 1]);\n const conv3 = pointwiseConvLayer(conv2, params.conv_3, [2, 2]);\n const conv4 = pointwiseConvLayer(conv3, params.conv_4, [1, 1]);\n const conv5 = pointwiseConvLayer(conv4, params.conv_5, [2, 2]);\n const conv6 = pointwiseConvLayer(conv5, params.conv_6, [1, 1]);\n const conv7 = pointwiseConvLayer(conv6, params.conv_7, [2, 2]);\n\n const boxPrediction0 = boxPredictionLayer(conv11, params.box_predictor_0);\n const boxPrediction1 = boxPredictionLayer(x, params.box_predictor_1);\n const boxPrediction2 = boxPredictionLayer(conv1, params.box_predictor_2);\n const boxPrediction3 = boxPredictionLayer(conv3, params.box_predictor_3);\n const boxPrediction4 = boxPredictionLayer(conv5, params.box_predictor_4);\n const boxPrediction5 = boxPredictionLayer(conv7, params.box_predictor_5);\n\n const boxPredictions = tf.concat([\n boxPrediction0.boxPredictionEncoding,\n boxPrediction1.boxPredictionEncoding,\n boxPrediction2.boxPredictionEncoding,\n boxPrediction3.boxPredictionEncoding,\n boxPrediction4.boxPredictionEncoding,\n boxPrediction5.boxPredictionEncoding,\n ], 1) as tf.Tensor4D;\n\n const classPredictions = tf.concat([\n boxPrediction0.classPrediction,\n boxPrediction1.classPrediction,\n boxPrediction2.classPrediction,\n boxPrediction3.classPrediction,\n boxPrediction4.classPrediction,\n boxPrediction5.classPrediction,\n ], 1) as tf.Tensor4D;\n\n return {\n boxPredictions,\n classPredictions,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { convLayer } from '../common/index';\nimport { BoxPredictionParams } from './types';\n\nexport function boxPredictionLayer(\n x: tf.Tensor4D,\n params: BoxPredictionParams,\n) {\n return tf.tidy(() => {\n const batchSize = x.shape[0];\n\n const boxPredictionEncoding = tf.reshape(\n convLayer(x, params.box_encoding_predictor),\n [batchSize, -1, 1, 4],\n );\n const classPrediction = tf.reshape(\n convLayer(x, params.class_predictor),\n [batchSize, -1, 3],\n );\n\n return {\n boxPredictionEncoding,\n classPrediction,\n };\n });\n}\n", "export interface ISsdMobilenetv1Options {\n minConfidence?: number\n maxResults?: number\n}\n\nexport class SsdMobilenetv1Options {\n protected _name: string = 'SsdMobilenetv1Options'\n\n private _minConfidence: number\n\n private _maxResults: number\n\n constructor({ minConfidence, maxResults }: ISsdMobilenetv1Options = {}) {\n this._minConfidence = minConfidence || 0.5;\n this._maxResults = maxResults || 100;\n\n if (typeof this._minConfidence !== 'number' || this._minConfidence <= 0 || this._minConfidence >= 1) {\n throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);\n }\n\n if (typeof this._maxResults !== 'number') {\n throw new Error(`${this._name} - expected maxResults to be a number`);\n }\n }\n\n get minConfidence(): number { return this._minConfidence; }\n\n get maxResults(): number { return this._maxResults; }\n}\n", "import { SsdMobilenetv1 } from './SsdMobilenetv1';\n\nexport * from './SsdMobilenetv1';\nexport * from './SsdMobilenetv1Options';\n\nexport function createSsdMobilenetv1(weights: Float32Array) {\n const net = new SsdMobilenetv1();\n net.extractWeights(weights);\n return net;\n}\n\nexport function createFaceDetectionNet(weights: Float32Array) {\n return createSsdMobilenetv1(weights);\n}\n\n// alias for backward compatibily\nexport class FaceDetectionNet extends SsdMobilenetv1 {}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(0.738768, 0.874946),\n new Point(2.42204, 2.65704),\n new Point(4.30971, 7.04493),\n new Point(10.246, 4.59428),\n new Point(12.6868, 11.8741),\n];\n\nexport const BOX_ANCHORS_SEPARABLE = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB_SEPARABLE: [number, number, number] = [117.001, 114.697, 97.404];\n\nexport const DEFAULT_MODEL_NAME = 'tiny_yolov2_model';\nexport const DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model';\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { BoundingBox } from '../classes/BoundingBox';\nimport { Dimensions } from '../classes/Dimensions';\nimport { ObjectDetection } from '../classes/ObjectDetection';\nimport { convLayer } from '../common/index';\nimport { ConvParams, SeparableConvParams } from '../common/types';\nimport { toNetInput } from '../dom/index';\nimport { NetInput } from '../dom/NetInput';\nimport { TNetInput } from '../dom/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { sigmoid } from '../ops/index';\nimport { nonMaxSuppression } from '../ops/nonMaxSuppression';\nimport { normalize } from '../ops/normalize';\nimport { TinyYolov2Config, validateConfig } from './config';\nimport { convWithBatchNorm } from './convWithBatchNorm';\nimport { depthwiseSeparableConv } from './depthwiseSeparableConv';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { leaky } from './leaky';\nimport { ITinyYolov2Options, TinyYolov2Options } from './TinyYolov2Options';\nimport { DefaultTinyYolov2NetParams, MobilenetParams, TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2Base extends NeuralNetwork {\n public static DEFAULT_FILTER_SIZES = [\n 3, 16, 32, 64, 128, 256, 512, 1024, 1024,\n ]\n\n private _config: TinyYolov2Config\n\n constructor(config: TinyYolov2Config) {\n super('TinyYolov2');\n validateConfig(config);\n this._config = config;\n }\n\n public get config(): TinyYolov2Config {\n return this._config;\n }\n\n public get withClassScores(): boolean {\n return this.config.withClassScores || this.config.classes.length > 1;\n }\n\n public get boxEncodingSize(): number {\n return 5 + (this.withClassScores ? this.config.classes.length : 0);\n }\n\n public runTinyYolov2(x: tf.Tensor4D, params: DefaultTinyYolov2NetParams): tf.Tensor4D {\n let out = convWithBatchNorm(x, params.conv0);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = convWithBatchNorm(out, params.conv6);\n out = convWithBatchNorm(out, params.conv7);\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public runMobilenet(x: tf.Tensor4D, params: MobilenetParams): tf.Tensor4D {\n let out = this.config.isFirstLayerConv2d\n ? leaky(convLayer(x, params.conv0 as ConvParams, 'valid', false))\n : depthwiseSeparableConv(x, params.conv0 as SeparableConvParams);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = params.conv6 ? depthwiseSeparableConv(out, params.conv6) : out;\n out = params.conv7 ? depthwiseSeparableConv(out, params.conv7) : out;\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public forwardInput(input: NetInput, inputSize: number): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyYolov2 - load model before inference');\n }\n\n return tf.tidy(() => {\n // let batchTensor = input.toBatchTensor(inputSize, false).toFloat()\n let batchTensor = tf.cast(input.toBatchTensor(inputSize, false), 'float32');\n batchTensor = this.config.meanRgb\n ? normalize(batchTensor, this.config.meanRgb)\n : batchTensor;\n batchTensor = batchTensor.div(tf.scalar(256)) as tf.Tensor4D;\n\n return this.config.withSeparableConvs\n ? this.runMobilenet(batchTensor, params as MobilenetParams)\n : this.runTinyYolov2(batchTensor, params as DefaultTinyYolov2NetParams);\n });\n }\n\n public async forward(input: TNetInput, inputSize: number): Promise {\n return this.forwardInput(await toNetInput(input), inputSize);\n }\n\n public async detect(input: TNetInput, forwardParams: ITinyYolov2Options = {}): Promise {\n const { inputSize, scoreThreshold } = new TinyYolov2Options(forwardParams);\n\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput, inputSize);\n const out0 = tf.tidy(() => tf.unstack(out)[0].expandDims()) as tf.Tensor4D;\n\n const inputDimensions = {\n width: netInput.getInputWidth(0),\n height: netInput.getInputHeight(0),\n };\n\n const results = await this.extractBoxes(out0, netInput.getReshapedInputDimensions(0), scoreThreshold);\n out.dispose();\n out0.dispose();\n\n const boxes = results.map((res) => res.box);\n const scores = results.map((res) => res.score);\n const classScores = results.map((res) => res.classScore);\n const classNames = results.map((res) => this.config.classes[res.label]);\n\n const indices = nonMaxSuppression(\n boxes.map((box) => box.rescale(inputSize)),\n scores,\n this.config.iouThreshold,\n true,\n );\n\n const detections = indices.map((idx) => new ObjectDetection(\n scores[idx],\n classScores[idx],\n classNames[idx],\n boxes[idx],\n inputDimensions,\n ));\n\n return detections;\n }\n\n protected getDefaultModelName(): string {\n return '';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this.config);\n }\n\n protected extractParams(weights: Float32Array) {\n const filterSizes = this.config.filterSizes || TinyYolov2Base.DEFAULT_FILTER_SIZES;\n\n const numFilters = filterSizes ? filterSizes.length : undefined;\n if (numFilters !== 7 && numFilters !== 8 && numFilters !== 9) {\n throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${numFilters} filterSizes in config`);\n }\n return extractParams(weights, this.config, this.boxEncodingSize, filterSizes);\n }\n\n protected async extractBoxes(\n outputTensor: tf.Tensor4D,\n inputBlobDimensions: Dimensions,\n scoreThreshold?: number,\n ) {\n const { width, height } = inputBlobDimensions;\n const inputSize = Math.max(width, height);\n const correctionFactorX = inputSize / width;\n const correctionFactorY = inputSize / height;\n\n const numCells = outputTensor.shape[1];\n const numBoxes = this.config.anchors.length;\n\n const [boxesTensor, scoresTensor, classScoresTensor] = tf.tidy(() => {\n const reshaped = outputTensor.reshape([numCells, numCells, numBoxes, this.boxEncodingSize]);\n\n const boxes = reshaped.slice([0, 0, 0, 0], [numCells, numCells, numBoxes, 4]);\n const scores = reshaped.slice([0, 0, 0, 4], [numCells, numCells, numBoxes, 1]);\n const classScores = this.withClassScores\n ? tf.softmax(reshaped.slice([0, 0, 0, 5], [numCells, numCells, numBoxes, this.config.classes.length]), 3)\n : tf.scalar(0);\n return [boxes, scores, classScores];\n });\n\n const results = [] as any;\n\n const scoresData = await scoresTensor.array();\n const boxesData = await boxesTensor.array();\n for (let row = 0; row < numCells; row++) {\n for (let col = 0; col < numCells; col++) {\n for (let anchor = 0; anchor < numBoxes; anchor++) {\n const score = sigmoid(scoresData[row][col][anchor][0]);\n if (!scoreThreshold || score > scoreThreshold) {\n const ctX = ((col + sigmoid(boxesData[row][col][anchor][0])) / numCells) * correctionFactorX;\n const ctY = ((row + sigmoid(boxesData[row][col][anchor][1])) / numCells) * correctionFactorY;\n const widthLocal = ((Math.exp(boxesData[row][col][anchor][2]) * this.config.anchors[anchor].x) / numCells) * correctionFactorX;\n const heightLocal = ((Math.exp(boxesData[row][col][anchor][3]) * this.config.anchors[anchor].y) / numCells) * correctionFactorY;\n\n const x = (ctX - (widthLocal / 2));\n const y = (ctY - (heightLocal / 2));\n\n const pos = { row, col, anchor };\n const { classScore, label } = this.withClassScores\n ? await this.extractPredictedClass(classScoresTensor as tf.Tensor4D, pos)\n : { classScore: 1, label: 0 };\n\n results.push({\n box: new BoundingBox(x, y, x + widthLocal, y + heightLocal),\n score,\n classScore: score * classScore,\n label,\n ...pos,\n });\n }\n }\n }\n }\n\n boxesTensor.dispose();\n scoresTensor.dispose();\n classScoresTensor.dispose();\n\n return results;\n }\n\n private async extractPredictedClass(classesTensor: tf.Tensor4D, pos: { row: number, col: number, anchor: number }) {\n const { row, col, anchor } = pos;\n const classesData = await classesTensor.array();\n return Array(this.config.classes.length).fill(0)\n .map((_, i) => classesData[row][col][anchor][i])\n .map((classScore, label) => ({\n classScore,\n label,\n }))\n .reduce((max, curr) => (max.classScore > curr.classScore ? max : curr));\n }\n}\n", "import { Point } from '../classes/Point';\n\nexport type TinyYolov2Config = {\n withSeparableConvs: boolean\n iouThreshold: number\n anchors: Point[]\n classes: string[]\n meanRgb?: [number, number, number]\n withClassScores?: boolean,\n filterSizes?: number[]\n isFirstLayerConv2d?: boolean\n}\n\nconst isNumber = (arg: any) => typeof arg === 'number';\n\nexport function validateConfig(config: any) {\n if (!config) {\n throw new Error(`invalid config: ${config}`);\n }\n\n if (typeof config.withSeparableConvs !== 'boolean') {\n throw new Error(`config.withSeparableConvs has to be a boolean, have: ${config.withSeparableConvs}`);\n }\n\n if (!isNumber(config.iouThreshold) || config.iouThreshold < 0 || config.iouThreshold > 1.0) {\n throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${config.iouThreshold}`);\n }\n\n if (\n !Array.isArray(config.classes)\n || !config.classes.length\n || !config.classes.every((c: any) => typeof c === 'string')\n ) {\n throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(config.classes)}`);\n }\n\n if (\n !Array.isArray(config.anchors)\n || !config.anchors.length\n || !config.anchors.map((a: any) => a || {}).every((a: any) => isNumber(a.x) && isNumber(a.y))\n ) {\n throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(config.anchors)}`);\n }\n\n if (config.meanRgb && (\n !Array.isArray(config.meanRgb)\n || config.meanRgb.length !== 3\n || !config.meanRgb.every(isNumber)\n )) {\n throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(config.meanRgb)}`);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { leaky } from './leaky';\nimport { ConvWithBatchNorm } from './types';\n\nexport function convWithBatchNorm(x: tf.Tensor4D, params: ConvWithBatchNorm): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.conv2d(out, params.conv.filters, [1, 1], 'valid');\n out = tf.sub(out, params.bn.sub);\n out = tf.mul(out, params.bn.truediv);\n out = tf.add(out, params.conv.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nexport function leaky(x: tf.Tensor4D): tf.Tensor4D {\n return tf.tidy(() => {\n const min = tf.mul(x, tf.scalar(0.10000000149011612));\n return tf.add(tf.relu(tf.sub(x, min)), min);\n // return tf.maximum(x, min)\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { SeparableConvParams } from '../common/types';\nimport { leaky } from './leaky';\n\nexport function depthwiseSeparableConv(x: tf.Tensor4D, params: SeparableConvParams): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.separableConv2d(out, params.depthwise_filter, params.pointwise_filter, [1, 1], 'valid');\n out = tf.add(out, params.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { extractConvParamsFactory } from '../common/index';\nimport { extractSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightsFactory } from '../common/extractWeightsFactory';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n\n function extractBatchNormParams(size: number, mappedPrefix: string): BatchNorm {\n const sub = tf.tensor1d(extractWeights(size));\n const truediv = tf.tensor1d(extractWeights(size));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/sub` },\n { paramPath: `${mappedPrefix}/truediv` },\n );\n\n return { sub, truediv };\n }\n\n function extractConvWithBatchNormParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv`);\n const bn = extractBatchNormParams(channelsOut, `${mappedPrefix}/bn`);\n\n return { conv, bn };\n }\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParams(\n weights: Float32Array,\n config: TinyYolov2Config,\n boxEncodingSize: number,\n filterSizes: number[],\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n\n const conv0 = config.isFirstLayerConv2d\n ? extractConvParams(s0, s1, 3, 'conv0')\n : extractSeparableConvParams(s0, s1, 'conv0');\n const conv1 = extractSeparableConvParams(s1, s2, 'conv1');\n const conv2 = extractSeparableConvParams(s2, s3, 'conv2');\n const conv3 = extractSeparableConvParams(s3, s4, 'conv3');\n const conv4 = extractSeparableConvParams(s4, s5, 'conv4');\n const conv5 = extractSeparableConvParams(s5, s6, 'conv5');\n const conv6 = s7 ? extractSeparableConvParams(s6, s7, 'conv6') : undefined;\n const conv7 = s8 ? extractSeparableConvParams(s7, s8, 'conv7') : undefined;\n const conv8 = extractConvParams(s8 || s7 || s6, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n } else {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n const conv0 = extractConvWithBatchNormParams(s0, s1, 'conv0');\n const conv1 = extractConvWithBatchNormParams(s1, s2, 'conv1');\n const conv2 = extractConvWithBatchNormParams(s2, s3, 'conv2');\n const conv3 = extractConvWithBatchNormParams(s3, s4, 'conv3');\n const conv4 = extractConvWithBatchNormParams(s4, s5, 'conv4');\n const conv5 = extractConvWithBatchNormParams(s5, s6, 'conv5');\n const conv6 = extractConvWithBatchNormParams(s6, s7, 'conv6');\n const conv7 = extractConvWithBatchNormParams(s7, s8, 'conv7');\n const conv8 = extractConvParams(s8, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n }\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams } from '../common/index';\nimport { disposeUnusedWeightTensors } from '../common/disposeUnusedWeightTensors';\nimport { loadSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightEntryFactory } from '../common/extractWeightEntryFactory';\nimport { ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractBatchNormParams(prefix: string): BatchNorm {\n const sub = extractWeightEntry(`${prefix}/sub`, 1);\n const truediv = extractWeightEntry(`${prefix}/truediv`, 1);\n return { sub, truediv };\n }\n\n function extractConvParams(prefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { filters, bias };\n }\n\n function extractConvWithBatchNormParams(prefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(`${prefix}/conv`);\n const bn = extractBatchNormParams(`${prefix}/bn`);\n return { conv, bn };\n }\n\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n config: TinyYolov2Config,\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n // eslint-disable-next-line no-mixed-operators\n const numFilters = (config.filterSizes && config.filterSizes.length || 9);\n params = {\n conv0: config.isFirstLayerConv2d ? extractConvParams('conv0') : extractSeparableConvParams('conv0'),\n conv1: extractSeparableConvParams('conv1'),\n conv2: extractSeparableConvParams('conv2'),\n conv3: extractSeparableConvParams('conv3'),\n conv4: extractSeparableConvParams('conv4'),\n conv5: extractSeparableConvParams('conv5'),\n conv6: numFilters > 7 ? extractSeparableConvParams('conv6') : undefined,\n conv7: numFilters > 8 ? extractSeparableConvParams('conv7') : undefined,\n conv8: extractConvParams('conv8'),\n };\n } else {\n params = {\n conv0: extractConvWithBatchNormParams('conv0'),\n conv1: extractConvWithBatchNormParams('conv1'),\n conv2: extractConvWithBatchNormParams('conv2'),\n conv3: extractConvWithBatchNormParams('conv3'),\n conv4: extractConvWithBatchNormParams('conv4'),\n conv5: extractConvWithBatchNormParams('conv5'),\n conv6: extractConvWithBatchNormParams('conv6'),\n conv7: extractConvWithBatchNormParams('conv7'),\n conv8: extractConvParams('conv8'),\n };\n }\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "export interface ITinyYolov2Options {\n inputSize?: number\n scoreThreshold?: number\n}\n\nexport class TinyYolov2Options {\n protected _name: string = 'TinyYolov2Options'\n\n private _inputSize: number\n\n private _scoreThreshold: number\n\n constructor({ inputSize, scoreThreshold }: ITinyYolov2Options = {}) {\n this._inputSize = inputSize || 416;\n this._scoreThreshold = scoreThreshold || 0.5;\n\n if (typeof this._inputSize !== 'number' || this._inputSize % 32 !== 0) {\n throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);\n }\n\n if (typeof this._scoreThreshold !== 'number' || this._scoreThreshold <= 0 || this._scoreThreshold >= 1) {\n throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`);\n }\n }\n\n get inputSize(): number { return this._inputSize; }\n\n get scoreThreshold(): number { return this._scoreThreshold; }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/types';\nimport { TNetInput } from '../dom/types';\nimport {\n BOX_ANCHORS,\n BOX_ANCHORS_SEPARABLE,\n DEFAULT_MODEL_NAME,\n DEFAULT_MODEL_NAME_SEPARABLE_CONV,\n IOU_THRESHOLD,\n MEAN_RGB_SEPARABLE,\n} from './const';\nimport { TinyYolov2Base } from './TinyYolov2Base';\nimport { ITinyYolov2Options } from './TinyYolov2Options';\nimport { TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2 extends TinyYolov2Base {\n constructor(withSeparableConvs: boolean = true) {\n const config = {\n withSeparableConvs,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n ...(withSeparableConvs\n ? {\n anchors: BOX_ANCHORS_SEPARABLE,\n meanRgb: MEAN_RGB_SEPARABLE,\n }\n : {\n anchors: BOX_ANCHORS,\n withClassScores: true,\n }),\n };\n\n super(config);\n }\n\n public get withSeparableConvs(): boolean {\n return this.config.withSeparableConvs;\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME;\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { TinyYolov2 } from './TinyYolov2';\n\nexport * from './TinyYolov2Options';\n\nexport * from './config';\nexport * from './types';\n\nexport { TinyYolov2 };\n\nexport function createTinyYolov2(weights: Float32Array, withSeparableConvs: boolean = true) {\n const net = new TinyYolov2(withSeparableConvs);\n net.extractWeights(weights);\n return net;\n}\n", "import { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\n\nexport interface ITinyFaceDetectorOptions extends ITinyYolov2Options {}\n\nexport class TinyFaceDetectorOptions extends TinyYolov2Options {\n protected _name: string = 'TinyFaceDetectorOptions'\n}\n", "export class ComposableTask {\n public async then(\n // eslint-disable-next-line no-unused-vars\n onfulfilled: (value: T) => T | PromiseLike,\n ): Promise {\n return onfulfilled(await this.run());\n }\n\n public async run(): Promise {\n throw new Error('ComposableTask - run is not implemented');\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm';\n\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class DetectFaceLandmarksTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected useTinyLandmarkNet: boolean,\n ) {\n super();\n }\n\n protected get landmarkNet(): FaceLandmark68Net | FaceLandmark68TinyNet {\n return this.useTinyLandmarkNet\n ? nets.faceLandmark68TinyNet\n : nets.faceLandmark68Net;\n }\n}\n\nexport class DetectAllFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n const detections = parentResults.map((res) => res.detection);\n\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, detections)\n : await extractFaces(this.input, detections);\n\n const faceLandmarksByFace = await Promise.all(faces.map(\n (face) => this.landmarkNet.detectLandmarks(face),\n )) as FaceLandmarks68[];\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return parentResults.map((parentResult, i) => extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i]));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class DetectSingleFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { detection } = parentResult;\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, [detection])\n : await extractFaces(this.input, [detection]);\n\n const landmarks = await this.landmarkNet.detectLandmarks(faces[0]) as FaceLandmarks68;\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return extendWithFaceLandmarks(parentResult, landmarks);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\n\nexport async function extractAllFacesAndComputeResults, TResult>(\n parentResults: TSource[],\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResults: (faces: Array) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment: (parentResult: WithFaceLandmarks) => FaceDetection = ({ alignedRect }) => alignedRect,\n) {\n const faceBoxes = parentResults.map((parentResult) => (isWithFaceLandmarks(parentResult)\n ? getRectForAlignment(parentResult)\n : parentResult.detection));\n const faces: Array = extractedFaces || (\n input instanceof tf.Tensor\n ? await extractFaceTensors(input, faceBoxes)\n : await extractFaces(input, faceBoxes)\n );\n\n const results = await computeResults(faces);\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return results;\n}\n\nexport async function extractSingleFaceAndComputeResult, TResult>(\n parentResult: TSource,\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResult: (face: HTMLCanvasElement | tf.Tensor3D) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment?: (parentResultLocal: WithFaceLandmarks) => FaceDetection,\n) {\n return extractAllFacesAndComputeResults(\n [parentResult],\n input,\n async (faces) => computeResult(faces[0]),\n extractedFaces,\n getRectForAlignment,\n );\n}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB: [number, number, number] = [117.001, 114.697, 97.404];\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/index';\nimport { TNetInput } from '../dom/index';\nimport { ITinyYolov2Options } from '../tinyYolov2/index';\nimport { TinyYolov2Base } from '../tinyYolov2/TinyYolov2Base';\nimport { TinyYolov2NetParams } from '../tinyYolov2/types';\nimport { BOX_ANCHORS, IOU_THRESHOLD, MEAN_RGB } from './const';\n\nexport class TinyFaceDetector extends TinyYolov2Base {\n constructor() {\n const config = {\n withSeparableConvs: true,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n anchors: BOX_ANCHORS,\n meanRgb: MEAN_RGB,\n isFirstLayerConv2d: true,\n filterSizes: [3, 16, 32, 64, 128, 256, 512],\n };\n\n super(config);\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_face_detector_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { AgeGenderNet } from '../ageGenderNet/AgeGenderNet';\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet';\nimport { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { ITinyYolov2Options, TinyYolov2 } from '../tinyYolov2/index';\n\nexport const nets = {\n ssdMobilenetv1: new SsdMobilenetv1(),\n tinyFaceDetector: new TinyFaceDetector(),\n tinyYolov2: new TinyYolov2(),\n faceLandmark68Net: new FaceLandmark68Net(),\n faceLandmark68TinyNet: new FaceLandmark68TinyNet(),\n faceRecognitionNet: new FaceRecognitionNet(),\n faceExpressionNet: new FaceExpressionNet(),\n ageGenderNet: new AgeGenderNet(),\n};\n\n/**\n * Attempts to detect all faces in an image using SSD Mobilenetv1 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const ssdMobilenetv1 = (input: TNetInput, options: SsdMobilenetv1Options): Promise => nets.ssdMobilenetv1.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Face Detector.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyFaceDetector = (input: TNetInput, options: TinyFaceDetectorOptions): Promise => nets.tinyFaceDetector.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Yolov2 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyYolov2Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyYolov2 = (input: TNetInput, options: ITinyYolov2Options): Promise => nets.tinyYolov2.locateFaces(input, options);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarks = (input: TNetInput): Promise => nets.faceLandmark68Net.detectLandmarks(input);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image\n * using a tinier version of the 68 point face landmark model, which is slightly\n * faster at inference, but also slightly less accurate.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarksTiny = (input: TNetInput): Promise => nets.faceLandmark68TinyNet.detectLandmarks(input);\n\n/**\n * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image,\n * which uniquely represents the features of that persons face. The computed face descriptor can\n * be used to measure the similarity between faces, by computing the euclidean distance of two\n * face descriptors.\n *\n * @param inputs The face image extracted from the aligned bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Face descriptor with 128 entries or array thereof in case of batch input.\n */\nexport const computeFaceDescriptor = (input: TNetInput): Promise => nets.faceRecognitionNet.computeFaceDescriptor(input);\n\n/**\n * Recognizes the facial expressions from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Facial expressions with corresponding probabilities or array thereof in case of batch input.\n */\nexport const recognizeFaceExpressions = (input: TNetInput): Promise => nets.faceExpressionNet.predictExpressions(input);\n\n/**\n * Predicts age and gender from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Predictions with age, gender and gender probability or array thereof in case of batch input.\n */\nexport const predictAgeAndGender = (input: TNetInput): Promise => nets.ageGenderNet.predictAgeAndGender(input);\n\nexport const loadSsdMobilenetv1Model = (url: string) => nets.ssdMobilenetv1.load(url);\nexport const loadTinyFaceDetectorModel = (url: string) => nets.tinyFaceDetector.load(url);\nexport const loadTinyYolov2Model = (url: string) => nets.tinyYolov2.load(url);\nexport const loadFaceLandmarkModel = (url: string) => nets.faceLandmark68Net.load(url);\nexport const loadFaceLandmarkTinyModel = (url: string) => nets.faceLandmark68TinyNet.load(url);\nexport const loadFaceRecognitionModel = (url: string) => nets.faceRecognitionNet.load(url);\nexport const loadFaceExpressionModel = (url: string) => nets.faceExpressionNet.load(url);\nexport const loadAgeGenderModel = (url: string) => nets.ageGenderNet.load(url);\n\n// backward compatibility\nexport const loadFaceDetectionModel = loadSsdMobilenetv1Model;\nexport const locateFaces = ssdMobilenetv1;\nexport const detectLandmarks = detectFaceLandmarks;\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm';\n\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderTask,\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\n\nexport class PredictFaceExpressionsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const faceExpressionsByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map(\n (parentResult, i) => extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]),\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const faceExpressions = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithFaceExpressions(parentResult, faceExpressions);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictAllFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm';\n\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { TNetInput } from '../dom/index';\nimport { extendWithAge, WithAge } from '../factories/WithAge';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { extendWithGender, WithGender } from '../factories/WithGender';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllFaceExpressionsTask,\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class PredictAgeAndGenderTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase>[], TSource[]> {\n public async run(): Promise>[]> {\n const parentResults = await this.parentTask;\n\n const ageAndGenderByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map((parentResult, i) => {\n const { age, gender, genderProbability } = ageAndGenderByFace[i];\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n });\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase> | undefined, TSource | undefined> {\n public async run(): Promise> | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { age, gender, genderProbability } = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictAllAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDescriptor, WithFaceDescriptor } from '../factories/WithFaceDescriptor';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class ComputeFaceDescriptorsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n ) {\n super();\n }\n}\n\nexport class ComputeAllFaceDescriptorsTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const descriptors = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n (faces) => Promise.all(faces.map((face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise)),\n null,\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return descriptors.map((descriptor, i) => extendWithFaceDescriptor(parentResults[i], descriptor));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n\nexport class ComputeSingleFaceDescriptorTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n const descriptor = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise,\n null,\n // eslint-disable-next-line no-shadow\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return extendWithFaceDescriptor(parentResult, descriptor);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { TinyYolov2Options } from '../tinyYolov2/index';\nimport { ComposableTask } from './ComposableTask';\nimport { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';\nimport { nets } from './nets';\nimport { PredictAllAgeAndGenderTask, PredictSingleAgeAndGenderTask } from './PredictAgeAndGenderTask';\nimport { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionsTask } from './PredictFaceExpressionsTask';\nimport { FaceDetectionOptions } from './types';\n\nexport class DetectFacesTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n ) {\n super();\n }\n}\n\nexport class DetectAllFacesTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const { input, options } = this;\n\n // eslint-disable-next-line no-nested-ternary\n const faceDetectionFunction = options instanceof TinyFaceDetectorOptions\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyFaceDetector.locateFaces(input, options)\n : (\n // eslint-disable-next-line no-nested-ternary\n options instanceof SsdMobilenetv1Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.ssdMobilenetv1.locateFaces(input, options)\n : (\n options instanceof TinyYolov2Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyYolov2.locateFaces(input, options)\n : null\n )\n );\n\n if (!faceDetectionFunction) {\n throw new Error('detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options');\n }\n\n return faceDetectionFunction(input);\n }\n\n private runAndExtendWithFaceDetections(): Promise[]> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise[]>(async (resolve) => {\n const detections = await this.run();\n resolve(detections.map((detection) => extendWithFaceDetection({}, detection)));\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectAllFaceLandmarksTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n}\n\nexport class DetectSingleFaceTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const faceDetections = await new DetectAllFacesTask(this.input, this.options);\n let faceDetectionWithHighestScore = faceDetections[0];\n faceDetections.forEach((faceDetection) => {\n if (faceDetection.score > faceDetectionWithHighestScore.score) {\n faceDetectionWithHighestScore = faceDetection;\n }\n });\n return faceDetectionWithHighestScore;\n }\n\n private runAndExtendWithFaceDetection(): Promise | undefined> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise | undefined>(async (resolve) => {\n const detection = await this.run();\n resolve(detection ? extendWithFaceDetection<{}>({}, detection) : undefined);\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectSingleFaceLandmarksTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n}\n", "import { TNetInput } from '../dom/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { DetectAllFacesTask, DetectSingleFaceTask } from './DetectFacesTasks';\nimport { FaceDetectionOptions } from './types';\n\nexport function detectSingleFace(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectSingleFaceTask {\n return new DetectSingleFaceTask(input, options);\n}\n\nexport function detectAllFaces(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectAllFacesTask {\n return new DetectAllFacesTask(input, options);\n}\n", "import { TNetInput } from '../dom/index';\nimport { WithFaceDescriptor, WithFaceDetection, WithFaceLandmarks } from '../factories/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/index';\nimport { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\nimport { detectAllFaces } from './detectFaces';\n\n// export allFaces API for backward compatibility\n\nexport async function allFacesSsdMobilenetv1(\n input: TNetInput,\n minConfidence?: number,\n): Promise>>[]> {\n return detectAllFaces(input, new SsdMobilenetv1Options(minConfidence ? { minConfidence } : {}))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport async function allFacesTinyYolov2(\n input: TNetInput,\n forwardParams: ITinyYolov2Options = {},\n): Promise>>[]> {\n return detectAllFaces(input, new TinyYolov2Options(forwardParams))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport const allFaces = allFacesSsdMobilenetv1;\n", "export function euclideanDistance(arr1: number[] | Float32Array, arr2: number[] | Float32Array) {\n if (arr1.length !== arr2.length)\n throw new Error('euclideanDistance: arr1.length !== arr2.length')\n\n const desc1 = Array.from(arr1)\n const desc2 = Array.from(arr2)\n\n return Math.sqrt(\n desc1\n .map((val, i) => val - desc2[i])\n .reduce((res, diff) => res + Math.pow(diff, 2), 0)\n )\n}", "import { FaceMatch } from '../classes/FaceMatch';\nimport { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors';\nimport { euclideanDistance } from '../euclideanDistance';\nimport { WithFaceDescriptor } from '../factories/index';\n\nexport class FaceMatcher {\n private _labeledDescriptors: LabeledFaceDescriptors[]\n\n private _distanceThreshold: number\n\n constructor(\n inputs: LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>,\n distanceThreshold: number = 0.6,\n ) {\n this._distanceThreshold = distanceThreshold;\n\n const inputArray = Array.isArray(inputs) ? inputs : [inputs];\n\n if (!inputArray.length) {\n throw new Error('FaceRecognizer.constructor - expected atleast one input');\n }\n\n let count = 1;\n const createUniqueLabel = () => `person ${count++}`;\n\n this._labeledDescriptors = inputArray.map((desc) => {\n if (desc instanceof LabeledFaceDescriptors) {\n return desc;\n }\n\n if (desc instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc]);\n }\n\n if (desc.descriptor && desc.descriptor instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]);\n }\n\n throw new Error('FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>');\n });\n }\n\n public get labeledDescriptors(): LabeledFaceDescriptors[] { return this._labeledDescriptors; }\n\n public get distanceThreshold(): number { return this._distanceThreshold; }\n\n public computeMeanDistance(queryDescriptor: Float32Array, descriptors: Float32Array[]): number {\n return descriptors\n .map((d) => euclideanDistance(d, queryDescriptor))\n .reduce((d1, d2) => d1 + d2, 0)\n / (descriptors.length || 1);\n }\n\n public matchDescriptor(queryDescriptor: Float32Array): FaceMatch {\n return this.labeledDescriptors\n .map(({ descriptors, label }) => new FaceMatch(\n label,\n this.computeMeanDistance(queryDescriptor, descriptors),\n ))\n .reduce((best, curr) => (best.distance < curr.distance ? best : curr));\n }\n\n public findBestMatch(queryDescriptor: Float32Array): FaceMatch {\n const bestMatch = this.matchDescriptor(queryDescriptor);\n return bestMatch.distance < this.distanceThreshold\n ? bestMatch\n : new FaceMatch('unknown', bestMatch.distance);\n }\n\n public toJSON(): any {\n return {\n distanceThreshold: this.distanceThreshold,\n labeledDescriptors: this.labeledDescriptors.map((ld) => ld.toJSON()),\n };\n }\n\n public static fromJSON(json: any): FaceMatcher {\n const labeledDescriptors = json.labeledDescriptors\n .map((ld: any) => LabeledFaceDescriptors.fromJSON(ld));\n return new FaceMatcher(labeledDescriptors, json.distanceThreshold);\n }\n}\n", "import { TinyFaceDetector } from './TinyFaceDetector';\n\nexport * from './TinyFaceDetector';\nexport * from './TinyFaceDetectorOptions';\n\nexport function createTinyFaceDetector(weights: Float32Array) {\n const net = new TinyFaceDetector();\n net.extractWeights(weights);\n return net;\n}\n", "import { Dimensions, IDimensions } from './classes/index';\nimport { FaceDetection } from './classes/FaceDetection';\nimport { FaceLandmarks } from './classes/FaceLandmarks';\nimport { extendWithFaceDetection, isWithFaceDetection } from './factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, isWithFaceLandmarks } from './factories/WithFaceLandmarks';\n\nexport function resizeResults(results: T, dimensions: IDimensions): T {\n\n const { width, height } = new Dimensions(dimensions.width, dimensions.height)\n\n if (width <= 0 || height <= 0) {\n throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({ width, height })}`)\n }\n\n if (Array.isArray(results)) {\n // return results.map(obj => resizeResults(obj, { width, height })) as any as T\n return (results as Array).map(obj => resizeResults(obj, { width, height } as IDimensions)) as any as T\n }\n\n if (isWithFaceLandmarks(results)) {\n const resizedDetection = results.detection.forSize(width, height)\n const resizedLandmarks = results.unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height)\n return extendWithFaceLandmarks(extendWithFaceDetection(results, resizedDetection), resizedLandmarks)\n }\n\n if (isWithFaceDetection(results)) {\n return extendWithFaceDetection(results, results.detection.forSize(width, height))\n }\n\n if (results instanceof FaceLandmarks || results instanceof FaceDetection) {\n return (results as any).forSize(width, height)\n }\n\n return results\n}"], "mappings": "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", "names": [] } diff --git a/dist/face-api.node-gpu.json b/dist/face-api.node-gpu.json index c61aa4f..46cb225 100644 --- a/dist/face-api.node-gpu.json +++ b/dist/face-api.node-gpu.json @@ -17,7 +17,7 @@ ] }, "src/utils/index.ts": { - "bytes": 1845, + "bytes": 1842, "imports": [ { "path": "dist/tfjs.esm.js" @@ -93,7 +93,7 @@ ] }, "src/ops/normalize.ts": { - "bytes": 486, + "bytes": 483, "imports": [ { "path": "dist/tfjs.esm.js" @@ -101,7 +101,7 @@ ] }, "src/ops/padToSquare.ts": { - "bytes": 1687, + "bytes": 1684, "imports": [ { "path": "dist/tfjs.esm.js" @@ -451,7 +451,7 @@ ] }, "src/dom/imageTensorToCanvas.ts": { - "bytes": 618, + "bytes": 615, "imports": [ { "path": "dist/tfjs.esm.js" @@ -490,7 +490,7 @@ ] }, "src/dom/NetInput.ts": { - "bytes": 5511, + "bytes": 5508, "imports": [ { "path": "dist/tfjs.esm.js" @@ -556,7 +556,7 @@ ] }, "src/dom/extractFaceTensors.ts": { - "bytes": 1733, + "bytes": 1730, "imports": [ { "path": "dist/tfjs.esm.js" @@ -609,7 +609,7 @@ "imports": [] }, "src/dom/loadWeightMap.ts": { - "bytes": 555, + "bytes": 552, "imports": [ { "path": "dist/tfjs.esm.js" @@ -631,7 +631,7 @@ ] }, "src/dom/types.ts": { - "bytes": 386, + "bytes": 383, "imports": [] }, "src/dom/index.ts": { @@ -703,7 +703,7 @@ ] }, "src/NeuralNetwork.ts": { - "bytes": 5113, + "bytes": 5110, "imports": [ { "path": "dist/tfjs.esm.js" @@ -720,7 +720,7 @@ ] }, "src/common/depthwiseSeparableConv.ts": { - "bytes": 417, + "bytes": 414, "imports": [ { "path": "dist/tfjs.esm.js" @@ -728,7 +728,7 @@ ] }, "src/faceFeatureExtractor/denseBlock.ts": { - "bytes": 2041, + "bytes": 2038, "imports": [ { "path": "dist/tfjs.esm.js" @@ -739,7 +739,7 @@ ] }, "src/common/convLayer.ts": { - "bytes": 431, + "bytes": 428, "imports": [ { "path": "dist/tfjs.esm.js" @@ -751,7 +751,7 @@ "imports": [] }, "src/common/extractConvParamsFactory.ts": { - "bytes": 769, + "bytes": 766, "imports": [ { "path": "dist/tfjs.esm.js" @@ -759,7 +759,7 @@ ] }, "src/common/extractFCParamsFactory.ts": { - "bytes": 714, + "bytes": 711, "imports": [ { "path": "dist/tfjs.esm.js" @@ -767,11 +767,11 @@ ] }, "src/common/types.ts": { - "bytes": 800, + "bytes": 797, "imports": [] }, "src/common/extractSeparableConvParamsFactory.ts": { - "bytes": 1536, + "bytes": 1533, "imports": [ { "path": "dist/tfjs.esm.js" @@ -848,7 +848,7 @@ ] }, "src/common/loadConvParamsFactory.ts": { - "bytes": 469, + "bytes": 466, "imports": [] }, "src/faceFeatureExtractor/loadParamsFactory.ts": { @@ -863,7 +863,7 @@ ] }, "src/faceFeatureExtractor/extractParamsFromWeigthMap.ts": { - "bytes": 841, + "bytes": 838, "imports": [ { "path": "src/common/index.ts" @@ -874,7 +874,7 @@ ] }, "src/faceFeatureExtractor/FaceFeatureExtractor.ts": { - "bytes": 1809, + "bytes": 1806, "imports": [ { "path": "dist/tfjs.esm.js" @@ -900,7 +900,7 @@ ] }, "src/common/fullyConnectedLayer.ts": { - "bytes": 266, + "bytes": 263, "imports": [ { "path": "dist/tfjs.esm.js" @@ -916,7 +916,7 @@ ] }, "src/faceProcessor/extractParamsFromWeigthMap.ts": { - "bytes": 826, + "bytes": 823, "imports": [ { "path": "src/common/index.ts" @@ -924,11 +924,11 @@ ] }, "src/faceProcessor/util.ts": { - "bytes": 424, + "bytes": 421, "imports": [] }, "src/faceProcessor/FaceProcessor.ts": { - "bytes": 3037, + "bytes": 3034, "imports": [ { "path": "dist/tfjs.esm.js" @@ -958,7 +958,7 @@ "imports": [] }, "src/faceExpressionNet/FaceExpressionNet.ts": { - "bytes": 1667, + "bytes": 1664, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1092,7 +1092,7 @@ ] }, "src/xception/extractParamsFromWeigthMap.ts": { - "bytes": 3133, + "bytes": 3130, "imports": [ { "path": "src/common/index.ts" @@ -1106,7 +1106,7 @@ ] }, "src/xception/TinyXception.ts": { - "bytes": 3151, + "bytes": 3148, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1143,7 +1143,7 @@ ] }, "src/ageGenderNet/extractParamsFromWeigthMap.ts": { - "bytes": 894, + "bytes": 891, "imports": [ { "path": "src/common/index.ts" @@ -1151,11 +1151,11 @@ ] }, "src/ageGenderNet/types.ts": { - "bytes": 528, + "bytes": 525, "imports": [] }, "src/ageGenderNet/AgeGenderNet.ts": { - "bytes": 4272, + "bytes": 4269, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1198,7 +1198,7 @@ ] }, "src/faceLandmarkNet/FaceLandmark68NetBase.ts": { - "bytes": 3720, + "bytes": 3717, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1232,7 +1232,7 @@ ] }, "src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts": { - "bytes": 805, + "bytes": 802, "imports": [ { "path": "src/common/index.ts" @@ -1254,7 +1254,7 @@ ] }, "src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts": { - "bytes": 1819, + "bytes": 1816, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1305,7 +1305,7 @@ ] }, "src/faceRecognitionNet/scaleLayer.ts": { - "bytes": 232, + "bytes": 229, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1313,7 +1313,7 @@ ] }, "src/faceRecognitionNet/convLayer.ts": { - "bytes": 853, + "bytes": 850, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1324,7 +1324,7 @@ ] }, "src/faceRecognitionNet/extractParams.ts": { - "bytes": 4910, + "bytes": 4907, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1338,7 +1338,7 @@ ] }, "src/faceRecognitionNet/extractParamsFromWeigthMap.ts": { - "bytes": 3104, + "bytes": 3101, "imports": [ { "path": "src/common/index.ts" @@ -1349,7 +1349,7 @@ ] }, "src/faceRecognitionNet/residualLayer.ts": { - "bytes": 1345, + "bytes": 1342, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1360,7 +1360,7 @@ ] }, "src/faceRecognitionNet/FaceRecognitionNet.ts": { - "bytes": 2984, + "bytes": 2981, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1442,7 +1442,7 @@ ] }, "src/ssdMobilenetv1/extractParams.ts": { - "bytes": 8342, + "bytes": 8339, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1453,7 +1453,7 @@ ] }, "src/ssdMobilenetv1/extractParamsFromWeigthMap.ts": { - "bytes": 5785, + "bytes": 5782, "imports": [ { "path": "src/common/index.ts" @@ -1464,7 +1464,7 @@ ] }, "src/ssdMobilenetv1/pointwiseConvLayer.ts": { - "bytes": 394, + "bytes": 391, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1472,7 +1472,7 @@ ] }, "src/ssdMobilenetv1/mobileNetV1.ts": { - "bytes": 1814, + "bytes": 1811, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1483,11 +1483,11 @@ ] }, "src/ssdMobilenetv1/nonMaxSuppression.ts": { - "bytes": 2190, + "bytes": 2187, "imports": [] }, "src/ssdMobilenetv1/outputLayer.ts": { - "bytes": 2190, + "bytes": 2187, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1495,7 +1495,7 @@ ] }, "src/ssdMobilenetv1/boxPredictionLayer.ts": { - "bytes": 620, + "bytes": 617, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1506,7 +1506,7 @@ ] }, "src/ssdMobilenetv1/predictionLayer.ts": { - "bytes": 2058, + "bytes": 2055, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1524,7 +1524,7 @@ "imports": [] }, "src/ssdMobilenetv1/SsdMobilenetv1.ts": { - "bytes": 3829, + "bytes": 3826, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1591,7 +1591,7 @@ "imports": [] }, "src/tinyYolov2/leaky.ts": { - "bytes": 274, + "bytes": 271, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1599,7 +1599,7 @@ ] }, "src/tinyYolov2/convWithBatchNorm.ts": { - "bytes": 535, + "bytes": 532, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1610,7 +1610,7 @@ ] }, "src/tinyYolov2/depthwiseSeparableConv.ts": { - "bytes": 505, + "bytes": 502, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1621,7 +1621,7 @@ ] }, "src/tinyYolov2/extractParams.ts": { - "bytes": 3921, + "bytes": 3918, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1638,7 +1638,7 @@ ] }, "src/tinyYolov2/extractParamsFromWeigthMap.ts": { - "bytes": 3287, + "bytes": 3284, "imports": [ { "path": "src/common/disposeUnusedWeightTensors.ts" @@ -1656,7 +1656,7 @@ "imports": [] }, "src/tinyYolov2/TinyYolov2Base.ts": { - "bytes": 9703, + "bytes": 9700, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1709,7 +1709,7 @@ ] }, "src/tinyYolov2/TinyYolov2.ts": { - "bytes": 1804, + "bytes": 1801, "imports": [ { "path": "src/classes/index.ts" @@ -1723,7 +1723,7 @@ ] }, "src/tinyYolov2/types.ts": { - "bytes": 955, + "bytes": 952, "imports": [] }, "src/tinyYolov2/index.ts": { @@ -1756,7 +1756,7 @@ "imports": [] }, "src/globalApi/extractFacesAndComputeResults.ts": { - "bytes": 2040, + "bytes": 2037, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1778,7 +1778,7 @@ ] }, "src/tinyFaceDetector/TinyFaceDetector.ts": { - "bytes": 1473, + "bytes": 1470, "imports": [ { "path": "src/classes/index.ts" @@ -1821,7 +1821,7 @@ ] }, "src/globalApi/PredictFaceExpressionsTask.ts": { - "bytes": 3830, + "bytes": 3827, "imports": [ { "path": "src/factories/WithFaceExpressions.ts" @@ -1844,7 +1844,7 @@ ] }, "src/globalApi/PredictAgeAndGenderTask.ts": { - "bytes": 4011, + "bytes": 4008, "imports": [ { "path": "src/factories/WithAge.ts" @@ -1893,7 +1893,7 @@ ] }, "src/globalApi/DetectFaceLandmarksTasks.ts": { - "bytes": 4005, + "bytes": 4002, "imports": [ { "path": "dist/tfjs.esm.js" @@ -2067,7 +2067,7 @@ ] }, "src/index.ts": { - "bytes": 1027, + "bytes": 1024, "imports": [ { "path": "dist/tfjs.esm.js" @@ -2136,7 +2136,7 @@ "dist/face-api.node-gpu.js.map": { "imports": [], "inputs": {}, - "bytes": 303804 + "bytes": 303627 }, "dist/face-api.node-gpu.js": { "imports": [], diff --git a/dist/face-api.node.js.map b/dist/face-api.node.js.map index 53f65d0..47f241b 100644 --- a/dist/face-api.node.js.map +++ b/dist/face-api.node.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../src/tfjs/tf-node.js", "../src/env/isNodejs.ts", "../src/index.ts", "../src/draw/index.ts", "../src/draw/drawContour.ts", "../src/utils/index.ts", "../src/classes/Dimensions.ts", "../src/classes/Point.ts", "../src/classes/Box.ts", "../src/classes/BoundingBox.ts", "../src/classes/ObjectDetection.ts", "../src/classes/FaceDetection.ts", "../src/ops/iou.ts", "../src/ops/minBbox.ts", "../src/ops/nonMaxSuppression.ts", "../src/ops/normalize.ts", "../src/ops/padToSquare.ts", "../src/ops/shuffleArray.ts", "../src/ops/index.ts", "../src/classes/Rect.ts", "../src/classes/FaceLandmarks.ts", "../src/classes/FaceLandmarks5.ts", "../src/classes/FaceLandmarks68.ts", "../src/classes/FaceMatch.ts", "../src/classes/LabeledBox.ts", "../src/classes/LabeledFaceDescriptors.ts", "../src/classes/PredictedBox.ts", "../src/factories/WithFaceDetection.ts", "../src/env/createBrowserEnv.ts", "../src/env/createFileSystem.ts", "../src/env/createNodejsEnv.ts", "../src/env/isBrowser.ts", "../src/env/index.ts", "../src/dom/resolveInput.ts", "../src/dom/getContext2dOrThrow.ts", "../src/draw/DrawTextField.ts", "../src/draw/DrawBox.ts", "../src/draw/drawDetections.ts", "../src/faceExpressionNet/FaceExpressionNet.ts", "../src/dom/isMediaLoaded.ts", "../src/dom/awaitMediaLoaded.ts", "../src/dom/bufferToImage.ts", "../src/dom/getMediaDimensions.ts", "../src/dom/createCanvas.ts", "../src/dom/imageTensorToCanvas.ts", "../src/dom/isMediaElement.ts", "../src/dom/NetInput.ts", "../src/dom/imageToSquare.ts", "../src/dom/toNetInput.ts", "../src/dom/extractFaces.ts", "../src/dom/extractFaceTensors.ts", "../src/dom/fetchOrThrow.ts", "../src/dom/fetchImage.ts", "../src/dom/fetchJson.ts", "../src/dom/fetchNetWeights.ts", "../src/dom/loadWeightMap.ts", "../src/common/getModelUris.ts", "../src/dom/matchDimensions.ts", "../src/faceFeatureExtractor/FaceFeatureExtractor.ts", "../src/NeuralNetwork.ts", "../src/faceFeatureExtractor/denseBlock.ts", "../src/common/depthwiseSeparableConv.ts", "../src/common/convLayer.ts", "../src/common/disposeUnusedWeightTensors.ts", "../src/common/extractConvParamsFactory.ts", "../src/common/extractFCParamsFactory.ts", "../src/common/extractSeparableConvParamsFactory.ts", "../src/common/types.ts", "../src/common/extractWeightEntryFactory.ts", "../src/common/extractWeightsFactory.ts", "../src/faceFeatureExtractor/extractorsFactory.ts", "../src/faceFeatureExtractor/extractParams.ts", "../src/common/loadConvParamsFactory.ts", "../src/faceFeatureExtractor/loadParamsFactory.ts", "../src/faceFeatureExtractor/extractParamsFromWeigthMap.ts", "../src/faceProcessor/FaceProcessor.ts", "../src/common/fullyConnectedLayer.ts", "../src/faceProcessor/extractParams.ts", "../src/faceProcessor/extractParamsFromWeigthMap.ts", "../src/faceProcessor/util.ts", "../src/faceExpressionNet/FaceExpressions.ts", "../src/factories/WithFaceExpressions.ts", "../src/draw/drawFaceExpressions.ts", "../src/factories/WithFaceLandmarks.ts", "../src/draw/DrawFaceLandmarks.ts", "../src/ageGenderNet/AgeGenderNet.ts", "../src/xception/TinyXception.ts", "../src/xception/extractParams.ts", "../src/xception/extractParamsFromWeigthMap.ts", "../src/ageGenderNet/extractParams.ts", "../src/ageGenderNet/extractParamsFromWeigthMap.ts", "../src/ageGenderNet/types.ts", "../src/faceLandmarkNet/FaceLandmark68NetBase.ts", "../src/faceLandmarkNet/FaceLandmark68Net.ts", "../src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts", "../src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts", "../src/faceFeatureExtractor/extractParamsTiny.ts", "../src/faceLandmarkNet/FaceLandmark68TinyNet.ts", "../src/faceLandmarkNet/index.ts", "../src/faceRecognitionNet/FaceRecognitionNet.ts", "../src/faceRecognitionNet/convLayer.ts", "../src/faceRecognitionNet/scaleLayer.ts", "../src/faceRecognitionNet/extractParams.ts", "../src/faceRecognitionNet/extractParamsFromWeigthMap.ts", "../src/faceRecognitionNet/residualLayer.ts", "../src/faceRecognitionNet/index.ts", "../src/factories/WithFaceDescriptor.ts", "../src/factories/WithAge.ts", "../src/factories/WithGender.ts", "../src/ssdMobilenetv1/SsdMobilenetv1.ts", "../src/ssdMobilenetv1/extractParams.ts", "../src/ssdMobilenetv1/extractParamsFromWeigthMap.ts", "../src/ssdMobilenetv1/mobileNetV1.ts", "../src/ssdMobilenetv1/pointwiseConvLayer.ts", "../src/ssdMobilenetv1/nonMaxSuppression.ts", "../src/ssdMobilenetv1/outputLayer.ts", "../src/ssdMobilenetv1/predictionLayer.ts", "../src/ssdMobilenetv1/boxPredictionLayer.ts", "../src/ssdMobilenetv1/SsdMobilenetv1Options.ts", "../src/ssdMobilenetv1/index.ts", "../src/tinyYolov2/const.ts", "../src/tinyYolov2/TinyYolov2Base.ts", "../src/tinyYolov2/config.ts", "../src/tinyYolov2/convWithBatchNorm.ts", "../src/tinyYolov2/leaky.ts", "../src/tinyYolov2/depthwiseSeparableConv.ts", "../src/tinyYolov2/extractParams.ts", "../src/tinyYolov2/extractParamsFromWeigthMap.ts", "../src/tinyYolov2/TinyYolov2Options.ts", "../src/tinyYolov2/TinyYolov2.ts", "../src/tinyYolov2/index.ts", "../src/tinyFaceDetector/TinyFaceDetectorOptions.ts", "../src/globalApi/ComposableTask.ts", "../src/globalApi/DetectFaceLandmarksTasks.ts", "../src/globalApi/extractFacesAndComputeResults.ts", "../src/tinyFaceDetector/const.ts", "../src/tinyFaceDetector/TinyFaceDetector.ts", "../src/globalApi/nets.ts", "../src/globalApi/PredictFaceExpressionsTask.ts", "../src/globalApi/PredictAgeAndGenderTask.ts", "../src/globalApi/ComputeFaceDescriptorsTasks.ts", "../src/globalApi/DetectFacesTasks.ts", "../src/globalApi/detectFaces.ts", "../src/globalApi/allFaces.ts", "../src/euclideanDistance.ts", "../src/globalApi/FaceMatcher.ts", "../src/tinyFaceDetector/index.ts", "../src/resizeResults.ts"], - "sourcesContent": ["/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable node/no-unpublished-import */\n\nexport * from '@tensorflow/tfjs-node';\n", "export function isNodejs(): boolean {\n return typeof global === 'object'\n && typeof require === 'function'\n && typeof module !== 'undefined'\n // issues with gatsby.js: module.exports is undefined\n // && !!module.exports\n && typeof process !== 'undefined' && !!process.version;\n}\n", "import * as tf from '../dist/tfjs.esm.js';\nimport * as draw from './draw/index';\nimport * as utils from './utils/index';\nimport * as pkg from '../package.json';\n\nexport { tf, draw, utils };\n\nexport * from './ageGenderNet/index';\nexport * from './classes/index';\nexport * from './dom/index';\nexport * from './env/index';\nexport * from './faceExpressionNet/index';\nexport * from './faceLandmarkNet/index';\nexport * from './faceRecognitionNet/index';\nexport * from './factories/index';\nexport * from './globalApi/index';\nexport * from './ops/index';\nexport * from './ssdMobilenetv1/index';\nexport * from './tinyFaceDetector/index';\nexport * from './tinyYolov2/index';\nexport * from './euclideanDistance';\nexport * from './NeuralNetwork';\nexport * from './resizeResults';\n\nconst node = (typeof process !== 'undefined');\n// eslint-disable-next-line no-undef\nconst browser = (typeof navigator !== 'undefined') && (typeof navigator.userAgent !== 'undefined');\nexport const version = { faceapi: pkg.version as string, node, browser };\n", "export * from './drawContour';\nexport * from './drawDetections';\nexport * from './drawFaceExpressions';\nexport * from './DrawBox';\nexport * from './DrawFaceLandmarks';\nexport * from './DrawTextField';\n", "import { Point } from '../classes/index';\n\nexport function drawContour(\n ctx: CanvasRenderingContext2D,\n points: Point[],\n isClosed: boolean = false,\n) {\n ctx.beginPath();\n\n points.slice(1).forEach(({ x, y }, prevIdx) => {\n const from = points[prevIdx];\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(x, y);\n });\n\n if (isClosed) {\n const from = points[points.length - 1];\n const to = points[0];\n if (!from || !to) {\n return;\n }\n\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n }\n\n ctx.stroke();\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Point } from '../classes/index';\nimport { Dimensions, IDimensions } from '../classes/Dimensions';\n\nexport function isTensor(tensor: any, dim: number) {\n return tensor instanceof tf.Tensor && tensor.shape.length === dim;\n}\n\nexport function isTensor1D(tensor: any): tensor is tf.Tensor1D {\n return isTensor(tensor, 1);\n}\n\nexport function isTensor2D(tensor: any): tensor is tf.Tensor2D {\n return isTensor(tensor, 2);\n}\n\nexport function isTensor3D(tensor: any): tensor is tf.Tensor3D {\n return isTensor(tensor, 3);\n}\n\nexport function isTensor4D(tensor: any): tensor is tf.Tensor4D {\n return isTensor(tensor, 4);\n}\n\nexport function isFloat(num: number) {\n return num % 1 !== 0;\n}\n\nexport function isEven(num: number) {\n return num % 2 === 0;\n}\n\nexport function round(num: number, prec: number = 2) {\n const f = 10 ** prec;\n return Math.floor(num * f) / f;\n}\n\nexport function isDimensions(obj: any): boolean {\n return obj && obj.width && obj.height;\n}\n\nexport function computeReshapedDimensions({ width, height }: IDimensions, inputSize: number) {\n const scale = inputSize / Math.max(height, width);\n return new Dimensions(Math.round(width * scale), Math.round(height * scale));\n}\n\nexport function getCenterPoint(pts: Point[]): Point {\n return pts.reduce((sum, pt) => sum.add(pt), new Point(0, 0))\n .div(new Point(pts.length, pts.length));\n}\n\nexport function range(num: number, start: number, step: number): number[] {\n return Array(num).fill(0).map((_, i) => start + (i * step));\n}\n\nexport function isValidNumber(num: any) {\n // eslint-disable-next-line no-mixed-operators\n return !!num && (num !== Infinity) && (num !== -Infinity) && !Number.isNaN(num) || num === 0;\n}\n\nexport function isValidProbablitiy(num: any) {\n return isValidNumber(num) && num >= 0 && num <= 1.0;\n}\n", "import { isValidNumber } from '../utils/index';\n\nexport interface IDimensions {\n width: number\n height: number\n}\n\nexport class Dimensions implements IDimensions {\n private _width: number\n\n private _height: number\n\n constructor(width: number, height: number) {\n if (!isValidNumber(width) || !isValidNumber(height)) {\n throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({ width, height })}`);\n }\n\n this._width = width;\n this._height = height;\n }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public reverse(): Dimensions {\n return new Dimensions(1 / this.width, 1 / this.height);\n }\n}\n", "export interface IPoint {\n x: number\n y: number\n}\n\nexport class Point implements IPoint {\n private _x: number\n\n private _y: number\n\n constructor(x: number, y: number) {\n this._x = x;\n this._y = y;\n }\n\n get x(): number { return this._x; }\n\n get y(): number { return this._y; }\n\n public add(pt: IPoint): Point {\n return new Point(this.x + pt.x, this.y + pt.y);\n }\n\n public sub(pt: IPoint): Point {\n return new Point(this.x - pt.x, this.y - pt.y);\n }\n\n public mul(pt: IPoint): Point {\n return new Point(this.x * pt.x, this.y * pt.y);\n }\n\n public div(pt: IPoint): Point {\n return new Point(this.x / pt.x, this.y / pt.y);\n }\n\n public abs(): Point {\n return new Point(Math.abs(this.x), Math.abs(this.y));\n }\n\n public magnitude(): number {\n return Math.sqrt((this.x ** 2) + (this.y ** 2));\n }\n\n public floor(): Point {\n return new Point(Math.floor(this.x), Math.floor(this.y));\n }\n}\n", "import { isDimensions, isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { IDimensions } from './Dimensions';\nimport { Point } from './Point';\nimport { IRect } from './Rect';\n\nexport class Box implements IBoundingBox, IRect {\n public static isRect(rect: any): boolean {\n return !!rect && [rect.x, rect.y, rect.width, rect.height].every(isValidNumber);\n }\n\n public static assertIsValidBox(box: any, callee: string, allowNegativeDimensions: boolean = false) {\n if (!Box.isRect(box)) {\n throw new Error(`${callee} - invalid box: ${JSON.stringify(box)}, expected object with properties x, y, width, height`);\n }\n\n if (!allowNegativeDimensions && (box.width < 0 || box.height < 0)) {\n throw new Error(`${callee} - width (${box.width}) and height (${box.height}) must be positive numbers`);\n }\n }\n\n private _x: number\n\n private _y: number\n\n private _width: number\n\n private _height: number\n\n constructor(_box: IBoundingBox | IRect, allowNegativeDimensions: boolean = true) {\n const box = (_box || {}) as any;\n\n const isBbox = [box.left, box.top, box.right, box.bottom].every(isValidNumber);\n const isRect = [box.x, box.y, box.width, box.height].every(isValidNumber);\n\n if (!isRect && !isBbox) {\n throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(box)}`);\n }\n\n const [x, y, width, height] = isRect\n ? [box.x, box.y, box.width, box.height]\n : [box.left, box.top, box.right - box.left, box.bottom - box.top];\n\n Box.assertIsValidBox({\n x, y, width, height,\n }, 'Box.constructor', allowNegativeDimensions);\n\n this._x = x;\n this._y = y;\n this._width = width;\n this._height = height;\n }\n\n public get x(): number { return this._x; }\n\n public get y(): number { return this._y; }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public get left(): number { return this.x; }\n\n public get top(): number { return this.y; }\n\n public get right(): number { return this.x + this.width; }\n\n public get bottom(): number { return this.y + this.height; }\n\n public get area(): number { return this.width * this.height; }\n\n public get topLeft(): Point { return new Point(this.left, this.top); }\n\n public get topRight(): Point { return new Point(this.right, this.top); }\n\n public get bottomLeft(): Point { return new Point(this.left, this.bottom); }\n\n public get bottomRight(): Point { return new Point(this.right, this.bottom); }\n\n public round(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.round(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public floor(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.floor(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public toSquare(): Box {\n let {\n x, y, width, height,\n } = this;\n const diff = Math.abs(width - height);\n if (width < height) {\n x -= (diff / 2);\n width += diff;\n }\n if (height < width) {\n y -= (diff / 2);\n height += diff;\n }\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public rescale(s: IDimensions | number): Box {\n const scaleX = isDimensions(s) ? (s as IDimensions).width : s as number;\n const scaleY = isDimensions(s) ? (s as IDimensions).height : s as number;\n return new Box({\n x: this.x * scaleX,\n y: this.y * scaleY,\n width: this.width * scaleX,\n height: this.height * scaleY,\n });\n }\n\n public pad(padX: number, padY: number): Box {\n const [x, y, width, height] = [\n this.x - (padX / 2),\n this.y - (padY / 2),\n this.width + padX,\n this.height + padY,\n ];\n return new Box({\n x, y, width, height,\n });\n }\n\n public clipAtImageBorders(imgWidth: number, imgHeight: number): Box {\n const {\n x, y, right, bottom,\n } = this;\n const clippedX = Math.max(x, 0);\n const clippedY = Math.max(y, 0);\n\n const newWidth = right - clippedX;\n const newHeight = bottom - clippedY;\n const clippedWidth = Math.min(newWidth, imgWidth - clippedX);\n const clippedHeight = Math.min(newHeight, imgHeight - clippedY);\n\n return (new Box({\n x: clippedX, y: clippedY, width: clippedWidth, height: clippedHeight,\n })).floor();\n }\n\n public shift(sx: number, sy: number): Box {\n const { width, height } = this;\n const x = this.x + sx;\n const y = this.y + sy;\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public padAtBorders(imageHeight: number, imageWidth: number) {\n const w = this.width + 1;\n const h = this.height + 1;\n\n const dx = 1;\n const dy = 1;\n let edx = w;\n let edy = h;\n\n let x = this.left;\n let y = this.top;\n let ex = this.right;\n let ey = this.bottom;\n\n if (ex > imageWidth) {\n edx = -ex + imageWidth + w;\n ex = imageWidth;\n }\n if (ey > imageHeight) {\n edy = -ey + imageHeight + h;\n ey = imageHeight;\n }\n if (x < 1) {\n edy = 2 - x;\n x = 1;\n }\n if (y < 1) {\n edy = 2 - y;\n y = 1;\n }\n\n return {\n dy, edy, dx, edx, y, ey, x, ex, w, h,\n };\n }\n\n public calibrate(region: Box) {\n return new Box({\n left: this.left + (region.left * this.width),\n top: this.top + (region.top * this.height),\n right: this.right + (region.right * this.width),\n bottom: this.bottom + (region.bottom * this.height),\n }).toSquare().round();\n }\n}\n", "import { Box } from './Box';\n\nexport interface IBoundingBox {\n left: number\n top: number\n right: number\n bottom: number\n}\n\nexport class BoundingBox extends Box implements IBoundingBox {\n constructor(left: number, top: number, right: number, bottom: number, allowNegativeDimensions: boolean = false) {\n super({\n left, top, right, bottom,\n }, allowNegativeDimensions);\n }\n}\n", "import { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { IRect, Rect } from './Rect';\n\nexport class ObjectDetection {\n private _score: number\n\n private _classScore: number\n\n private _className: string\n\n private _box: Rect\n\n private _imageDims: Dimensions\n\n constructor(\n score: number,\n classScore: number,\n className: string,\n relativeBox: IRect,\n imageDims: IDimensions,\n ) {\n this._imageDims = new Dimensions(imageDims.width, imageDims.height);\n this._score = score;\n this._classScore = classScore;\n this._className = className;\n this._box = new Box(relativeBox).rescale(this._imageDims);\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n\n public get className(): string { return this._className; }\n\n public get box(): Box { return this._box; }\n\n public get imageDims(): Dimensions { return this._imageDims; }\n\n public get imageWidth(): number { return this.imageDims.width; }\n\n public get imageHeight(): number { return this.imageDims.height; }\n\n public get relativeBox(): Box { return new Box(this._box).rescale(this.imageDims.reverse()); }\n\n public forSize(width: number, height: number): ObjectDetection {\n return new ObjectDetection(\n this.score,\n this.classScore,\n this.className,\n this.relativeBox,\n { width, height },\n );\n }\n}\n", "import { Box } from './Box';\nimport { IDimensions } from './Dimensions';\nimport { ObjectDetection } from './ObjectDetection';\nimport { Rect } from './Rect';\n\nexport interface IFaceDetecion {\n score: number\n box: Box\n}\n\nexport class FaceDetection extends ObjectDetection implements IFaceDetecion {\n constructor(\n score: number,\n relativeBox: Rect,\n imageDims: IDimensions,\n ) {\n super(score, score, '', relativeBox, imageDims);\n }\n\n public forSize(width: number, height: number): FaceDetection {\n const { score, relativeBox, imageDims } = super.forSize(width, height);\n return new FaceDetection(score, relativeBox, imageDims);\n }\n}\n", "import { Box } from '../classes/Box';\n\nexport function iou(box1: Box, box2: Box, isIOU: boolean = true) {\n const width = Math.max(0.0, Math.min(box1.right, box2.right) - Math.max(box1.left, box2.left));\n const height = Math.max(0.0, Math.min(box1.bottom, box2.bottom) - Math.max(box1.top, box2.top));\n const interSection = width * height;\n\n return isIOU\n ? interSection / (box1.area + box2.area - interSection)\n : interSection / Math.min(box1.area, box2.area);\n}\n", "import { BoundingBox, IPoint } from '../classes/index';\n\nexport function minBbox(pts: IPoint[]): BoundingBox {\n const xs = pts.map((pt) => pt.x);\n const ys = pts.map((pt) => pt.y);\n const minX = xs.reduce((min, x) => (x < min ? x : min), Infinity);\n const minY = ys.reduce((min, y) => (y < min ? y : min), Infinity);\n const maxX = xs.reduce((max, x) => (max < x ? x : max), 0);\n const maxY = ys.reduce((max, y) => (max < y ? y : max), 0);\n\n return new BoundingBox(minX, minY, maxX, maxY);\n}\n", "import { Box } from '../classes/Box';\nimport { iou } from './iou';\n\nexport function nonMaxSuppression(\n boxes: Box[],\n scores: number[],\n iouThreshold: number,\n isIOU: boolean = true,\n): number[] {\n let indicesSortedByScore = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .sort((c1, c2) => c1.score - c2.score)\n .map((c) => c.boxIndex);\n\n const pick: number[] = [];\n\n while (indicesSortedByScore.length > 0) {\n const curr = indicesSortedByScore.pop() as number;\n pick.push(curr);\n\n const indices = indicesSortedByScore;\n\n const outputs: number[] = [];\n for (let i = 0; i < indices.length; i++) {\n const idx = indices[i];\n\n const currBox = boxes[curr];\n const idxBox = boxes[idx];\n\n outputs.push(iou(currBox, idxBox, isIOU));\n }\n\n indicesSortedByScore = indicesSortedByScore.filter(\n (_, j) => outputs[j] <= iouThreshold,\n );\n }\n\n return pick;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nexport function normalize(x: tf.Tensor4D, meanRgb: number[]): tf.Tensor4D {\n return tf.tidy(() => {\n const [r, g, b] = meanRgb;\n const avg_r = tf.fill([...x.shape.slice(0, 3), 1], r, 'float32');\n const avg_g = tf.fill([...x.shape.slice(0, 3), 1], g, 'float32');\n const avg_b = tf.fill([...x.shape.slice(0, 3), 1], b, 'float32');\n const avg_rgb = tf.concat([avg_r, avg_g, avg_b], 3);\n\n return tf.sub(x, avg_rgb);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\n/**\n * Pads the smaller dimension of an image tensor with zeros, such that width === height.\n *\n * @param imgTensor The image tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The padded tensor with width === height.\n */\nexport function padToSquare(\n imgTensor: tf.Tensor4D,\n isCenterImage: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const [height, width] = imgTensor.shape.slice(1);\n if (height === width) {\n return imgTensor;\n }\n\n const dimDiff = Math.abs(height - width);\n const paddingAmount = Math.round(dimDiff * (isCenterImage ? 0.5 : 1));\n const paddingAxis = height > width ? 2 : 1;\n\n const createPaddingTensor = (paddingAmountLocal: number): tf.Tensor => {\n const paddingTensorShape = imgTensor.shape.slice();\n paddingTensorShape[paddingAxis] = paddingAmountLocal;\n return tf.fill(paddingTensorShape, 0, 'float32');\n };\n\n const paddingTensorAppend = createPaddingTensor(paddingAmount);\n const remainingPaddingAmount = dimDiff - (paddingTensorAppend.shape[paddingAxis] as number);\n\n const paddingTensorPrepend = isCenterImage && remainingPaddingAmount\n ? createPaddingTensor(remainingPaddingAmount)\n : null;\n\n const tensorsToStack = [\n paddingTensorPrepend,\n imgTensor,\n paddingTensorAppend,\n ]\n .filter((t) => !!t)\n // .map((t: tf.Tensor) => t.toFloat()) as tf.Tensor4D[]\n .map((t: tf.Tensor) => tf.cast(t, 'float32')) as tf.Tensor4D[];\n return tf.concat(tensorsToStack, paddingAxis);\n });\n}\n", "export function shuffleArray(inputArray: any[]) {\n const array = inputArray.slice();\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const x = array[i];\n array[i] = array[j];\n array[j] = x;\n }\n return array;\n}\n", "export * from './iou';\nexport * from './minBbox';\nexport * from './nonMaxSuppression';\nexport * from './normalize';\nexport * from './padToSquare';\nexport * from './shuffleArray';\n\nexport function sigmoid(x: number) {\n return 1 / (1 + Math.exp(-x));\n}\n\nexport function inverseSigmoid(x: number) {\n return Math.log(x / (1 - x));\n}\n", "import { Box } from './Box';\n\nexport interface IRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport class Rect extends Box implements IRect {\n constructor(x: number, y: number, width: number, height: number, allowNegativeDimensions: boolean = false) {\n super({\n x, y, width, height,\n }, allowNegativeDimensions);\n }\n}\n", "import { minBbox } from '../ops/index';\nimport { getCenterPoint } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { FaceDetection } from './FaceDetection';\nimport { Point } from './Point';\nimport { IRect, Rect } from './Rect';\n\n// face alignment constants\nconst relX = 0.5;\nconst relY = 0.43;\nconst relScale = 0.45;\n\nexport interface IFaceLandmarks {\n positions: Point[]\n shift: Point\n}\n\nexport class FaceLandmarks implements IFaceLandmarks {\n protected _shift: Point\n\n protected _positions: Point[]\n\n protected _imgDims: Dimensions\n\n constructor(\n relativeFaceLandmarkPositions: Point[],\n imgDims: IDimensions,\n shift: Point = new Point(0, 0),\n ) {\n const { width, height } = imgDims;\n this._imgDims = new Dimensions(width, height);\n this._shift = shift;\n this._positions = relativeFaceLandmarkPositions.map(\n (pt) => pt.mul(new Point(width, height)).add(shift),\n );\n }\n\n public get shift(): Point { return new Point(this._shift.x, this._shift.y); }\n\n public get imageWidth(): number { return this._imgDims.width; }\n\n public get imageHeight(): number { return this._imgDims.height; }\n\n public get positions(): Point[] { return this._positions; }\n\n public get relativePositions(): Point[] {\n return this._positions.map(\n (pt) => pt.sub(this._shift).div(new Point(this.imageWidth, this.imageHeight)),\n );\n }\n\n public forSize(width: number, height: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n { width, height },\n );\n }\n\n public shiftBy(x: number, y: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n this._imgDims,\n new Point(x, y),\n );\n }\n\n public shiftByPoint(pt: Point): T {\n return this.shiftBy(pt.x, pt.y);\n }\n\n /**\n * Aligns the face landmarks after face detection from the relative positions of the faces\n * bounding box, or it's current shift. This function should be used to align the face images\n * after face detection has been performed, before they are passed to the face recognition net.\n * This will make the computed face descriptor more accurate.\n *\n * @param detection (optional) The bounding box of the face or the face detection result. If\n * no argument was passed the position of the face landmarks are assumed to be relative to\n * it's current shift.\n * @returns The bounding box of the aligned face.\n */\n public align(\n detection?: FaceDetection | IRect | IBoundingBox | null,\n options: { useDlibAlignment?: boolean, minBoxPadding?: number } = { },\n ): Box {\n if (detection) {\n const box = detection instanceof FaceDetection\n ? detection.box.floor()\n : new Box(detection);\n\n return this.shiftBy(box.x, box.y).align(null, options);\n }\n\n const { useDlibAlignment, minBoxPadding } = { useDlibAlignment: false, minBoxPadding: 0.2, ...options };\n\n if (useDlibAlignment) {\n return this.alignDlib();\n }\n\n return this.alignMinBbox(minBoxPadding);\n }\n\n private alignDlib(): Box {\n const centers = this.getRefPointsForAlignment();\n\n const [leftEyeCenter, rightEyeCenter, mouthCenter] = centers;\n const distToMouth = (pt: Point) => mouthCenter.sub(pt).magnitude();\n const eyeToMouthDist = (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2;\n\n const size = Math.floor(eyeToMouthDist / relScale);\n\n const refPoint = getCenterPoint(centers);\n // TODO: pad in case rectangle is out of image bounds\n const x = Math.floor(Math.max(0, refPoint.x - (relX * size)));\n const y = Math.floor(Math.max(0, refPoint.y - (relY * size)));\n\n return new Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y));\n }\n\n private alignMinBbox(padding: number): Box {\n const box = minBbox(this.positions);\n return box.pad(box.width * padding, box.height * padding);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n throw new Error('getRefPointsForAlignment not implemented by base class');\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks5 extends FaceLandmarks {\n protected getRefPointsForAlignment(): Point[] {\n const pts = this.positions;\n return [\n pts[0],\n pts[1],\n getCenterPoint([pts[3], pts[4]]),\n ];\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks68 extends FaceLandmarks {\n public getJawOutline(): Point[] {\n return this.positions.slice(0, 17);\n }\n\n public getLeftEyeBrow(): Point[] {\n return this.positions.slice(17, 22);\n }\n\n public getRightEyeBrow(): Point[] {\n return this.positions.slice(22, 27);\n }\n\n public getNose(): Point[] {\n return this.positions.slice(27, 36);\n }\n\n public getLeftEye(): Point[] {\n return this.positions.slice(36, 42);\n }\n\n public getRightEye(): Point[] {\n return this.positions.slice(42, 48);\n }\n\n public getMouth(): Point[] {\n return this.positions.slice(48, 68);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n return [\n this.getLeftEye(),\n this.getRightEye(),\n this.getMouth(),\n ].map(getCenterPoint);\n }\n}\n", "import { round } from '../utils/index';\n\nexport interface IFaceMatch {\n label: string\n distance: number\n}\n\nexport class FaceMatch implements IFaceMatch {\n private _label: string\n\n private _distance: number\n\n constructor(label: string, distance: number) {\n this._label = label;\n this._distance = distance;\n }\n\n public get label(): string { return this._label; }\n\n public get distance(): number { return this._distance; }\n\n public toString(withDistance: boolean = true): string {\n return `${this.label}${withDistance ? ` (${round(this.distance)})` : ''}`;\n }\n}\n", "import { isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { IRect } from './Rect';\n\nexport class LabeledBox extends Box {\n public static assertIsValidLabeledBox(box: any, callee: string) {\n Box.assertIsValidBox(box, callee);\n\n if (!isValidNumber(box.label)) {\n throw new Error(`${callee} - expected property label (${box.label}) to be a number`);\n }\n }\n\n private _label: number\n\n constructor(box: IBoundingBox | IRect | any, label: number) {\n super(box);\n this._label = label;\n }\n\n public get label(): number { return this._label; }\n}\n", "export class LabeledFaceDescriptors {\n private _label: string\n\n private _descriptors: Float32Array[]\n\n constructor(label: string, descriptors: Float32Array[]) {\n if (!(typeof label === 'string')) {\n throw new Error('LabeledFaceDescriptors - constructor expected label to be a string');\n }\n\n if (!Array.isArray(descriptors) || descriptors.some((desc) => !(desc instanceof Float32Array))) {\n throw new Error('LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array');\n }\n\n this._label = label;\n this._descriptors = descriptors;\n }\n\n public get label(): string { return this._label; }\n\n public get descriptors(): Float32Array[] { return this._descriptors; }\n\n public toJSON(): any {\n return {\n label: this.label,\n descriptors: this.descriptors.map((d) => Array.from(d)),\n };\n }\n\n public static fromJSON(json: any): LabeledFaceDescriptors {\n const descriptors = json.descriptors.map((d: any) => new Float32Array(d));\n return new LabeledFaceDescriptors(json.label, descriptors);\n }\n}\n", "import { isValidProbablitiy } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { LabeledBox } from './LabeledBox';\nimport { IRect } from './Rect';\n\nexport class PredictedBox extends LabeledBox {\n public static assertIsValidPredictedBox(box: any, callee: string) {\n LabeledBox.assertIsValidLabeledBox(box, callee);\n\n if (\n !isValidProbablitiy(box.score)\n || !isValidProbablitiy(box.classScore)\n ) {\n throw new Error(`${callee} - expected properties score (${box.score}) and (${box.classScore}) to be a number between [0, 1]`);\n }\n }\n\n private _score: number\n\n private _classScore: number\n\n constructor(box: IBoundingBox | IRect | any, label: number, score: number, classScore: number) {\n super(box, label);\n this._score = score;\n this._classScore = classScore;\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\n\nexport type WithFaceDetection = TSource & {\n detection: FaceDetection\n}\n\nexport function isWithFaceDetection(obj: any): obj is WithFaceDetection<{}> {\n return obj.detection instanceof FaceDetection;\n}\n\nexport function extendWithFaceDetection<\n TSource\n>(\n sourceObj: TSource,\n detection: FaceDetection,\n): WithFaceDetection {\n const extension = { detection };\n return { ...sourceObj, ...extension };\n}\n", "import { Environment } from './types';\n\nexport function createBrowserEnv(): Environment {\n const fetch = window.fetch;\n if (!fetch) throw new Error('fetch - missing fetch implementation for browser environment');\n\n const readFile = () => {\n throw new Error('readFile - filesystem not available for browser environment');\n };\n\n return {\n Canvas: HTMLCanvasElement,\n CanvasRenderingContext2D,\n Image: HTMLImageElement,\n ImageData,\n Video: HTMLVideoElement,\n createCanvasElement: () => document.createElement('canvas'),\n createImageElement: () => document.createElement('img'),\n fetch,\n readFile,\n };\n}\n", "import { FileSystem } from './types';\n\nexport function createFileSystem(fs?: any): FileSystem {\n let requireFsError = '';\n\n if (!fs) {\n try {\n // eslint-disable-next-line global-require\n fs = require('fs');\n } catch (err) {\n requireFsError = err.toString();\n }\n }\n\n const readFile = fs\n ? (filePath: string) => new Promise((resolve, reject) => {\n fs.readFile(filePath, (err: any, buffer: Buffer) => (err ? reject(err) : resolve(buffer)));\n })\n : () => {\n throw new Error(`readFile - failed to require fs in nodejs environment with error: ${requireFsError}`);\n };\n\n return {\n readFile,\n };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { createFileSystem } from './createFileSystem';\nimport { Environment } from './types';\n\nexport function createNodejsEnv(): Environment {\n // eslint-disable-next-line dot-notation\n const Canvas = global['Canvas'] || global.HTMLCanvasElement;\n const Image = global.Image || global.HTMLImageElement;\n\n const createCanvasElement = () => {\n if (Canvas) return new Canvas();\n throw new Error('createCanvasElement - missing Canvas implementation for nodejs environment');\n };\n\n const createImageElement = () => {\n if (Image) return new Image();\n throw new Error('createImageElement - missing Image implementation for nodejs environment');\n };\n\n const fetch = global.fetch;\n // if (!fetch) throw new Error('fetch - missing fetch implementation for nodejs environment');\n\n const fileSystem = createFileSystem();\n\n return {\n Canvas: Canvas || class {},\n CanvasRenderingContext2D: global.CanvasRenderingContext2D || class {},\n Image: Image || class {},\n ImageData: global.ImageData || class {},\n Video: global.HTMLVideoElement || class {},\n createCanvasElement,\n createImageElement,\n fetch,\n ...fileSystem,\n };\n}\n", "export function isBrowser(): boolean {\n return typeof window === 'object'\n && typeof document !== 'undefined'\n && typeof HTMLImageElement !== 'undefined'\n && typeof HTMLCanvasElement !== 'undefined'\n && typeof HTMLVideoElement !== 'undefined'\n && typeof ImageData !== 'undefined'\n && typeof CanvasRenderingContext2D !== 'undefined';\n}\n", "import { createBrowserEnv } from './createBrowserEnv';\nimport { createFileSystem } from './createFileSystem';\nimport { createNodejsEnv } from './createNodejsEnv';\nimport { isBrowser } from './isBrowser';\nimport { isNodejs } from './isNodejs';\nimport { Environment } from './types';\n\nlet environment: Environment | null;\n\nfunction getEnv(): Environment {\n if (!environment) {\n throw new Error('getEnv - environment is not defined, check isNodejs() and isBrowser()');\n }\n return environment;\n}\n\nfunction setEnv(env: Environment) {\n environment = env;\n}\n\nfunction initialize() {\n // check for isBrowser() first to prevent electron renderer process\n // to be initialized with wrong environment due to isNodejs() returning true\n if (isBrowser()) return setEnv(createBrowserEnv());\n if (isNodejs()) return setEnv(createNodejsEnv());\n return null;\n}\n\nfunction monkeyPatch(env: Partial) {\n if (!environment) {\n initialize();\n }\n\n if (!environment) {\n throw new Error('monkeyPatch - environment is not defined, check isNodejs() and isBrowser()');\n }\n\n const { Canvas = environment.Canvas, Image = environment.Image } = env;\n environment.Canvas = Canvas;\n environment.Image = Image;\n environment.createCanvasElement = env.createCanvasElement || (() => new Canvas());\n environment.createImageElement = env.createImageElement || (() => new Image());\n\n environment.ImageData = env.ImageData || environment.ImageData;\n environment.Video = env.Video || environment.Video;\n environment.fetch = env.fetch || environment.fetch;\n environment.readFile = env.readFile || environment.readFile;\n}\n\nexport const env = {\n getEnv,\n setEnv,\n initialize,\n createBrowserEnv,\n createFileSystem,\n createNodejsEnv,\n monkeyPatch,\n isBrowser,\n isNodejs,\n};\n\ninitialize();\n\nexport * from './types';\n", "import { env } from '../env/index';\n\nexport function resolveInput(arg: string | any) {\n if (!env.isNodejs() && typeof arg === 'string') {\n return document.getElementById(arg);\n }\n return arg;\n}\n", "import { env } from '../env/index';\nimport { resolveInput } from './resolveInput';\n\nexport function getContext2dOrThrow(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D): CanvasRenderingContext2D {\n const { Canvas, CanvasRenderingContext2D } = env.getEnv();\n\n if (canvasArg instanceof CanvasRenderingContext2D) {\n return canvasArg;\n }\n\n const canvas = resolveInput(canvasArg);\n\n if (!(canvas instanceof Canvas)) {\n throw new Error('resolveContext2d - expected canvas to be of instance of Canvas');\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('resolveContext2d - canvas 2d context is null');\n }\n\n return ctx;\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IDimensions, IPoint } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { resolveInput } from '../dom/resolveInput';\n\n// eslint-disable-next-line no-shadow\nexport enum AnchorPosition {\n // eslint-disable-next-line no-unused-vars\n TOP_LEFT = 'TOP_LEFT',\n // eslint-disable-next-line no-unused-vars\n TOP_RIGHT = 'TOP_RIGHT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_LEFT = 'BOTTOM_LEFT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_RIGHT = 'BOTTOM_RIGHT'\n}\n\nexport interface IDrawTextFieldOptions {\n anchorPosition?: AnchorPosition\n backgroundColor?: string\n fontColor?: string\n fontSize?: number\n fontStyle?: string\n padding?: number\n}\n\nexport class DrawTextFieldOptions implements IDrawTextFieldOptions {\n public anchorPosition: AnchorPosition\n\n public backgroundColor: string\n\n public fontColor: string\n\n public fontSize: number\n\n public fontStyle: string\n\n public padding: number\n\n constructor(options: IDrawTextFieldOptions = {}) {\n const {\n anchorPosition, backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = options;\n this.anchorPosition = anchorPosition || AnchorPosition.TOP_LEFT;\n this.backgroundColor = backgroundColor || 'rgba(0, 0, 0, 0.5)';\n this.fontColor = fontColor || 'rgba(255, 255, 255, 1)';\n this.fontSize = fontSize || 14;\n this.fontStyle = fontStyle || 'Georgia';\n this.padding = padding || 4;\n }\n}\n\nexport class DrawTextField {\n public text: string[]\n\n public anchor : IPoint\n\n public options: DrawTextFieldOptions\n\n constructor(\n text: string | string[] | DrawTextField,\n anchor: IPoint,\n options: IDrawTextFieldOptions = {},\n ) {\n // eslint-disable-next-line no-nested-ternary\n this.text = typeof text === 'string'\n ? [text]\n : (text instanceof DrawTextField ? text.text : text);\n this.anchor = anchor;\n this.options = new DrawTextFieldOptions(options);\n }\n\n measureWidth(ctx: CanvasRenderingContext2D): number {\n const { padding } = this.options;\n return this.text.map((l) => ctx.measureText(l).width).reduce((w0, w1) => (w0 < w1 ? w1 : w0), 0) + (2 * padding);\n }\n\n measureHeight(): number {\n const { fontSize, padding } = this.options;\n return this.text.length * fontSize + (2 * padding);\n }\n\n getUpperLeft(ctx: CanvasRenderingContext2D, canvasDims?: IDimensions): IPoint {\n const { anchorPosition } = this.options;\n const isShiftLeft = anchorPosition === AnchorPosition.BOTTOM_RIGHT || anchorPosition === AnchorPosition.TOP_RIGHT;\n const isShiftTop = anchorPosition === AnchorPosition.BOTTOM_LEFT || anchorPosition === AnchorPosition.BOTTOM_RIGHT;\n\n const textFieldWidth = this.measureWidth(ctx);\n const textFieldHeight = this.measureHeight();\n const x = (isShiftLeft ? this.anchor.x - textFieldWidth : this.anchor.x);\n const y = isShiftTop ? this.anchor.y - textFieldHeight : this.anchor.y;\n\n // adjust anchor if text box exceeds canvas borders\n if (canvasDims) {\n const { width, height } = canvasDims;\n const newX = Math.max(Math.min(x, width - textFieldWidth), 0);\n const newY = Math.max(Math.min(y, height - textFieldHeight), 0);\n return { x: newX, y: newY };\n }\n return { x, y };\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const canvas = resolveInput(canvasArg);\n const ctx = getContext2dOrThrow(canvas);\n\n const {\n backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = this.options;\n\n ctx.font = `${fontSize}px ${fontStyle}`;\n const maxTextWidth = this.measureWidth(ctx);\n const textHeight = this.measureHeight();\n\n ctx.fillStyle = backgroundColor;\n const upperLeft = this.getUpperLeft(ctx, canvas);\n ctx.fillRect(upperLeft.x, upperLeft.y, maxTextWidth, textHeight);\n\n ctx.fillStyle = fontColor;\n this.text.forEach((textLine, i) => {\n const x = padding + upperLeft.x;\n const y = padding + upperLeft.y + ((i + 1) * fontSize);\n ctx.fillText(textLine, x, y);\n });\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { Box, IBoundingBox, IRect } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport {\n AnchorPosition, DrawTextField, DrawTextFieldOptions, IDrawTextFieldOptions,\n} from './DrawTextField';\n\nexport interface IDrawBoxOptions {\n boxColor?: string\n lineWidth?: number\n drawLabelOptions?: IDrawTextFieldOptions\n label?: string\n}\n\nexport class DrawBoxOptions {\n public boxColor: string\n\n public lineWidth: number\n\n public drawLabelOptions: DrawTextFieldOptions\n\n public label?: string\n\n constructor(options: IDrawBoxOptions = {}) {\n const {\n boxColor, lineWidth, label, drawLabelOptions,\n } = options;\n this.boxColor = boxColor || 'rgba(0, 0, 255, 1)';\n this.lineWidth = lineWidth || 2;\n this.label = label;\n\n const defaultDrawLabelOptions = {\n anchorPosition: AnchorPosition.BOTTOM_LEFT,\n backgroundColor: this.boxColor,\n };\n this.drawLabelOptions = new DrawTextFieldOptions({ ...defaultDrawLabelOptions, ...drawLabelOptions });\n }\n}\n\nexport class DrawBox {\n public box: Box\n\n public options: DrawBoxOptions\n\n constructor(\n box: IBoundingBox | IRect,\n options: IDrawBoxOptions = {},\n ) {\n this.box = new Box(box);\n this.options = new DrawBoxOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const { boxColor, lineWidth } = this.options;\n\n const {\n x, y, width, height,\n } = this.box;\n ctx.strokeStyle = boxColor;\n ctx.lineWidth = lineWidth;\n ctx.strokeRect(x, y, width, height);\n\n const { label } = this.options;\n if (label) {\n new DrawTextField([label], { x: x - (lineWidth / 2), y }, this.options.drawLabelOptions).draw(canvasArg);\n }\n }\n}\n", "import { Box, IBoundingBox, IRect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { round } from '../utils/index';\nimport { DrawBox } from './DrawBox';\n\nexport type TDrawDetectionsInput = IRect | IBoundingBox | FaceDetection | WithFaceDetection<{}>\n\nexport function drawDetections(\n canvasArg: string | HTMLCanvasElement,\n detections: TDrawDetectionsInput | Array,\n) {\n const detectionsArray = Array.isArray(detections) ? detections : [detections];\n\n detectionsArray.forEach((det) => {\n // eslint-disable-next-line no-nested-ternary\n const score = det instanceof FaceDetection\n ? det.score\n : (isWithFaceDetection(det) ? det.detection.score : undefined);\n\n // eslint-disable-next-line no-nested-ternary\n const box = det instanceof FaceDetection\n ? det.box\n : (isWithFaceDetection(det) ? det.detection.box : new Box(det));\n\n const label = score ? `${round(score)}` : undefined;\n new DrawBox(box, { label }).draw(canvasArg);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { FaceExpressions } from './FaceExpressions';\n\nexport class FaceExpressionNet extends FaceProcessor {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceExpressionNet', faceFeatureExtractor);\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n return tf.tidy(() => tf.softmax(this.runNet(input)));\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictExpressions(input: TNetInput) {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n const probabilitesByBatch = await Promise.all(tf.unstack(out).map(async (t) => {\n const data = await t.data();\n t.dispose();\n return data;\n }));\n out.dispose();\n\n const predictionsByBatch = probabilitesByBatch\n .map((probabilites) => new FaceExpressions(probabilites as Float32Array));\n\n return netInput.isBatchInput\n ? predictionsByBatch\n : predictionsByBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_expression_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n\n protected getClassifierChannelsOut(): number {\n return 7;\n }\n}\n", "import { env } from '../env/index';\n\nexport function isMediaLoaded(media: HTMLImageElement | HTMLVideoElement) : boolean {\n const { Image, Video } = env.getEnv();\n\n return (media instanceof Image && media.complete)\n || (media instanceof Video && media.readyState >= 3);\n}\n", "import { env } from '../env/index';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function awaitMediaLoaded(media: HTMLImageElement | HTMLVideoElement | HTMLCanvasElement) {\n // eslint-disable-next-line consistent-return\n return new Promise((resolve, reject) => {\n if (media instanceof env.getEnv().Canvas || isMediaLoaded(media)) {\n return resolve(null);\n }\n\n function onError(e: Event) {\n if (!e.currentTarget) return;\n // eslint-disable-next-line no-use-before-define\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n reject(e);\n }\n\n function onLoad(e: Event) {\n if (!e.currentTarget) return;\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n resolve(e);\n }\n\n media.addEventListener('load', onLoad);\n media.addEventListener('error', onError);\n });\n}\n", "import { env } from '../env/index';\n\nexport function bufferToImage(buf: Blob): Promise {\n return new Promise((resolve, reject) => {\n if (!(buf instanceof Blob)) reject(new Error('bufferToImage - expected buf to be of type: Blob'));\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result !== 'string') reject(new Error('bufferToImage - expected reader.result to be a string, in onload'));\n const img = env.getEnv().createImageElement();\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = reader.result as string;\n };\n reader.onerror = reject;\n reader.readAsDataURL(buf);\n });\n}\n", "import { Dimensions, IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\n\nexport function getMediaDimensions(input: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | IDimensions): Dimensions {\n const { Image, Video } = env.getEnv();\n\n if (input instanceof Image) {\n return new Dimensions(input.naturalWidth, input.naturalHeight);\n }\n if (input instanceof Video) {\n return new Dimensions(input.videoWidth, input.videoHeight);\n }\n return new Dimensions(input.width, input.height);\n}\n", "import { IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function createCanvas({ width, height }: IDimensions): HTMLCanvasElement {\n const { createCanvasElement } = env.getEnv();\n const canvas = createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n\nexport function createCanvasFromMedia(media: HTMLImageElement | HTMLVideoElement | ImageData, dims?: IDimensions): HTMLCanvasElement {\n const { ImageData } = env.getEnv();\n\n if (!(media instanceof ImageData) && !isMediaLoaded(media)) {\n throw new Error('createCanvasFromMedia - media has not finished loading yet');\n }\n\n const { width, height } = dims || getMediaDimensions(media);\n const canvas = createCanvas({ width, height });\n\n if (media instanceof ImageData) {\n getContext2dOrThrow(canvas).putImageData(media, 0, 0);\n } else {\n getContext2dOrThrow(canvas).drawImage(media, 0, 0, width, height);\n }\n return canvas;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { env } from '../env/index';\nimport { isTensor4D } from '../utils/index';\n\nexport async function imageTensorToCanvas(\n imgTensor: tf.Tensor,\n canvas?: HTMLCanvasElement,\n): Promise {\n const targetCanvas = canvas || env.getEnv().createCanvasElement();\n\n const [height, width, numChannels] = imgTensor.shape.slice(isTensor4D(imgTensor) ? 1 : 0);\n const imgTensor3D = tf.tidy(() => imgTensor.as3D(height, width, numChannels).toInt());\n await tf.browser.toPixels(imgTensor3D, targetCanvas);\n\n imgTensor3D.dispose();\n\n return targetCanvas;\n}\n", "import { env } from '../env/index';\n\nexport function isMediaElement(input: any) {\n const { Image, Canvas, Video } = env.getEnv();\n\n return input instanceof Image\n || input instanceof Canvas\n || input instanceof Video;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Dimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { padToSquare } from '../ops/padToSquare';\nimport {\n computeReshapedDimensions, isTensor3D, isTensor4D, range,\n} from '../utils/index';\nimport { createCanvasFromMedia } from './createCanvas';\nimport { imageToSquare } from './imageToSquare';\nimport { TResolvedNetInput } from './types';\n\nexport class NetInput {\n private _imageTensors: Array = []\n\n private _canvases: HTMLCanvasElement[] = []\n\n private _batchSize: number\n\n private _treatAsBatchInput: boolean = false\n\n private _inputDimensions: number[][] = []\n\n private _inputSize: number\n\n constructor(\n inputs: Array,\n treatAsBatchInput: boolean = false,\n ) {\n if (!Array.isArray(inputs)) {\n throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${inputs}`);\n }\n\n this._treatAsBatchInput = treatAsBatchInput;\n this._batchSize = inputs.length;\n\n inputs.forEach((input, idx) => {\n if (isTensor3D(input)) {\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = input.shape;\n return;\n }\n\n if (isTensor4D(input)) {\n const batchSize = (input as any).shape[0];\n if (batchSize !== 1) {\n throw new Error(`NetInput - tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = (input as any).shape.slice(1);\n return;\n }\n\n const canvas = (input as any) instanceof env.getEnv().Canvas ? input : createCanvasFromMedia(input);\n this._canvases[idx] = canvas;\n this._inputDimensions[idx] = [canvas.height, canvas.width, 3];\n });\n }\n\n public get imageTensors(): Array {\n return this._imageTensors;\n }\n\n public get canvases(): HTMLCanvasElement[] {\n return this._canvases;\n }\n\n public get isBatchInput(): boolean {\n return this.batchSize > 1 || this._treatAsBatchInput;\n }\n\n public get batchSize(): number {\n return this._batchSize;\n }\n\n public get inputDimensions(): number[][] {\n return this._inputDimensions;\n }\n\n public get inputSize(): number | undefined {\n return this._inputSize;\n }\n\n public get reshapedInputDimensions(): Dimensions[] {\n return range(this.batchSize, 0, 1).map(\n (_, batchIdx) => this.getReshapedInputDimensions(batchIdx),\n );\n }\n\n public getInput(batchIdx: number): tf.Tensor3D | tf.Tensor4D | HTMLCanvasElement {\n return this.canvases[batchIdx] || this.imageTensors[batchIdx];\n }\n\n public getInputDimensions(batchIdx: number): number[] {\n return this._inputDimensions[batchIdx];\n }\n\n public getInputHeight(batchIdx: number): number {\n return this._inputDimensions[batchIdx][0];\n }\n\n public getInputWidth(batchIdx: number): number {\n return this._inputDimensions[batchIdx][1];\n }\n\n public getReshapedInputDimensions(batchIdx: number): Dimensions {\n if (typeof this.inputSize !== 'number') {\n throw new Error('getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet');\n }\n\n const width = this.getInputWidth(batchIdx);\n const height = this.getInputHeight(batchIdx);\n return computeReshapedDimensions({ width, height }, this.inputSize);\n }\n\n /**\n * Create a batch tensor from all input canvases and tensors\n * with size [batchSize, inputSize, inputSize, 3].\n *\n * @param inputSize Height and width of the tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The batch tensor.\n */\n public toBatchTensor(inputSize: number, isCenterInputs: boolean = true): tf.Tensor4D {\n this._inputSize = inputSize;\n\n return tf.tidy(() => {\n const inputTensors = range(this.batchSize, 0, 1).map((batchIdx) => {\n const input = this.getInput(batchIdx);\n\n if (input instanceof tf.Tensor) {\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n let imgTensor = isTensor4D(input) ? input : input.expandDims();\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n imgTensor = padToSquare(imgTensor, isCenterInputs);\n\n if (imgTensor.shape[1] !== inputSize || imgTensor.shape[2] !== inputSize) {\n imgTensor = tf.image.resizeBilinear(imgTensor, [inputSize, inputSize]);\n }\n\n return imgTensor.as3D(inputSize, inputSize, 3);\n }\n\n if (input instanceof env.getEnv().Canvas) {\n return tf.browser.fromPixels(imageToSquare(input, inputSize, isCenterInputs));\n }\n\n throw new Error(`toBatchTensor - at batchIdx ${batchIdx}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${input}`);\n });\n\n // const batchTensor = tf.stack(inputTensors.map(t => t.toFloat())).as4D(this.batchSize, inputSize, inputSize, 3)\n const batchTensor = tf.stack(inputTensors.map((t) => tf.cast(t, 'float32'))).as4D(this.batchSize, inputSize, inputSize, 3);\n // const batchTensor = tf.stack(inputTensors.map(t => tf.Tensor.as4D(tf.cast(t, 'float32'))), this.batchSize, inputSize, inputSize, 3);\n\n return batchTensor;\n });\n }\n}\n", "import { env } from '../env/index';\nimport { createCanvas, createCanvasFromMedia } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function imageToSquare(input: HTMLImageElement | HTMLCanvasElement, inputSize: number, centerImage: boolean = false) {\n const { Image, Canvas } = env.getEnv();\n\n if (!(input instanceof Image || input instanceof Canvas)) {\n throw new Error('imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement');\n }\n\n const dims = getMediaDimensions(input);\n const scale = inputSize / Math.max(dims.height, dims.width);\n const width = scale * dims.width;\n const height = scale * dims.height;\n\n const targetCanvas = createCanvas({ width: inputSize, height: inputSize });\n const inputCanvas = input instanceof Canvas ? input : createCanvasFromMedia(input);\n\n const offset = Math.abs(width - height) / 2;\n const dx = centerImage && width < height ? offset : 0;\n const dy = centerImage && height < width ? offset : 0;\n getContext2dOrThrow(targetCanvas).drawImage(inputCanvas, dx, dy, width, height);\n\n return targetCanvas;\n}\n", "import { isTensor3D, isTensor4D } from '../utils/index';\nimport { awaitMediaLoaded } from './awaitMediaLoaded';\nimport { isMediaElement } from './isMediaElement';\nimport { NetInput } from './NetInput';\nimport { resolveInput } from './resolveInput';\nimport { TNetInput } from './types';\n\n/**\n * Validates the input to make sure, they are valid net inputs and awaits all media elements\n * to be finished loading.\n *\n * @param input The input, which can be a media element or an array of different media elements.\n * @returns A NetInput instance, which can be passed into one of the neural networks.\n */\nexport async function toNetInput(inputs: TNetInput): Promise {\n if (inputs instanceof NetInput) {\n return inputs;\n }\n\n const inputArgArray = Array.isArray(inputs)\n ? inputs\n : [inputs];\n\n if (!inputArgArray.length) {\n throw new Error('toNetInput - empty array passed as input');\n }\n\n const getIdxHint = (idx: number) => (Array.isArray(inputs) ? ` at input index ${idx}:` : '');\n\n const inputArray = inputArgArray.map(resolveInput);\n\n inputArray.forEach((input, i) => {\n if (!isMediaElement(input) && !isTensor3D(input) && !isTensor4D(input)) {\n if (typeof inputArgArray[i] === 'string') {\n throw new Error(`toNetInput -${getIdxHint(i)} string passed, but could not resolve HTMLElement for element id ${inputArgArray[i]}`);\n }\n\n throw new Error(`toNetInput -${getIdxHint(i)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);\n }\n\n if (isTensor4D(input)) {\n // if tf.Tensor4D is passed in the input array, the batch size has to be 1\n const batchSize = input.shape[0];\n if (batchSize !== 1) {\n throw new Error(`toNetInput -${getIdxHint(i)} tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n }\n });\n\n // wait for all media elements being loaded\n await Promise.all(\n inputArray.map((input) => isMediaElement(input) && awaitMediaLoaded(input)),\n );\n\n return new NetInput(inputArray, Array.isArray(inputs));\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { Rect } from '../classes/Rect';\nimport { env } from '../env/index';\nimport { createCanvas } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { imageTensorToCanvas } from './imageTensorToCanvas';\nimport { toNetInput } from './toNetInput';\nimport { TNetInput } from './types';\n\n/**\n * Extracts the image regions containing the detected faces.\n *\n * @param input The image that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns The Canvases of the corresponding image region for each detected face.\n */\nexport async function extractFaces(\n input: TNetInput,\n detections: Array,\n): Promise {\n const { Canvas } = env.getEnv();\n\n let canvas = input as HTMLCanvasElement;\n\n if (!(input instanceof Canvas)) {\n const netInput = await toNetInput(input);\n\n if (netInput.batchSize > 1) {\n throw new Error('extractFaces - batchSize > 1 not supported');\n }\n\n const tensorOrCanvas = netInput.getInput(0);\n canvas = tensorOrCanvas instanceof Canvas\n ? tensorOrCanvas\n : await imageTensorToCanvas(tensorOrCanvas);\n }\n\n const ctx = getContext2dOrThrow(canvas);\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(canvas.width, canvas.height).box.floor()\n : det),\n )\n .map((box) => box.clipAtImageBorders(canvas.width, canvas.height));\n\n return boxes.map(({\n x, y, width, height,\n }) => {\n const faceImg = createCanvas({ width, height });\n getContext2dOrThrow(faceImg)\n .putImageData(ctx.getImageData(x, y, width, height), 0, 0);\n return faceImg;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isTensor3D, isTensor4D } from '../utils/index';\n\n/**\n * Extracts the tensors of the image regions containing the detected faces.\n * Useful if you want to compute the face descriptors for the face images.\n * Using this method is faster then extracting a canvas for each face and\n * converting them to tensors individually.\n *\n * @param imageTensor The image tensor that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns Tensors of the corresponding image region for each detected face.\n */\nexport async function extractFaceTensors(\n imageTensor: tf.Tensor3D | tf.Tensor4D,\n detections: Array,\n): Promise {\n if (!isTensor3D(imageTensor) && !isTensor4D(imageTensor)) {\n throw new Error('extractFaceTensors - expected image tensor to be 3D or 4D');\n }\n\n if (isTensor4D(imageTensor) && imageTensor.shape[0] > 1) {\n throw new Error('extractFaceTensors - batchSize > 1 not supported');\n }\n\n return tf.tidy(() => {\n const [imgHeight, imgWidth, numChannels] = imageTensor.shape.slice(isTensor4D(imageTensor) ? 1 : 0);\n\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(imgWidth, imgHeight).box\n : det),\n )\n .map((box) => box.clipAtImageBorders(imgWidth, imgHeight));\n\n const faceTensors = boxes.map(({\n x, y, width, height,\n }) => tf.slice3d(imageTensor.as3D(imgHeight, imgWidth, numChannels), [y, x, 0], [height, width, numChannels]));\n\n return faceTensors;\n });\n}\n", "import { env } from '../env/index';\n\nexport async function fetchOrThrow(\n url: string,\n // eslint-disable-next-line no-undef\n init?: RequestInit,\n): Promise {\n const { fetch } = env.getEnv();\n const res = await fetch(url, init);\n if (!(res.status < 400)) {\n throw new Error(`failed to fetch: (${res.status}) ${res.statusText}, from url: ${res.url}`);\n }\n return res;\n}\n", "import { bufferToImage } from './bufferToImage';\nimport { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchImage(uri: string): Promise {\n const res = await fetchOrThrow(uri);\n const blob = await (res).blob();\n\n if (!blob.type.startsWith('image/')) {\n throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${blob.type}, for url: ${res.url}`);\n }\n return bufferToImage(blob);\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchJson(uri: string): Promise {\n return (await fetchOrThrow(uri)).json();\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchNetWeights(uri: string): Promise {\n return new Float32Array(await (await fetchOrThrow(uri)).arrayBuffer());\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { getModelUris } from '../common/getModelUris';\nimport { fetchJson } from './fetchJson';\n\nexport async function loadWeightMap(\n uri: string | undefined,\n defaultModelName: string,\n): Promise {\n const { manifestUri, modelBaseUri } = getModelUris(uri, defaultModelName);\n const manifest = await fetchJson(manifestUri);\n // if (manifest['weightsManifest']) manifest = manifest['weightsManifest'];\n return tf.io.loadWeights(manifest, modelBaseUri);\n}\n", "export function getModelUris(uri: string | undefined, defaultModelName: string) {\n const defaultManifestFilename = `${defaultModelName}-weights_manifest.json`;\n\n if (!uri) {\n return {\n modelBaseUri: '',\n manifestUri: defaultManifestFilename,\n };\n }\n\n if (uri === '/') {\n return {\n modelBaseUri: '/',\n manifestUri: `/${defaultManifestFilename}`,\n };\n }\n // eslint-disable-next-line no-nested-ternary\n const protocol = uri.startsWith('http://') ? 'http://' : uri.startsWith('https://') ? 'https://' : '';\n uri = uri.replace(protocol, '');\n\n const parts = uri.split('/').filter((s) => s);\n\n const manifestFile = uri.endsWith('.json')\n ? parts[parts.length - 1]\n : defaultManifestFilename;\n\n let modelBaseUri = protocol + (uri.endsWith('.json') ? parts.slice(0, parts.length - 1) : parts).join('/');\n modelBaseUri = uri.startsWith('/') ? `/${modelBaseUri}` : modelBaseUri;\n\n return {\n modelBaseUri,\n manifestUri: modelBaseUri === '/' ? `/${manifestFile}` : `${modelBaseUri}/${manifestFile}`,\n };\n}\n", "import { IDimensions } from '../classes/index';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function matchDimensions(input: IDimensions, reference: IDimensions, useMediaDimensions: boolean = false) {\n const { width, height } = useMediaDimensions\n ? getMediaDimensions(reference)\n : reference;\n input.width = width;\n input.height = height;\n return { width, height };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock4 } from './denseBlock';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { FaceFeatureExtractorParams, IFaceFeatureExtractor } from './types';\n\nexport class FaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('FaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock4(normalized, params.dense0, true);\n out = denseBlock4(out, params.dense1);\n out = denseBlock4(out, params.dense2);\n out = denseBlock4(out, params.dense3);\n out = tf.avgPool(out, [7, 7], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../dist/tfjs.esm.js';\n\nimport { ParamMapping } from './common/index';\nimport { getModelUris } from './common/getModelUris';\nimport { loadWeightMap } from './dom/index';\nimport { env } from './env/index';\n\nexport abstract class NeuralNetwork {\n\n protected _params: TNetParams | undefined = undefined\n protected _paramMappings: ParamMapping[] = []\n\n constructor(protected _name: string) {\n }\n\n public get params(): TNetParams | undefined { return this._params }\n public get paramMappings(): ParamMapping[] { return this._paramMappings }\n public get isLoaded(): boolean { return !!this.params }\n\n public getParamFromPath(paramPath: string): tf.Tensor {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n return obj[objProp]\n }\n\n public reassignParamFromPath(paramPath: string, tensor: tf.Tensor) {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n obj[objProp].dispose()\n obj[objProp] = tensor\n }\n\n public getParamList() {\n return this._paramMappings.map(({ paramPath }) => ({\n path: paramPath,\n tensor: this.getParamFromPath(paramPath)\n }))\n }\n\n public getTrainableParams() {\n return this.getParamList().filter(param => param.tensor instanceof tf.Variable)\n }\n\n public getFrozenParams() {\n return this.getParamList().filter(param => !(param.tensor instanceof tf.Variable))\n }\n\n public variable() {\n this.getFrozenParams().forEach(({ path, tensor }) => {\n this.reassignParamFromPath(path, tensor.variable())\n })\n }\n\n public freeze() {\n this.getTrainableParams().forEach(({ path, tensor: variable }) => {\n const tensor = tf.tensor(variable.dataSync())\n variable.dispose()\n this.reassignParamFromPath(path, tensor)\n })\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.getParamList().forEach(param => {\n if (throwOnRedispose && param.tensor.isDisposed) {\n throw new Error(`param tensor has already been disposed for path ${param.path}`)\n }\n param.tensor.dispose()\n })\n this._params = undefined\n }\n\n public serializeParams(): Float32Array {\n return new Float32Array(\n this.getParamList()\n .map(({ tensor }) => Array.from(tensor.dataSync()) as number[])\n .reduce((flat, arr) => flat.concat(arr))\n )\n }\n\n public async load(weightsOrUrl: Float32Array | string | undefined): Promise {\n if (weightsOrUrl instanceof Float32Array) {\n this.extractWeights(weightsOrUrl)\n return\n }\n\n await this.loadFromUri(weightsOrUrl)\n }\n\n public async loadFromUri(uri: string | undefined) {\n if (uri && typeof uri !== 'string') {\n throw new Error(`${this._name}.loadFromUri - expected model uri`)\n }\n\n const weightMap = await loadWeightMap(uri, this.getDefaultModelName())\n this.loadFromWeightMap(weightMap)\n }\n\n public async loadFromDisk(filePath: string | undefined) {\n if (filePath && typeof filePath !== 'string') {\n throw new Error(`${this._name}.loadFromDisk - expected model file path`)\n }\n\n const { readFile } = env.getEnv()\n\n const { manifestUri, modelBaseUri } = getModelUris(filePath, this.getDefaultModelName())\n\n const fetchWeightsFromDisk = (filePaths: string[]) => Promise.all(\n filePaths.map(filePath => readFile(filePath).then(buf => buf.buffer))\n )\n const loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk)\n const manifest = JSON.parse((await readFile(manifestUri)).toString())\n const weightMap = await loadWeights(manifest, modelBaseUri)\n\n this.loadFromWeightMap(weightMap)\n }\n\n public loadFromWeightMap(weightMap: tf.NamedTensorMap) {\n const {\n paramMappings,\n params\n } = this.extractParamsFromWeigthMap(weightMap)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n public extractWeights(weights: Float32Array) {\n const {\n paramMappings,\n params\n } = this.extractParams(weights)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n private traversePropertyPath(paramPath: string) {\n if (!this.params) {\n throw new Error(`traversePropertyPath - model has no loaded params`)\n }\n\n const result = paramPath.split('/').reduce((res: { nextObj: any, obj?: any, objProp?: string }, objProp) => {\n if (!res.nextObj.hasOwnProperty(objProp)) {\n throw new Error(`traversePropertyPath - object does not have property ${objProp}, for path ${paramPath}`)\n }\n\n return { obj: res.nextObj, objProp, nextObj: res.nextObj[objProp] }\n }, { nextObj: this.params })\n\n const { obj, objProp } = result\n if (!obj || !objProp || !(obj[objProp] instanceof tf.Tensor)) {\n throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${paramPath}`)\n }\n\n return { obj, objProp }\n }\n\n protected abstract getDefaultModelName(): string\n protected abstract extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TNetParams, paramMappings: ParamMapping[] }\n protected abstract extractParams(weights: Float32Array): { params: TNetParams, paramMappings: ParamMapping[] }\n}", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams, SeparableConvParams } from '../common/index';\nimport { depthwiseSeparableConv } from '../common/depthwiseSeparableConv';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function denseBlock3(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock3Params,\n isFirstLayer: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, [2, 2], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, [2, 2]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n });\n}\n\nexport function denseBlock4(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock4Params,\n isFirstLayer: boolean = false,\n isScaleDown: boolean = true,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, isScaleDown ? [2, 2] : [1, 1], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, isScaleDown ? [2, 2] : [1, 1]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n const in4 = tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n const out4 = depthwiseSeparableConv(in4, denseBlockParams.conv3, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, tf.add(out3, out4)))) as tf.Tensor4D;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { SeparableConvParams } from './types';\n\nexport function depthwiseSeparableConv(\n x: tf.Tensor4D,\n params: SeparableConvParams,\n stride: [number, number],\n): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same');\n out = tf.add(out, params.bias);\n return out;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams } from './types';\n\nexport function convLayer(\n x: tf.Tensor4D,\n params: ConvParams,\n padding: 'valid' | 'same' = 'same',\n withRelu: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out = tf.add(\n tf.conv2d(x, params.filters, [1, 1], padding),\n params.bias,\n ) as tf.Tensor4D;\n\n return withRelu ? tf.relu(out) : out;\n });\n}\n", "import { ParamMapping } from './types';\n\nexport function disposeUnusedWeightTensors(weightMap: any, paramMappings: ParamMapping[]) {\n Object.keys(weightMap).forEach((path) => {\n if (!paramMappings.some((pm) => pm.originalPath === path)) {\n weightMap[path].dispose();\n }\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams, ExtractWeightsFunction, ParamMapping } from './types';\n\nexport function extractConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams => {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ExtractWeightsFunction, FCParams, ParamMapping } from './types';\n\nexport function extractFCParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): FCParams => {\n const fc_weights = tf.tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]);\n const fc_bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return {\n weights: fc_weights,\n bias: fc_bias,\n };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ExtractWeightsFunction, ParamMapping, SeparableConvParams } from './types';\n\nexport function extractSeparableConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (channelsIn: number, channelsOut: number, mappedPrefix: string): SeparableConvParams => {\n const depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]);\n const pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]);\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/depthwise_filter` },\n { paramPath: `${mappedPrefix}/pointwise_filter` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n\nexport function loadSeparableConvParamsFactory(\n // eslint-disable-next-line no-unused-vars\n extractWeightEntry: (originalPath: string, paramRank: number) => T,\n) {\n return (prefix: string): SeparableConvParams => {\n const depthwise_filter = extractWeightEntry(`${prefix}/depthwise_filter`, 4);\n const pointwise_filter = extractWeightEntry(`${prefix}/pointwise_filter`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\n// eslint-disable-next-line no-unused-vars\nexport type ExtractWeightsFunction = (numWeights: number) => Float32Array\n\nexport type ParamMapping = {\n originalPath?: string\n paramPath: string\n}\n\nexport type ConvParams = {\n filters: tf.Tensor4D\n bias: tf.Tensor1D\n}\n\nexport type FCParams = {\n weights: tf.Tensor2D\n bias: tf.Tensor1D\n}\n\nexport class SeparableConvParams {\n // eslint-disable-next-line no-useless-constructor\n constructor(\n // eslint-disable-next-line no-unused-vars\n public depthwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public pointwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public bias: tf.Tensor1D,\n // eslint-disable-next-line no-empty-function\n ) {}\n}\n", "import { isTensor } from '../utils/index';\nimport { ParamMapping } from './types';\n\nexport function extractWeightEntryFactory(weightMap: any, paramMappings: ParamMapping[]) {\n return (originalPath: string, paramRank: number, mappedPath?: string) => {\n const tensor = weightMap[originalPath];\n\n if (!isTensor(tensor, paramRank)) {\n throw new Error(`expected weightMap[${originalPath}] to be a Tensor${paramRank}D, instead have ${tensor}`);\n }\n\n paramMappings.push(\n { originalPath, paramPath: mappedPath || originalPath },\n );\n\n return tensor;\n };\n}\n", "export function extractWeightsFactory(weights: Float32Array) {\n let remainingWeights = weights;\n\n function extractWeights(numWeights: number): Float32Array {\n const ret = remainingWeights.slice(0, numWeights);\n remainingWeights = remainingWeights.slice(numWeights);\n return ret;\n }\n\n function getRemainingWeights(): Float32Array {\n return remainingWeights;\n }\n\n return {\n extractWeights,\n getRemainingWeights,\n };\n}\n", "import {\n extractConvParamsFactory,\n extractSeparableConvParamsFactory,\n ExtractWeightsFunction,\n ParamMapping,\n} from '../common/index';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractDenseBlock3Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv0`)\n : extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/conv0`);\n const conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv1`);\n const conv2 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const { conv0, conv1, conv2 } = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer);\n const conv3 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock4Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock4Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock4Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock4Params(64, 128, 'dense2');\n const dense3 = extractDenseBlock4Params(128, 256, 'dense3');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: {\n dense0, dense1, dense2, dense3,\n },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams } from './types';\n\n// eslint-disable-next-line no-unused-vars\nexport function loadConvParamsFactory(extractWeightEntry: (originalPath: string, paramRank: number) => T) {\n return (prefix: string): ConvParams => {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return { filters, bias };\n };\n}\n", "import { extractWeightEntryFactory, loadSeparableConvParamsFactory, ParamMapping } from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractDenseBlock3Params(prefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(prefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n const conv3 = extractSeparableConvParams(`${prefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock4Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock4Params('dense0', true),\n dense1: extractDenseBlock4Params('dense1'),\n dense2: extractDenseBlock4Params('dense2'),\n dense3: extractDenseBlock4Params('dense3'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { NetInput } from '../dom/index';\nimport {\n FaceFeatureExtractorParams,\n IFaceFeatureExtractor,\n TinyFaceFeatureExtractorParams,\n} from '../faceFeatureExtractor/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { NetParams } from './types';\nimport { seperateWeightMaps } from './util';\n\nexport abstract class FaceProcessor<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends NeuralNetwork {\n protected _faceFeatureExtractor: IFaceFeatureExtractor\n\n constructor(_name: string, faceFeatureExtractor: IFaceFeatureExtractor) {\n super(_name);\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): IFaceFeatureExtractor {\n return this._faceFeatureExtractor;\n }\n\n protected abstract getDefaultModelName(): string\n\n protected abstract getClassifierChannelsIn(): number\n\n protected abstract getClassifierChannelsOut(): number\n\n public runNet(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n return fullyConnectedLayer(bottleneckFeatures.as2D(bottleneckFeatures.shape[0], -1), params.fc);\n });\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights, this.getClassifierChannelsIn(), this.getClassifierChannelsOut());\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const cIn = this.getClassifierChannelsIn();\n const cOut = this.getClassifierChannelsOut();\n const classifierWeightSize = (cOut * cIn) + cOut;\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FCParams } from './types';\n\nexport function fullyConnectedLayer(\n x: tf.Tensor2D,\n params: FCParams,\n): tf.Tensor2D {\n return tf.tidy(() => tf.add(\n tf.matMul(x, params.weights),\n params.bias,\n ));\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array, channelsIn: number, channelsOut: number): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const fc = extractFCParams(channelsIn, channelsOut, 'fc');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: extractFcParams('fc'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nexport function seperateWeightMaps(weightMap: tf.NamedTensorMap) {\n const featureExtractorMap: tf.NamedTensorMap = {};\n const classifierMap: tf.NamedTensorMap = {};\n\n Object.keys(weightMap).forEach((key) => {\n const map = key.startsWith('fc') ? classifierMap : featureExtractorMap;\n map[key] = weightMap[key];\n });\n\n return { featureExtractorMap, classifierMap };\n}\n", "export const FACE_EXPRESSION_LABELS = ['neutral', 'happy', 'sad', 'angry', 'fearful', 'disgusted', 'surprised'];\n\nexport class FaceExpressions {\n public neutral: number\n\n public happy: number\n\n public sad: number\n\n public angry: number\n\n public fearful: number\n\n public disgusted: number\n\n public surprised: number\n\n constructor(probabilities: number[] | Float32Array) {\n if (probabilities.length !== 7) {\n throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${probabilities.length}`);\n }\n\n FACE_EXPRESSION_LABELS.forEach((expression, idx) => {\n this[expression] = probabilities[idx];\n });\n }\n\n asSortedArray() {\n return FACE_EXPRESSION_LABELS\n .map((expression) => ({ expression, probability: this[expression] as number }))\n .sort((e0, e1) => e1.probability - e0.probability);\n }\n}\n", "import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\n\nexport type WithFaceExpressions = TSource & {\n expressions: FaceExpressions\n}\n\nexport function isWithFaceExpressions(obj: any): obj is WithFaceExpressions<{}> {\n return obj.expressions instanceof FaceExpressions;\n}\n\nexport function extendWithFaceExpressions<\n TSource\n>(\n sourceObj: TSource,\n expressions: FaceExpressions,\n): WithFaceExpressions {\n const extension = { expressions };\n return { ...sourceObj, ...extension };\n}\n", "import { IPoint, Point } from '../classes/index';\nimport { FaceExpressions } from '../faceExpressionNet/index';\nimport { isWithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { round } from '../utils/index';\nimport { DrawTextField } from './DrawTextField';\n\nexport type DrawFaceExpressionsInput = FaceExpressions | WithFaceExpressions<{}>\n\nexport function drawFaceExpressions(\n canvasArg: string | HTMLCanvasElement,\n faceExpressions: DrawFaceExpressionsInput | Array,\n minConfidence = 0.1,\n textFieldAnchor?: IPoint,\n) {\n const faceExpressionsArray = Array.isArray(faceExpressions) ? faceExpressions : [faceExpressions];\n\n faceExpressionsArray.forEach((e) => {\n // eslint-disable-next-line no-nested-ternary\n const expr = e instanceof FaceExpressions\n ? e\n : (isWithFaceExpressions(e) ? e.expressions : undefined);\n if (!expr) {\n throw new Error('drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof');\n }\n\n const sorted = expr.asSortedArray();\n const resultsToDisplay = sorted.filter((exprLocal) => exprLocal.probability > minConfidence);\n\n const anchor = isWithFaceDetection(e)\n ? e.detection.box.bottomLeft\n : (textFieldAnchor || new Point(0, 0));\n\n const drawTextField = new DrawTextField(\n resultsToDisplay.map((exprLocal) => `${exprLocal.expression} (${round(exprLocal.probability)})`),\n anchor,\n );\n drawTextField.draw(canvasArg);\n });\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { isWithFaceDetection, WithFaceDetection } from './WithFaceDetection';\n\nexport type WithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 > = TSource & {\n landmarks: TFaceLandmarks\n unshiftedLandmarks: TFaceLandmarks\n alignedRect: FaceDetection\n }\n\nexport function isWithFaceLandmarks(obj: any): obj is WithFaceLandmarks, FaceLandmarks> {\n return isWithFaceDetection(obj)\n // eslint-disable-next-line dot-notation\n && obj['landmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['unshiftedLandmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['alignedRect'] instanceof FaceDetection;\n}\n\nexport function extendWithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 >(sourceObj: TSource, unshiftedLandmarks: TFaceLandmarks): WithFaceLandmarks {\n const { box: shift } = sourceObj.detection;\n const landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y);\n\n const rect = landmarks.align();\n const { imageDims } = sourceObj.detection;\n const alignedRect = new FaceDetection(sourceObj.detection.score, rect.rescale(imageDims.reverse()), imageDims);\n\n const extension = {\n landmarks,\n unshiftedLandmarks,\n alignedRect,\n };\n\n return { ...sourceObj, ...extension };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IPoint } from '../classes/index';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { drawContour } from './drawContour';\n\nexport interface IDrawFaceLandmarksOptions {\n drawLines?: boolean\n drawPoints?: boolean\n lineWidth?: number\n pointSize?: number\n lineColor?: string\n pointColor?: string\n}\n\nexport class DrawFaceLandmarksOptions {\n public drawLines: boolean\n\n public drawPoints: boolean\n\n public lineWidth: number\n\n public pointSize: number\n\n public lineColor: string\n\n public pointColor: string\n\n constructor(options: IDrawFaceLandmarksOptions = {}) {\n const {\n drawLines = true, drawPoints = true, lineWidth, lineColor, pointSize, pointColor,\n } = options;\n this.drawLines = drawLines;\n this.drawPoints = drawPoints;\n this.lineWidth = lineWidth || 1;\n this.pointSize = pointSize || 2;\n this.lineColor = lineColor || 'rgba(0, 255, 255, 1)';\n this.pointColor = pointColor || 'rgba(255, 0, 255, 1)';\n }\n}\n\nexport class DrawFaceLandmarks {\n public faceLandmarks: FaceLandmarks\n\n public options: DrawFaceLandmarksOptions\n\n constructor(\n faceLandmarks: FaceLandmarks,\n options: IDrawFaceLandmarksOptions = {},\n ) {\n this.faceLandmarks = faceLandmarks;\n this.options = new DrawFaceLandmarksOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const {\n drawLines, drawPoints, lineWidth, lineColor, pointSize, pointColor,\n } = this.options;\n\n if (drawLines && this.faceLandmarks instanceof FaceLandmarks68) {\n ctx.strokeStyle = lineColor;\n ctx.lineWidth = lineWidth;\n drawContour(ctx, this.faceLandmarks.getJawOutline());\n drawContour(ctx, this.faceLandmarks.getLeftEyeBrow());\n drawContour(ctx, this.faceLandmarks.getRightEyeBrow());\n drawContour(ctx, this.faceLandmarks.getNose());\n drawContour(ctx, this.faceLandmarks.getLeftEye(), true);\n drawContour(ctx, this.faceLandmarks.getRightEye(), true);\n drawContour(ctx, this.faceLandmarks.getMouth(), true);\n }\n\n if (drawPoints) {\n ctx.strokeStyle = pointColor;\n ctx.fillStyle = pointColor;\n\n const drawPoint = (pt: IPoint) => {\n ctx.beginPath();\n ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI);\n ctx.fill();\n };\n this.faceLandmarks.positions.forEach(drawPoint);\n }\n }\n}\n\nexport type DrawFaceLandmarksInput = FaceLandmarks | WithFaceLandmarks>\n\nexport function drawFaceLandmarks(\n canvasArg: string | HTMLCanvasElement,\n faceLandmarks: DrawFaceLandmarksInput | Array,\n) {\n const faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks];\n faceLandmarksArray.forEach((f) => {\n // eslint-disable-next-line no-nested-ternary\n const landmarks = f instanceof FaceLandmarks\n ? f\n : (isWithFaceLandmarks(f) ? f.landmarks : undefined);\n if (!landmarks) {\n throw new Error('drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof');\n }\n\n new DrawFaceLandmarks(landmarks).draw(canvasArg);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { seperateWeightMaps } from '../faceProcessor/util';\nimport { TinyXception } from '../xception/TinyXception';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport {\n AgeAndGenderPrediction, Gender, NetOutput, NetParams,\n} from './types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\n\nexport class AgeGenderNet extends NeuralNetwork {\n private _faceFeatureExtractor: TinyXception\n\n constructor(faceFeatureExtractor: TinyXception = new TinyXception(2)) {\n super('AgeGenderNet');\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): TinyXception {\n return this._faceFeatureExtractor;\n }\n\n public runNet(input: NetInput | tf.Tensor4D): NetOutput {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n\n const pooled = tf.avgPool(bottleneckFeatures, [7, 7], [2, 2], 'valid').as2D(bottleneckFeatures.shape[0], -1);\n const age = fullyConnectedLayer(pooled, params.fc.age).as1D();\n const gender = fullyConnectedLayer(pooled, params.fc.gender);\n return { age, gender };\n });\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): NetOutput {\n return tf.tidy(() => {\n const { age, gender } = this.runNet(input);\n return { age, gender: tf.softmax(gender) };\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictAgeAndGender(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n\n const ages = tf.unstack(out.age);\n const genders = tf.unstack(out.gender);\n const ageAndGenderTensors = ages.map((ageTensor, i) => ({\n ageTensor,\n genderTensor: genders[i],\n }));\n\n const predictionsByBatch = await Promise.all(\n ageAndGenderTensors.map(async ({ ageTensor, genderTensor }) => {\n const age = (await ageTensor.data())[0];\n const probMale = (await genderTensor.data())[0];\n const isMale = probMale > 0.5;\n const gender = isMale ? Gender.MALE : Gender.FEMALE;\n const genderProbability = isMale ? probMale : (1 - probMale);\n\n ageTensor.dispose();\n genderTensor.dispose();\n return { age, gender, genderProbability };\n }),\n );\n out.age.dispose();\n out.gender.dispose();\n\n return netInput.isBatchInput ? predictionsByBatch as AgeAndGenderPrediction[] : predictionsByBatch[0] as AgeAndGenderPrediction;\n }\n\n protected getDefaultModelName(): string {\n return 'age_gender_model';\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights);\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const classifierWeightSize = (512 * 1 + 1) + (512 * 2 + 2);\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams, depthwiseSeparableConv } from '../common/index';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { range } from '../utils/index';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction conv(x: tf.Tensor4D, params: ConvParams, stride: [number, number]): tf.Tensor4D {\n return tf.add(tf.conv2d(x, params.filters, stride, 'same'), params.bias);\n}\n\nfunction reductionBlock(x: tf.Tensor4D, params: ReductionBlockParams, isActivateInput: boolean = true): tf.Tensor4D {\n let out = isActivateInput ? tf.relu(x) : x;\n out = depthwiseSeparableConv(out, params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = tf.maxPool(out, [3, 3], [2, 2], 'same');\n out = tf.add(out, conv(x, params.expansion_conv, [2, 2]));\n return out;\n}\n\nfunction mainBlock(x: tf.Tensor4D, params: MainBlockParams): tf.Tensor4D {\n let out = depthwiseSeparableConv(tf.relu(x), params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv2, [1, 1]);\n out = tf.add(out, x);\n return out;\n}\n\nexport class TinyXception extends NeuralNetwork {\n private _numMainBlocks: number\n\n constructor(numMainBlocks: number) {\n super('TinyXception');\n this._numMainBlocks = numMainBlocks;\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyXception - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = tf.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));\n out = reductionBlock(out, params.entry_flow.reduction_block_0, false);\n out = reductionBlock(out, params.entry_flow.reduction_block_1);\n\n range(this._numMainBlocks, 0, 1).forEach((idx) => {\n out = mainBlock(out, params.middle_flow[`main_block_${idx}`]);\n });\n\n out = reductionBlock(out, params.exit_flow.reduction_block);\n out = tf.relu(depthwiseSeparableConv(out, params.exit_flow.separable_conv, [1, 1]));\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_xception_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this._numMainBlocks);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights, this._numMainBlocks);\n }\n}\n", "import { extractConvParamsFactory, extractSeparableConvParamsFactory, extractWeightsFactory } from '../common/index';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractReductionBlockParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(channels: number, mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParams(weights: Float32Array, numMainBlocks: number): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const entry_flow_conv_in = extractConvParams(3, 32, 3, 'entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams(32, 64, 'entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams(64, 128, 'entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(128, `middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams(128, 256, 'exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams(256, 512, 'exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { entry_flow, middle_flow, exit_flow },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n disposeUnusedWeightTensors,\n extractWeightEntryFactory,\n loadSeparableConvParamsFactory,\n ParamMapping,\n} from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractReductionBlockParams(mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(`${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(`${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n numMainBlocks: number,\n): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const entry_flow_conv_in = extractConvParams('entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams('entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams('entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(`middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams('exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams('exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params: { entry_flow, middle_flow, exit_flow }, paramMappings };\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const age = extractFCParams(512, 1, 'fc/age');\n const gender = extractFCParams(512, 2, 'fc/gender');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc: { age, gender } },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: {\n age: extractFcParams('fc/age'),\n gender: extractFcParams('fc/gender'),\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FCParams } from '../common/index';\n\n// eslint-disable-next-line no-shadow\nexport enum Gender {\n // eslint-disable-next-line no-unused-vars\n FEMALE = 'female',\n // eslint-disable-next-line no-unused-vars\n MALE = 'male'\n}\n\nexport type AgeAndGenderPrediction = {\n age: number\n gender: Gender\n genderProbability: number\n}\n\nexport type NetOutput = { age: tf.Tensor1D, gender: tf.Tensor2D }\n\nexport type NetParams = {\n fc: {\n age: FCParams\n gender: FCParams\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { IDimensions, Point } from '../classes/index';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractorParams, TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { isEven } from '../utils/index';\n\nexport abstract class FaceLandmark68NetBase<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends FaceProcessor {\n public postProcess(output: tf.Tensor2D, inputSize: number, originalDimensions: IDimensions[]): tf.Tensor2D {\n const inputDimensions = originalDimensions.map(({ width, height }) => {\n const scale = inputSize / Math.max(height, width);\n return {\n width: width * scale,\n height: height * scale,\n };\n });\n\n const batchSize = inputDimensions.length;\n\n return tf.tidy(() => {\n const createInterleavedTensor = (fillX: number, fillY: number) => tf.stack([tf.fill([68], fillX, 'float32'), tf.fill([68], fillY, 'float32')], 1).as2D(1, 136).as1D();\n\n // eslint-disable-next-line no-unused-vars\n const getPadding = (batchIdx: number, cond: (w: number, h: number) => boolean): number => {\n const { width, height } = inputDimensions[batchIdx];\n return cond(width, height) ? Math.abs(width - height) / 2 : 0;\n };\n\n const getPaddingX = (batchIdx: number) => getPadding(batchIdx, (w, h) => w < h);\n const getPaddingY = (batchIdx: number) => getPadding(batchIdx, (w, h) => h < w);\n\n const landmarkTensors = output\n .mul(tf.fill([batchSize, 136], inputSize, 'float32'))\n .sub(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n getPaddingX(batchIdx),\n getPaddingY(batchIdx),\n ))))\n .div(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n inputDimensions[batchIdx].width,\n inputDimensions[batchIdx].height,\n ))));\n\n return landmarkTensors as tf.Tensor2D;\n });\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n return tf.tidy(() => {\n const out = this.runNet(input);\n return this.postProcess(\n out,\n input.inputSize as number,\n input.inputDimensions.map(([height, width]) => ({ height, width })),\n );\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async detectLandmarks(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const landmarkTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const landmarksForBatch = await Promise.all(landmarkTensors.map(\n async (landmarkTensor, batchIdx) => {\n const landmarksArray = Array.from(await landmarkTensor.data());\n const xCoords = landmarksArray.filter((_, i) => isEven(i));\n const yCoords = landmarksArray.filter((_, i) => !isEven(i));\n\n return new FaceLandmarks68(\n Array(68).fill(0).map((_, i) => new Point(xCoords[i] as number, yCoords[i] as number)),\n {\n height: netInput.getInputHeight(batchIdx),\n width: netInput.getInputWidth(batchIdx),\n },\n );\n },\n ));\n\n landmarkTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput ? landmarksForBatch as FaceLandmarks68[] : landmarksForBatch[0] as FaceLandmarks68;\n }\n\n protected getClassifierChannelsOut(): number {\n return 136;\n }\n}\n", "import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68Net extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceLandmark68Net', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock3 } from './denseBlock';\nimport { extractParamsFromWeigthMapTiny } from './extractParamsFromWeigthMapTiny';\nimport { extractParamsTiny } from './extractParamsTiny';\nimport { IFaceFeatureExtractor, TinyFaceFeatureExtractorParams } from './types';\n\nexport class TinyFaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('TinyFaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyFaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock3(normalized, params.dense0, true);\n out = denseBlock3(out, params.dense1);\n out = denseBlock3(out, params.dense2);\n out = tf.avgPool(out, [14, 14], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_tiny_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMapTiny(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParamsTiny(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMapTiny(\n weightMap: tf.NamedTensorMap,\n): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock3Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock3Params('dense0', true),\n dense1: extractDenseBlock3Params('dense1'),\n dense2: extractDenseBlock3Params('dense2'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsTiny(weights: Float32Array): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock3Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock3Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock3Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock3Params(64, 128, 'dense2');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { dense0, dense1, dense2 },\n };\n}\n", "import { TinyFaceFeatureExtractor } from '../faceFeatureExtractor/TinyFaceFeatureExtractor';\nimport { TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68TinyNet extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: TinyFaceFeatureExtractor = new TinyFaceFeatureExtractor()) {\n super('FaceLandmark68TinyNet', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_tiny_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 128;\n }\n}\n", "import { FaceLandmark68Net } from './FaceLandmark68Net';\n\nexport * from './FaceLandmark68Net';\nexport * from './FaceLandmark68TinyNet';\n\nexport class FaceLandmarkNet extends FaceLandmark68Net {}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { convDown } from './convLayer';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { residual, residualDown } from './residualLayer';\nimport { NetParams } from './types';\n\nexport class FaceRecognitionNet extends NeuralNetwork {\n constructor() {\n super('FaceRecognitionNet');\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceRecognitionNet - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(150, true).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(150, true), 'float32');\n\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = convDown(normalized, params.conv32_down);\n out = tf.maxPool(out, 3, 2, 'valid');\n\n out = residual(out, params.conv32_1);\n out = residual(out, params.conv32_2);\n out = residual(out, params.conv32_3);\n\n out = residualDown(out, params.conv64_down);\n out = residual(out, params.conv64_1);\n out = residual(out, params.conv64_2);\n out = residual(out, params.conv64_3);\n\n out = residualDown(out, params.conv128_down);\n out = residual(out, params.conv128_1);\n out = residual(out, params.conv128_2);\n\n out = residualDown(out, params.conv256_down);\n out = residual(out, params.conv256_1);\n out = residual(out, params.conv256_2);\n out = residualDown(out, params.conv256_down_out);\n\n const globalAvg = out.mean([1, 2]) as tf.Tensor2D;\n const fullyConnected = tf.matMul(globalAvg, params.fc);\n\n return fullyConnected;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async computeFaceDescriptor(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n\n const faceDescriptorTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const faceDescriptorsForBatch = await Promise.all(faceDescriptorTensors.map(\n (t) => t.data(),\n )) as Float32Array[];\n\n faceDescriptorTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput\n ? faceDescriptorsForBatch\n : faceDescriptorsForBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_recognition_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { scale } from './scaleLayer';\nimport { ConvLayerParams } from './types';\n\nfunction convLayer(\n x: tf.Tensor4D,\n params: ConvLayerParams,\n strides: [number, number],\n withRelu: boolean,\n padding: 'valid' | 'same' = 'same',\n): tf.Tensor4D {\n const { filters, bias } = params.conv;\n\n let out = tf.conv2d(x, filters, strides, padding);\n out = tf.add(out, bias);\n out = scale(out, params.scale);\n return withRelu ? tf.relu(out) : out;\n}\n\nexport function conv(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], true);\n}\n\nexport function convNoRelu(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], false);\n}\n\nexport function convDown(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [2, 2], true, 'valid');\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ScaleLayerParams } from './types';\n\nexport function scale(x: tf.Tensor4D, params: ScaleLayerParams): tf.Tensor4D {\n return tf.add(tf.mul(x, params.weights), params.biases);\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n ConvParams, extractWeightsFactory, ExtractWeightsFunction, ParamMapping,\n} from '../common/index';\nimport { isFloat } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractFilterValues(numFilterValues: number, numFilters: number, filterSize: number): tf.Tensor4D {\n const weights = extractWeights(numFilterValues);\n const depth = weights.length / (numFilters * filterSize * filterSize);\n\n if (isFloat(depth)) {\n throw new Error(`depth has to be an integer: ${depth}, weights.length: ${weights.length}, numFilters: ${numFilters}, filterSize: ${filterSize}`);\n }\n\n return tf.tidy(\n () => tf.transpose(\n tf.tensor4d(weights, [numFilters, depth, filterSize, filterSize]),\n [2, 3, 1, 0],\n ),\n );\n }\n\n function extractConvParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams {\n const filters = extractFilterValues(numFilterValues, numFilters, filterSize);\n const bias = tf.tensor1d(extractWeights(numFilters));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n }\n\n function extractScaleLayerParams(numWeights: number, mappedPrefix: string): ScaleLayerParams {\n const weights = tf.tensor1d(extractWeights(numWeights));\n const biases = tf.tensor1d(extractWeights(numWeights));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/biases` },\n );\n\n return {\n weights,\n biases,\n };\n }\n\n function extractConvLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvLayerParams {\n const conv = extractConvParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv`);\n const scale = extractScaleLayerParams(numFilters, `${mappedPrefix}/scale`);\n\n return { conv, scale };\n }\n\n function extractResidualLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n isDown: boolean = false,\n ): ResidualLayerParams {\n const conv1 = extractConvLayerParams((isDown ? 0.5 : 1) * numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv1`);\n const conv2 = extractConvLayerParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv2`);\n\n return { conv1, conv2 };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const conv32_down = extractConvLayerParams(4704, 32, 7, 'conv32_down');\n const conv32_1 = extractResidualLayerParams(9216, 32, 3, 'conv32_1');\n const conv32_2 = extractResidualLayerParams(9216, 32, 3, 'conv32_2');\n const conv32_3 = extractResidualLayerParams(9216, 32, 3, 'conv32_3');\n\n const conv64_down = extractResidualLayerParams(36864, 64, 3, 'conv64_down', true);\n const conv64_1 = extractResidualLayerParams(36864, 64, 3, 'conv64_1');\n const conv64_2 = extractResidualLayerParams(36864, 64, 3, 'conv64_2');\n const conv64_3 = extractResidualLayerParams(36864, 64, 3, 'conv64_3');\n\n const conv128_down = extractResidualLayerParams(147456, 128, 3, 'conv128_down', true);\n const conv128_1 = extractResidualLayerParams(147456, 128, 3, 'conv128_1');\n const conv128_2 = extractResidualLayerParams(147456, 128, 3, 'conv128_2');\n\n const conv256_down = extractResidualLayerParams(589824, 256, 3, 'conv256_down', true);\n const conv256_1 = extractResidualLayerParams(589824, 256, 3, 'conv256_1');\n const conv256_2 = extractResidualLayerParams(589824, 256, 3, 'conv256_2');\n const conv256_down_out = extractResidualLayerParams(589824, 256, 3, 'conv256_down_out');\n\n const fc = tf.tidy(\n () => tf.transpose(tf.tensor2d(extractWeights(256 * 128), [128, 256]), [1, 0]),\n );\n paramMappings.push({ paramPath: 'fc' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping } from '../common/index';\nimport { isTensor2D } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractScaleLayerParams(prefix: string): ScaleLayerParams {\n const weights = extractWeightEntry(`${prefix}/scale/weights`, 1);\n const biases = extractWeightEntry(`${prefix}/scale/biases`, 1);\n\n return { weights, biases };\n }\n\n function extractConvLayerParams(prefix: string): ConvLayerParams {\n const filters = extractWeightEntry(`${prefix}/conv/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/conv/bias`, 1);\n const scale = extractScaleLayerParams(prefix);\n\n return { conv: { filters, bias }, scale };\n }\n\n function extractResidualLayerParams(prefix: string): ResidualLayerParams {\n return {\n conv1: extractConvLayerParams(`${prefix}/conv1`),\n conv2: extractConvLayerParams(`${prefix}/conv2`),\n };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const conv32_down = extractConvLayerParams('conv32_down');\n const conv32_1 = extractResidualLayerParams('conv32_1');\n const conv32_2 = extractResidualLayerParams('conv32_2');\n const conv32_3 = extractResidualLayerParams('conv32_3');\n\n const conv64_down = extractResidualLayerParams('conv64_down');\n const conv64_1 = extractResidualLayerParams('conv64_1');\n const conv64_2 = extractResidualLayerParams('conv64_2');\n const conv64_3 = extractResidualLayerParams('conv64_3');\n\n const conv128_down = extractResidualLayerParams('conv128_down');\n const conv128_1 = extractResidualLayerParams('conv128_1');\n const conv128_2 = extractResidualLayerParams('conv128_2');\n\n const conv256_down = extractResidualLayerParams('conv256_down');\n const conv256_1 = extractResidualLayerParams('conv256_1');\n const conv256_2 = extractResidualLayerParams('conv256_2');\n const conv256_down_out = extractResidualLayerParams('conv256_down_out');\n\n const { fc } = weightMap;\n paramMappings.push({ originalPath: 'fc', paramPath: 'fc' });\n\n if (!isTensor2D(fc)) {\n throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${fc}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { conv, convDown, convNoRelu } from './convLayer';\nimport { ResidualLayerParams } from './types';\n\nexport function residual(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = conv(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n out = tf.add(out, x);\n out = tf.relu(out);\n return out;\n}\n\nexport function residualDown(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = convDown(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n\n let pooled = tf.avgPool(x, 2, 2, 'valid') as tf.Tensor4D;\n const zeros = tf.zeros(pooled.shape);\n const isPad = pooled.shape[3] !== out.shape[3];\n const isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2];\n\n if (isAdjustShape) {\n const padShapeX = [...out.shape] as [number, number, number, number];\n padShapeX[1] = 1;\n const zerosW = tf.zeros(padShapeX);\n out = tf.concat([out, zerosW], 1);\n\n const padShapeY = [...out.shape] as [number, number, number, number];\n padShapeY[2] = 1;\n const zerosH = tf.zeros(padShapeY);\n out = tf.concat([out, zerosH], 2);\n }\n\n pooled = isPad ? tf.concat([pooled, zeros], 3) : pooled;\n out = tf.add(pooled, out) as tf.Tensor4D;\n\n out = tf.relu(out);\n return out;\n}\n", "import { FaceRecognitionNet } from './FaceRecognitionNet';\n\nexport * from './FaceRecognitionNet';\n\nexport function createFaceRecognitionNet(weights: Float32Array) {\n const net = new FaceRecognitionNet();\n net.extractWeights(weights);\n return net;\n}\n", "export type WithFaceDescriptor = TSource & {\n descriptor: Float32Array\n}\n\nexport function extendWithFaceDescriptor<\n TSource\n>(\n sourceObj: TSource,\n descriptor: Float32Array,\n): WithFaceDescriptor {\n const extension = { descriptor };\n return { ...sourceObj, ...extension };\n}\n", "export type WithAge = TSource & {\n age: number\n}\n\nexport function isWithAge(obj: any): obj is WithAge<{}> {\n return typeof obj.age === 'number';\n}\n\nexport function extendWithAge<\n TSource\n>(\n sourceObj: TSource,\n age: number,\n): WithAge {\n const extension = { age };\n return { ...sourceObj, ...extension };\n}\n", "import { Gender } from '../ageGenderNet/types';\nimport { isValidProbablitiy } from '../utils/index';\n\nexport type WithGender = TSource & {\n gender: Gender\n genderProbability: number\n}\n\nexport function isWithGender(obj: any): obj is WithGender<{}> {\n return (obj.gender === Gender.MALE || obj.gender === Gender.FEMALE)\n && isValidProbablitiy(obj.genderProbability);\n}\n\nexport function extendWithGender<\n TSource\n>(\n sourceObj: TSource,\n gender: Gender,\n genderProbability: number,\n): WithGender {\n const extension = { gender, genderProbability };\n return { ...sourceObj, ...extension };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { mobileNetV1 } from './mobileNetV1';\nimport { nonMaxSuppression } from './nonMaxSuppression';\nimport { outputLayer } from './outputLayer';\nimport { predictionLayer } from './predictionLayer';\nimport { ISsdMobilenetv1Options, SsdMobilenetv1Options } from './SsdMobilenetv1Options';\nimport { NetParams } from './types';\n\nexport class SsdMobilenetv1 extends NeuralNetwork {\n constructor() {\n super('SsdMobilenetv1');\n }\n\n public forwardInput(input: NetInput) {\n const { params } = this;\n\n if (!params) {\n throw new Error('SsdMobilenetv1 - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(512, false).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(512, false), 'float32');\n\n const x = tf.sub(tf.mul(batchTensor, tf.scalar(0.007843137718737125)), tf.scalar(1)) as tf.Tensor4D;\n const features = mobileNetV1(x, params.mobilenetv1);\n\n const {\n boxPredictions,\n classPredictions,\n } = predictionLayer(features.out, features.conv11, params.prediction_layer);\n\n return outputLayer(boxPredictions, classPredictions, params.output_layer);\n });\n }\n\n public async forward(input: TNetInput) {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async locateFaces(\n input: TNetInput,\n options: ISsdMobilenetv1Options = {},\n ): Promise {\n const { maxResults, minConfidence } = new SsdMobilenetv1Options(options);\n\n const netInput = await toNetInput(input);\n\n const {\n boxes: _boxes,\n scores: _scores,\n } = this.forwardInput(netInput);\n\n // TODO batches\n const boxes = _boxes[0];\n const scores = _scores[0];\n for (let i = 1; i < _boxes.length; i++) {\n _boxes[i].dispose();\n _scores[i].dispose();\n }\n\n // TODO find a better way to filter by minConfidence\n const scoresData = Array.from(await scores.data());\n\n const iouThreshold = 0.5;\n const indices = nonMaxSuppression(\n boxes,\n scoresData as number[],\n maxResults,\n iouThreshold,\n minConfidence,\n );\n\n const reshapedDims = netInput.getReshapedInputDimensions(0);\n const inputSize = netInput.inputSize as number;\n const padX = inputSize / reshapedDims.width;\n const padY = inputSize / reshapedDims.height;\n\n const boxesData = boxes.arraySync();\n const results = indices\n .map((idx) => {\n const [top, bottom] = [\n Math.max(0, boxesData[idx][0]),\n Math.min(1.0, boxesData[idx][2]),\n ].map((val) => val * padY);\n const [left, right] = [\n Math.max(0, boxesData[idx][1]),\n Math.min(1.0, boxesData[idx][3]),\n ].map((val) => val * padX);\n return new FaceDetection(\n scoresData[idx] as number,\n new Rect(\n left,\n top,\n right - left,\n bottom - top,\n ),\n {\n height: netInput.getInputHeight(0),\n width: netInput.getInputWidth(0),\n },\n );\n });\n\n boxes.dispose();\n scores.dispose();\n\n return results;\n }\n\n protected getDefaultModelName(): string {\n return 'ssd_mobilenetv1_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n ExtractWeightsFunction, ParamMapping, ConvParams, extractWeightsFactory,\n} from '../common/index';\nimport {\n MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractDepthwiseConvParams(numChannels: number, mappedPrefix: string): MobileNetV1.DepthwiseConvParams {\n const filters = tf.tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]);\n const batch_norm_scale = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_offset = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_mean = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_variance = tf.tensor1d(extractWeights(numChannels));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/batch_norm_scale` },\n { paramPath: `${mappedPrefix}/batch_norm_offset` },\n { paramPath: `${mappedPrefix}/batch_norm_mean` },\n { paramPath: `${mappedPrefix}/batch_norm_variance` },\n );\n\n return {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n };\n }\n\n function extractConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n isPointwiseConv?: boolean,\n ): ConvParams {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/${isPointwiseConv ? 'batch_norm_offset' : 'bias'}` },\n );\n\n return { filters, bias };\n }\n\n function extractPointwiseConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): PointwiseConvParams {\n const {\n filters,\n bias,\n } = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true);\n\n return {\n filters,\n batch_norm_offset: bias,\n };\n }\n\n function extractConvPairParams(\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): MobileNetV1.ConvPairParams {\n const depthwise_conv = extractDepthwiseConvParams(channelsIn, `${mappedPrefix}/depthwise_conv`);\n const pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/pointwise_conv`);\n\n return { depthwise_conv, pointwise_conv };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n const conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0');\n\n const conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1');\n const conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2');\n const conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3');\n const conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4');\n const conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5');\n const conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6');\n const conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7');\n const conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8');\n const conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9');\n const conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10');\n const conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11');\n const conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12');\n const conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13');\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n conv_8,\n conv_9,\n conv_10,\n conv_11,\n conv_12,\n conv_13,\n };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n const conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0');\n const conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1');\n const conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2');\n const conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3');\n const conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4');\n const conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5');\n const conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6');\n const conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7');\n\n const box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor');\n const class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor');\n const box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor');\n const class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor');\n const box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor');\n const class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor');\n const box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor');\n const class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor');\n const box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor');\n const class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor');\n const box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor');\n const class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor');\n\n const box_predictor_0 = {\n box_encoding_predictor: box_encoding_0_predictor,\n class_predictor: class_predictor_0,\n };\n const box_predictor_1 = {\n box_encoding_predictor: box_encoding_1_predictor,\n class_predictor: class_predictor_1,\n };\n const box_predictor_2 = {\n box_encoding_predictor: box_encoding_2_predictor,\n class_predictor: class_predictor_2,\n };\n const box_predictor_3 = {\n box_encoding_predictor: box_encoding_3_predictor,\n class_predictor: class_predictor_3,\n };\n const box_predictor_4 = {\n box_encoding_predictor: box_encoding_4_predictor,\n class_predictor: class_predictor_4,\n };\n const box_predictor_5 = {\n box_encoding_predictor: box_encoding_5_predictor,\n class_predictor: class_predictor_5,\n };\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n box_predictor_0,\n box_predictor_1,\n box_predictor_2,\n box_predictor_3,\n box_predictor_4,\n box_predictor_5,\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const mobilenetv1 = extractMobilenetV1Params();\n const prediction_layer = extractPredictionLayerParams();\n const extra_dim = tf.tensor3d(\n extractWeights(5118 * 4),\n [1, 5118, 4],\n );\n const output_layer = {\n extra_dim,\n };\n\n paramMappings.push({ paramPath: 'output_layer/extra_dim' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n params: {\n mobilenetv1,\n prediction_layer,\n output_layer,\n },\n paramMappings,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport {\n ConvParams, disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping,\n} from '../common/index';\nimport { isTensor3D } from '../utils/index';\nimport {\n BoxPredictionParams, MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractPointwiseConvParams(prefix: string, idx: number, mappedPrefix: string): PointwiseConvParams {\n const filters = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/weights`, 4, `${mappedPrefix}/filters`);\n const batch_norm_offset = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/convolution_bn_offset`, 1, `${mappedPrefix}/batch_norm_offset`);\n\n return { filters, batch_norm_offset };\n }\n\n function extractConvPairParams(idx: number): MobileNetV1.ConvPairParams {\n const mappedPrefix = `mobilenetv1/conv_${idx}`;\n const prefixDepthwiseConv = `MobilenetV1/Conv2d_${idx}_depthwise`;\n const mappedPrefixDepthwiseConv = `${mappedPrefix}/depthwise_conv`;\n const mappedPrefixPointwiseConv = `${mappedPrefix}/pointwise_conv`;\n\n const filters = extractWeightEntry(`${prefixDepthwiseConv}/depthwise_weights`, 4, `${mappedPrefixDepthwiseConv}/filters`);\n const batch_norm_scale = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/gamma`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_scale`);\n const batch_norm_offset = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/beta`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_offset`);\n const batch_norm_mean = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_mean`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_mean`);\n const batch_norm_variance = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_variance`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_variance`);\n\n return {\n depthwise_conv: {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n },\n pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv),\n };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n return {\n conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'),\n conv_1: extractConvPairParams(1),\n conv_2: extractConvPairParams(2),\n conv_3: extractConvPairParams(3),\n conv_4: extractConvPairParams(4),\n conv_5: extractConvPairParams(5),\n conv_6: extractConvPairParams(6),\n conv_7: extractConvPairParams(7),\n conv_8: extractConvPairParams(8),\n conv_9: extractConvPairParams(9),\n conv_10: extractConvPairParams(10),\n conv_11: extractConvPairParams(11),\n conv_12: extractConvPairParams(12),\n conv_13: extractConvPairParams(13),\n };\n }\n\n function extractConvParams(prefix: string, mappedPrefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/weights`, 4, `${mappedPrefix}/filters`);\n const bias = extractWeightEntry(`${prefix}/biases`, 1, `${mappedPrefix}/bias`);\n\n return { filters, bias };\n }\n\n function extractBoxPredictorParams(idx: number): BoxPredictionParams {\n const box_encoding_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/BoxEncodingPredictor`,\n `prediction_layer/box_predictor_${idx}/box_encoding_predictor`,\n );\n const class_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/ClassPredictor`,\n `prediction_layer/box_predictor_${idx}/class_predictor`,\n );\n\n return { box_encoding_predictor, class_predictor };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n return {\n conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'),\n conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'),\n conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'),\n conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'),\n conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'),\n conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'),\n conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'),\n conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'),\n box_predictor_0: extractBoxPredictorParams(0),\n box_predictor_1: extractBoxPredictorParams(1),\n box_predictor_2: extractBoxPredictorParams(2),\n box_predictor_3: extractBoxPredictorParams(3),\n box_predictor_4: extractBoxPredictorParams(4),\n box_predictor_5: extractBoxPredictorParams(5),\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const extra_dim = weightMap['Output/extra_dim'];\n paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' });\n\n if (!isTensor3D(extra_dim)) {\n throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${extra_dim}`);\n }\n\n const params = {\n mobilenetv1: extractMobilenetV1Params(),\n prediction_layer: extractPredictionLayerParams(),\n output_layer: {\n extra_dim,\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { MobileNetV1 } from './types';\n\nconst epsilon = 0.0010000000474974513;\n\nfunction depthwiseConvLayer(\n x: tf.Tensor4D,\n params: MobileNetV1.DepthwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.depthwiseConv2d(x, params.filters, strides, 'same');\n out = tf.batchNorm(\n out,\n params.batch_norm_mean,\n params.batch_norm_variance,\n params.batch_norm_offset,\n params.batch_norm_scale,\n epsilon,\n );\n return tf.clipByValue(out, 0, 6);\n });\n}\n\nfunction getStridesForLayerIdx(layerIdx: number): [number, number] {\n return [2, 4, 6, 12].some((idx) => idx === layerIdx) ? [2, 2] : [1, 1];\n}\n\nexport function mobileNetV1(x: tf.Tensor4D, params: MobileNetV1.Params) {\n return tf.tidy(() => {\n let conv11;\n let out = pointwiseConvLayer(x, params.conv_0, [2, 2]);\n\n const convPairParams = [\n params.conv_1,\n params.conv_2,\n params.conv_3,\n params.conv_4,\n params.conv_5,\n params.conv_6,\n params.conv_7,\n params.conv_8,\n params.conv_9,\n params.conv_10,\n params.conv_11,\n params.conv_12,\n params.conv_13,\n ];\n\n convPairParams.forEach((param, i) => {\n const layerIdx = i + 1;\n const depthwiseConvStrides = getStridesForLayerIdx(layerIdx);\n out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides);\n out = pointwiseConvLayer(out, param.pointwise_conv, [1, 1]);\n if (layerIdx === 11) {\n conv11 = out;\n }\n });\n\n if (conv11 === null) {\n throw new Error('mobileNetV1 - output of conv layer 11 is null');\n }\n\n return {\n out,\n conv11: conv11 as any,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { PointwiseConvParams } from './types';\n\nexport function pointwiseConvLayer(\n x: tf.Tensor4D,\n params: PointwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.conv2d(x, params.filters, strides, 'same');\n out = tf.add(out, params.batch_norm_offset);\n return tf.clipByValue(out, 0, 6);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nfunction IOU(boxes: tf.Tensor2D, i: number, j: number) {\n const boxesData = boxes.arraySync();\n const yminI = Math.min(boxesData[i][0], boxesData[i][2]);\n const xminI = Math.min(boxesData[i][1], boxesData[i][3]);\n const ymaxI = Math.max(boxesData[i][0], boxesData[i][2]);\n const xmaxI = Math.max(boxesData[i][1], boxesData[i][3]);\n const yminJ = Math.min(boxesData[j][0], boxesData[j][2]);\n const xminJ = Math.min(boxesData[j][1], boxesData[j][3]);\n const ymaxJ = Math.max(boxesData[j][0], boxesData[j][2]);\n const xmaxJ = Math.max(boxesData[j][1], boxesData[j][3]);\n const areaI = (ymaxI - yminI) * (xmaxI - xminI);\n const areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ);\n if (areaI <= 0 || areaJ <= 0) {\n return 0.0;\n }\n const intersectionYmin = Math.max(yminI, yminJ);\n const intersectionXmin = Math.max(xminI, xminJ);\n const intersectionYmax = Math.min(ymaxI, ymaxJ);\n const intersectionXmax = Math.min(xmaxI, xmaxJ);\n const intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0)\n * Math.max(intersectionXmax - intersectionXmin, 0.0);\n return intersectionArea / (areaI + areaJ - intersectionArea);\n}\n\nexport function nonMaxSuppression(\n boxes: tf.Tensor2D,\n scores: number[],\n maxOutputSize: number,\n iouThreshold: number,\n scoreThreshold: number,\n): number[] {\n const numBoxes = boxes.shape[0];\n const outputSize = Math.min(\n maxOutputSize,\n numBoxes,\n );\n\n const candidates = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .filter((c) => c.score > scoreThreshold)\n .sort((c1, c2) => c2.score - c1.score);\n\n const suppressFunc = (x: number) => (x <= iouThreshold ? 1 : 0);\n\n const selected: number[] = [];\n\n candidates.forEach((c) => {\n if (selected.length >= outputSize) {\n return;\n }\n const originalScore = c.score;\n\n for (let j = selected.length - 1; j >= 0; --j) {\n const iou = IOU(boxes, c.boxIndex, selected[j]);\n if (iou === 0.0) continue;\n c.score *= suppressFunc(iou);\n if (c.score <= scoreThreshold) break;\n }\n if (originalScore === c.score) {\n selected.push(c.boxIndex);\n }\n });\n\n return selected;\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { OutputLayerParams } from './types';\n\nfunction getCenterCoordinatesAndSizesLayer(x: tf.Tensor2D) {\n const vec = tf.unstack(tf.transpose(x, [1, 0]));\n\n const sizes = [\n tf.sub(vec[2], vec[0]),\n tf.sub(vec[3], vec[1]),\n ];\n\n const centers = [\n tf.add(vec[0], tf.div(sizes[0], tf.scalar(2))),\n tf.add(vec[1], tf.div(sizes[1], tf.scalar(2))),\n ];\n\n return {\n sizes,\n centers,\n };\n}\n\nfunction decodeBoxesLayer(x0: tf.Tensor2D, x1: tf.Tensor2D) {\n const {\n sizes,\n centers,\n } = getCenterCoordinatesAndSizesLayer(x0);\n\n const vec = tf.unstack(tf.transpose(x1, [1, 0]));\n\n const div0_out = tf.div(tf.mul(tf.exp(tf.div(vec[2], tf.scalar(5))), sizes[0]), tf.scalar(2));\n const add0_out = tf.add(tf.mul(tf.div(vec[0], tf.scalar(10)), sizes[0]), centers[0]);\n\n const div1_out = tf.div(tf.mul(tf.exp(tf.div(vec[3], tf.scalar(5))), sizes[1]), tf.scalar(2));\n const add1_out = tf.add(tf.mul(tf.div(vec[1], tf.scalar(10)), sizes[1]), centers[1]);\n\n return tf.transpose(\n tf.stack([\n tf.sub(add0_out, div0_out),\n tf.sub(add1_out, div1_out),\n tf.add(add0_out, div0_out),\n tf.add(add1_out, div1_out),\n ]),\n [1, 0],\n );\n}\n\nexport function outputLayer(\n boxPredictions: tf.Tensor4D,\n classPredictions: tf.Tensor4D,\n params: OutputLayerParams,\n) {\n return tf.tidy(() => {\n const batchSize = boxPredictions.shape[0];\n\n let boxes = decodeBoxesLayer(\n tf.reshape(tf.tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]) as tf.Tensor2D,\n tf.reshape(boxPredictions, [-1, 4]) as tf.Tensor2D,\n );\n boxes = tf.reshape(\n boxes,\n [batchSize, (boxes.shape[0] / batchSize), 4],\n );\n\n const scoresAndClasses = tf.sigmoid(tf.slice(classPredictions, [0, 0, 1], [-1, -1, -1]));\n let scores = tf.slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]) as tf.Tensor;\n\n scores = tf.reshape(\n scores,\n [batchSize, scores.shape[1] as number],\n );\n\n const boxesByBatch = tf.unstack(boxes) as tf.Tensor2D[];\n const scoresByBatch = tf.unstack(scores) as tf.Tensor1D[];\n\n return {\n boxes: boxesByBatch,\n scores: scoresByBatch,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { boxPredictionLayer } from './boxPredictionLayer';\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { PredictionLayerParams } from './types';\n\nexport function predictionLayer(\n x: tf.Tensor4D,\n conv11: tf.Tensor4D,\n params: PredictionLayerParams,\n) {\n return tf.tidy(() => {\n const conv0 = pointwiseConvLayer(x, params.conv_0, [1, 1]);\n const conv1 = pointwiseConvLayer(conv0, params.conv_1, [2, 2]);\n const conv2 = pointwiseConvLayer(conv1, params.conv_2, [1, 1]);\n const conv3 = pointwiseConvLayer(conv2, params.conv_3, [2, 2]);\n const conv4 = pointwiseConvLayer(conv3, params.conv_4, [1, 1]);\n const conv5 = pointwiseConvLayer(conv4, params.conv_5, [2, 2]);\n const conv6 = pointwiseConvLayer(conv5, params.conv_6, [1, 1]);\n const conv7 = pointwiseConvLayer(conv6, params.conv_7, [2, 2]);\n\n const boxPrediction0 = boxPredictionLayer(conv11, params.box_predictor_0);\n const boxPrediction1 = boxPredictionLayer(x, params.box_predictor_1);\n const boxPrediction2 = boxPredictionLayer(conv1, params.box_predictor_2);\n const boxPrediction3 = boxPredictionLayer(conv3, params.box_predictor_3);\n const boxPrediction4 = boxPredictionLayer(conv5, params.box_predictor_4);\n const boxPrediction5 = boxPredictionLayer(conv7, params.box_predictor_5);\n\n const boxPredictions = tf.concat([\n boxPrediction0.boxPredictionEncoding,\n boxPrediction1.boxPredictionEncoding,\n boxPrediction2.boxPredictionEncoding,\n boxPrediction3.boxPredictionEncoding,\n boxPrediction4.boxPredictionEncoding,\n boxPrediction5.boxPredictionEncoding,\n ], 1) as tf.Tensor4D;\n\n const classPredictions = tf.concat([\n boxPrediction0.classPrediction,\n boxPrediction1.classPrediction,\n boxPrediction2.classPrediction,\n boxPrediction3.classPrediction,\n boxPrediction4.classPrediction,\n boxPrediction5.classPrediction,\n ], 1) as tf.Tensor4D;\n\n return {\n boxPredictions,\n classPredictions,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { convLayer } from '../common/index';\nimport { BoxPredictionParams } from './types';\n\nexport function boxPredictionLayer(\n x: tf.Tensor4D,\n params: BoxPredictionParams,\n) {\n return tf.tidy(() => {\n const batchSize = x.shape[0];\n\n const boxPredictionEncoding = tf.reshape(\n convLayer(x, params.box_encoding_predictor),\n [batchSize, -1, 1, 4],\n );\n const classPrediction = tf.reshape(\n convLayer(x, params.class_predictor),\n [batchSize, -1, 3],\n );\n\n return {\n boxPredictionEncoding,\n classPrediction,\n };\n });\n}\n", "export interface ISsdMobilenetv1Options {\n minConfidence?: number\n maxResults?: number\n}\n\nexport class SsdMobilenetv1Options {\n protected _name: string = 'SsdMobilenetv1Options'\n\n private _minConfidence: number\n\n private _maxResults: number\n\n constructor({ minConfidence, maxResults }: ISsdMobilenetv1Options = {}) {\n this._minConfidence = minConfidence || 0.5;\n this._maxResults = maxResults || 100;\n\n if (typeof this._minConfidence !== 'number' || this._minConfidence <= 0 || this._minConfidence >= 1) {\n throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);\n }\n\n if (typeof this._maxResults !== 'number') {\n throw new Error(`${this._name} - expected maxResults to be a number`);\n }\n }\n\n get minConfidence(): number { return this._minConfidence; }\n\n get maxResults(): number { return this._maxResults; }\n}\n", "import { SsdMobilenetv1 } from './SsdMobilenetv1';\n\nexport * from './SsdMobilenetv1';\nexport * from './SsdMobilenetv1Options';\n\nexport function createSsdMobilenetv1(weights: Float32Array) {\n const net = new SsdMobilenetv1();\n net.extractWeights(weights);\n return net;\n}\n\nexport function createFaceDetectionNet(weights: Float32Array) {\n return createSsdMobilenetv1(weights);\n}\n\n// alias for backward compatibily\nexport class FaceDetectionNet extends SsdMobilenetv1 {}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(0.738768, 0.874946),\n new Point(2.42204, 2.65704),\n new Point(4.30971, 7.04493),\n new Point(10.246, 4.59428),\n new Point(12.6868, 11.8741),\n];\n\nexport const BOX_ANCHORS_SEPARABLE = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB_SEPARABLE: [number, number, number] = [117.001, 114.697, 97.404];\n\nexport const DEFAULT_MODEL_NAME = 'tiny_yolov2_model';\nexport const DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model';\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { BoundingBox } from '../classes/BoundingBox';\nimport { Dimensions } from '../classes/Dimensions';\nimport { ObjectDetection } from '../classes/ObjectDetection';\nimport { convLayer } from '../common/index';\nimport { ConvParams, SeparableConvParams } from '../common/types';\nimport { toNetInput } from '../dom/index';\nimport { NetInput } from '../dom/NetInput';\nimport { TNetInput } from '../dom/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { sigmoid } from '../ops/index';\nimport { nonMaxSuppression } from '../ops/nonMaxSuppression';\nimport { normalize } from '../ops/normalize';\nimport { TinyYolov2Config, validateConfig } from './config';\nimport { convWithBatchNorm } from './convWithBatchNorm';\nimport { depthwiseSeparableConv } from './depthwiseSeparableConv';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { leaky } from './leaky';\nimport { ITinyYolov2Options, TinyYolov2Options } from './TinyYolov2Options';\nimport { DefaultTinyYolov2NetParams, MobilenetParams, TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2Base extends NeuralNetwork {\n public static DEFAULT_FILTER_SIZES = [\n 3, 16, 32, 64, 128, 256, 512, 1024, 1024,\n ]\n\n private _config: TinyYolov2Config\n\n constructor(config: TinyYolov2Config) {\n super('TinyYolov2');\n validateConfig(config);\n this._config = config;\n }\n\n public get config(): TinyYolov2Config {\n return this._config;\n }\n\n public get withClassScores(): boolean {\n return this.config.withClassScores || this.config.classes.length > 1;\n }\n\n public get boxEncodingSize(): number {\n return 5 + (this.withClassScores ? this.config.classes.length : 0);\n }\n\n public runTinyYolov2(x: tf.Tensor4D, params: DefaultTinyYolov2NetParams): tf.Tensor4D {\n let out = convWithBatchNorm(x, params.conv0);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = convWithBatchNorm(out, params.conv6);\n out = convWithBatchNorm(out, params.conv7);\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public runMobilenet(x: tf.Tensor4D, params: MobilenetParams): tf.Tensor4D {\n let out = this.config.isFirstLayerConv2d\n ? leaky(convLayer(x, params.conv0 as ConvParams, 'valid', false))\n : depthwiseSeparableConv(x, params.conv0 as SeparableConvParams);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = params.conv6 ? depthwiseSeparableConv(out, params.conv6) : out;\n out = params.conv7 ? depthwiseSeparableConv(out, params.conv7) : out;\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public forwardInput(input: NetInput, inputSize: number): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyYolov2 - load model before inference');\n }\n\n return tf.tidy(() => {\n // let batchTensor = input.toBatchTensor(inputSize, false).toFloat()\n let batchTensor = tf.cast(input.toBatchTensor(inputSize, false), 'float32');\n batchTensor = this.config.meanRgb\n ? normalize(batchTensor, this.config.meanRgb)\n : batchTensor;\n batchTensor = batchTensor.div(tf.scalar(256)) as tf.Tensor4D;\n\n return this.config.withSeparableConvs\n ? this.runMobilenet(batchTensor, params as MobilenetParams)\n : this.runTinyYolov2(batchTensor, params as DefaultTinyYolov2NetParams);\n });\n }\n\n public async forward(input: TNetInput, inputSize: number): Promise {\n return this.forwardInput(await toNetInput(input), inputSize);\n }\n\n public async detect(input: TNetInput, forwardParams: ITinyYolov2Options = {}): Promise {\n const { inputSize, scoreThreshold } = new TinyYolov2Options(forwardParams);\n\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput, inputSize);\n const out0 = tf.tidy(() => tf.unstack(out)[0].expandDims()) as tf.Tensor4D;\n\n const inputDimensions = {\n width: netInput.getInputWidth(0),\n height: netInput.getInputHeight(0),\n };\n\n const results = await this.extractBoxes(out0, netInput.getReshapedInputDimensions(0), scoreThreshold);\n out.dispose();\n out0.dispose();\n\n const boxes = results.map((res) => res.box);\n const scores = results.map((res) => res.score);\n const classScores = results.map((res) => res.classScore);\n const classNames = results.map((res) => this.config.classes[res.label]);\n\n const indices = nonMaxSuppression(\n boxes.map((box) => box.rescale(inputSize)),\n scores,\n this.config.iouThreshold,\n true,\n );\n\n const detections = indices.map((idx) => new ObjectDetection(\n scores[idx],\n classScores[idx],\n classNames[idx],\n boxes[idx],\n inputDimensions,\n ));\n\n return detections;\n }\n\n protected getDefaultModelName(): string {\n return '';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this.config);\n }\n\n protected extractParams(weights: Float32Array) {\n const filterSizes = this.config.filterSizes || TinyYolov2Base.DEFAULT_FILTER_SIZES;\n\n const numFilters = filterSizes ? filterSizes.length : undefined;\n if (numFilters !== 7 && numFilters !== 8 && numFilters !== 9) {\n throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${numFilters} filterSizes in config`);\n }\n return extractParams(weights, this.config, this.boxEncodingSize, filterSizes);\n }\n\n protected async extractBoxes(\n outputTensor: tf.Tensor4D,\n inputBlobDimensions: Dimensions,\n scoreThreshold?: number,\n ) {\n const { width, height } = inputBlobDimensions;\n const inputSize = Math.max(width, height);\n const correctionFactorX = inputSize / width;\n const correctionFactorY = inputSize / height;\n\n const numCells = outputTensor.shape[1];\n const numBoxes = this.config.anchors.length;\n\n const [boxesTensor, scoresTensor, classScoresTensor] = tf.tidy(() => {\n const reshaped = outputTensor.reshape([numCells, numCells, numBoxes, this.boxEncodingSize]);\n\n const boxes = reshaped.slice([0, 0, 0, 0], [numCells, numCells, numBoxes, 4]);\n const scores = reshaped.slice([0, 0, 0, 4], [numCells, numCells, numBoxes, 1]);\n const classScores = this.withClassScores\n ? tf.softmax(reshaped.slice([0, 0, 0, 5], [numCells, numCells, numBoxes, this.config.classes.length]), 3)\n : tf.scalar(0);\n return [boxes, scores, classScores];\n });\n\n const results = [] as any;\n\n const scoresData = await scoresTensor.array();\n const boxesData = await boxesTensor.array();\n for (let row = 0; row < numCells; row++) {\n for (let col = 0; col < numCells; col++) {\n for (let anchor = 0; anchor < numBoxes; anchor++) {\n const score = sigmoid(scoresData[row][col][anchor][0]);\n if (!scoreThreshold || score > scoreThreshold) {\n const ctX = ((col + sigmoid(boxesData[row][col][anchor][0])) / numCells) * correctionFactorX;\n const ctY = ((row + sigmoid(boxesData[row][col][anchor][1])) / numCells) * correctionFactorY;\n const widthLocal = ((Math.exp(boxesData[row][col][anchor][2]) * this.config.anchors[anchor].x) / numCells) * correctionFactorX;\n const heightLocal = ((Math.exp(boxesData[row][col][anchor][3]) * this.config.anchors[anchor].y) / numCells) * correctionFactorY;\n\n const x = (ctX - (widthLocal / 2));\n const y = (ctY - (heightLocal / 2));\n\n const pos = { row, col, anchor };\n const { classScore, label } = this.withClassScores\n ? await this.extractPredictedClass(classScoresTensor as tf.Tensor4D, pos)\n : { classScore: 1, label: 0 };\n\n results.push({\n box: new BoundingBox(x, y, x + widthLocal, y + heightLocal),\n score,\n classScore: score * classScore,\n label,\n ...pos,\n });\n }\n }\n }\n }\n\n boxesTensor.dispose();\n scoresTensor.dispose();\n classScoresTensor.dispose();\n\n return results;\n }\n\n private async extractPredictedClass(classesTensor: tf.Tensor4D, pos: { row: number, col: number, anchor: number }) {\n const { row, col, anchor } = pos;\n const classesData = await classesTensor.array();\n return Array(this.config.classes.length).fill(0)\n .map((_, i) => classesData[row][col][anchor][i])\n .map((classScore, label) => ({\n classScore,\n label,\n }))\n .reduce((max, curr) => (max.classScore > curr.classScore ? max : curr));\n }\n}\n", "import { Point } from '../classes/Point';\n\nexport type TinyYolov2Config = {\n withSeparableConvs: boolean\n iouThreshold: number\n anchors: Point[]\n classes: string[]\n meanRgb?: [number, number, number]\n withClassScores?: boolean,\n filterSizes?: number[]\n isFirstLayerConv2d?: boolean\n}\n\nconst isNumber = (arg: any) => typeof arg === 'number';\n\nexport function validateConfig(config: any) {\n if (!config) {\n throw new Error(`invalid config: ${config}`);\n }\n\n if (typeof config.withSeparableConvs !== 'boolean') {\n throw new Error(`config.withSeparableConvs has to be a boolean, have: ${config.withSeparableConvs}`);\n }\n\n if (!isNumber(config.iouThreshold) || config.iouThreshold < 0 || config.iouThreshold > 1.0) {\n throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${config.iouThreshold}`);\n }\n\n if (\n !Array.isArray(config.classes)\n || !config.classes.length\n || !config.classes.every((c: any) => typeof c === 'string')\n ) {\n throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(config.classes)}`);\n }\n\n if (\n !Array.isArray(config.anchors)\n || !config.anchors.length\n || !config.anchors.map((a: any) => a || {}).every((a: any) => isNumber(a.x) && isNumber(a.y))\n ) {\n throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(config.anchors)}`);\n }\n\n if (config.meanRgb && (\n !Array.isArray(config.meanRgb)\n || config.meanRgb.length !== 3\n || !config.meanRgb.every(isNumber)\n )) {\n throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(config.meanRgb)}`);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { leaky } from './leaky';\nimport { ConvWithBatchNorm } from './types';\n\nexport function convWithBatchNorm(x: tf.Tensor4D, params: ConvWithBatchNorm): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.conv2d(out, params.conv.filters, [1, 1], 'valid');\n out = tf.sub(out, params.bn.sub);\n out = tf.mul(out, params.bn.truediv);\n out = tf.add(out, params.conv.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nexport function leaky(x: tf.Tensor4D): tf.Tensor4D {\n return tf.tidy(() => {\n const min = tf.mul(x, tf.scalar(0.10000000149011612));\n return tf.add(tf.relu(tf.sub(x, min)), min);\n // return tf.maximum(x, min)\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { SeparableConvParams } from '../common/types';\nimport { leaky } from './leaky';\n\nexport function depthwiseSeparableConv(x: tf.Tensor4D, params: SeparableConvParams): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.separableConv2d(out, params.depthwise_filter, params.pointwise_filter, [1, 1], 'valid');\n out = tf.add(out, params.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { extractConvParamsFactory } from '../common/index';\nimport { extractSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightsFactory } from '../common/extractWeightsFactory';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n\n function extractBatchNormParams(size: number, mappedPrefix: string): BatchNorm {\n const sub = tf.tensor1d(extractWeights(size));\n const truediv = tf.tensor1d(extractWeights(size));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/sub` },\n { paramPath: `${mappedPrefix}/truediv` },\n );\n\n return { sub, truediv };\n }\n\n function extractConvWithBatchNormParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv`);\n const bn = extractBatchNormParams(channelsOut, `${mappedPrefix}/bn`);\n\n return { conv, bn };\n }\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParams(\n weights: Float32Array,\n config: TinyYolov2Config,\n boxEncodingSize: number,\n filterSizes: number[],\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n\n const conv0 = config.isFirstLayerConv2d\n ? extractConvParams(s0, s1, 3, 'conv0')\n : extractSeparableConvParams(s0, s1, 'conv0');\n const conv1 = extractSeparableConvParams(s1, s2, 'conv1');\n const conv2 = extractSeparableConvParams(s2, s3, 'conv2');\n const conv3 = extractSeparableConvParams(s3, s4, 'conv3');\n const conv4 = extractSeparableConvParams(s4, s5, 'conv4');\n const conv5 = extractSeparableConvParams(s5, s6, 'conv5');\n const conv6 = s7 ? extractSeparableConvParams(s6, s7, 'conv6') : undefined;\n const conv7 = s8 ? extractSeparableConvParams(s7, s8, 'conv7') : undefined;\n const conv8 = extractConvParams(s8 || s7 || s6, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n } else {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n const conv0 = extractConvWithBatchNormParams(s0, s1, 'conv0');\n const conv1 = extractConvWithBatchNormParams(s1, s2, 'conv1');\n const conv2 = extractConvWithBatchNormParams(s2, s3, 'conv2');\n const conv3 = extractConvWithBatchNormParams(s3, s4, 'conv3');\n const conv4 = extractConvWithBatchNormParams(s4, s5, 'conv4');\n const conv5 = extractConvWithBatchNormParams(s5, s6, 'conv5');\n const conv6 = extractConvWithBatchNormParams(s6, s7, 'conv6');\n const conv7 = extractConvWithBatchNormParams(s7, s8, 'conv7');\n const conv8 = extractConvParams(s8, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n }\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { ConvParams } from '../common/index';\nimport { disposeUnusedWeightTensors } from '../common/disposeUnusedWeightTensors';\nimport { loadSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightEntryFactory } from '../common/extractWeightEntryFactory';\nimport { ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractBatchNormParams(prefix: string): BatchNorm {\n const sub = extractWeightEntry(`${prefix}/sub`, 1);\n const truediv = extractWeightEntry(`${prefix}/truediv`, 1);\n return { sub, truediv };\n }\n\n function extractConvParams(prefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { filters, bias };\n }\n\n function extractConvWithBatchNormParams(prefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(`${prefix}/conv`);\n const bn = extractBatchNormParams(`${prefix}/bn`);\n return { conv, bn };\n }\n\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n config: TinyYolov2Config,\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n // eslint-disable-next-line no-mixed-operators\n const numFilters = (config.filterSizes && config.filterSizes.length || 9);\n params = {\n conv0: config.isFirstLayerConv2d ? extractConvParams('conv0') : extractSeparableConvParams('conv0'),\n conv1: extractSeparableConvParams('conv1'),\n conv2: extractSeparableConvParams('conv2'),\n conv3: extractSeparableConvParams('conv3'),\n conv4: extractSeparableConvParams('conv4'),\n conv5: extractSeparableConvParams('conv5'),\n conv6: numFilters > 7 ? extractSeparableConvParams('conv6') : undefined,\n conv7: numFilters > 8 ? extractSeparableConvParams('conv7') : undefined,\n conv8: extractConvParams('conv8'),\n };\n } else {\n params = {\n conv0: extractConvWithBatchNormParams('conv0'),\n conv1: extractConvWithBatchNormParams('conv1'),\n conv2: extractConvWithBatchNormParams('conv2'),\n conv3: extractConvWithBatchNormParams('conv3'),\n conv4: extractConvWithBatchNormParams('conv4'),\n conv5: extractConvWithBatchNormParams('conv5'),\n conv6: extractConvWithBatchNormParams('conv6'),\n conv7: extractConvWithBatchNormParams('conv7'),\n conv8: extractConvParams('conv8'),\n };\n }\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "export interface ITinyYolov2Options {\n inputSize?: number\n scoreThreshold?: number\n}\n\nexport class TinyYolov2Options {\n protected _name: string = 'TinyYolov2Options'\n\n private _inputSize: number\n\n private _scoreThreshold: number\n\n constructor({ inputSize, scoreThreshold }: ITinyYolov2Options = {}) {\n this._inputSize = inputSize || 416;\n this._scoreThreshold = scoreThreshold || 0.5;\n\n if (typeof this._inputSize !== 'number' || this._inputSize % 32 !== 0) {\n throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);\n }\n\n if (typeof this._scoreThreshold !== 'number' || this._scoreThreshold <= 0 || this._scoreThreshold >= 1) {\n throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`);\n }\n }\n\n get inputSize(): number { return this._inputSize; }\n\n get scoreThreshold(): number { return this._scoreThreshold; }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/types';\nimport { TNetInput } from '../dom/types';\nimport {\n BOX_ANCHORS,\n BOX_ANCHORS_SEPARABLE,\n DEFAULT_MODEL_NAME,\n DEFAULT_MODEL_NAME_SEPARABLE_CONV,\n IOU_THRESHOLD,\n MEAN_RGB_SEPARABLE,\n} from './const';\nimport { TinyYolov2Base } from './TinyYolov2Base';\nimport { ITinyYolov2Options } from './TinyYolov2Options';\nimport { TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2 extends TinyYolov2Base {\n constructor(withSeparableConvs: boolean = true) {\n const config = {\n withSeparableConvs,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n ...(withSeparableConvs\n ? {\n anchors: BOX_ANCHORS_SEPARABLE,\n meanRgb: MEAN_RGB_SEPARABLE,\n }\n : {\n anchors: BOX_ANCHORS,\n withClassScores: true,\n }),\n };\n\n super(config);\n }\n\n public get withSeparableConvs(): boolean {\n return this.config.withSeparableConvs;\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME;\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { TinyYolov2 } from './TinyYolov2';\n\nexport * from './TinyYolov2Options';\n\nexport * from './config';\nexport * from './types';\n\nexport { TinyYolov2 };\n\nexport function createTinyYolov2(weights: Float32Array, withSeparableConvs: boolean = true) {\n const net = new TinyYolov2(withSeparableConvs);\n net.extractWeights(weights);\n return net;\n}\n", "import { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\n\nexport interface ITinyFaceDetectorOptions extends ITinyYolov2Options {}\n\nexport class TinyFaceDetectorOptions extends TinyYolov2Options {\n protected _name: string = 'TinyFaceDetectorOptions'\n}\n", "export class ComposableTask {\n public async then(\n // eslint-disable-next-line no-unused-vars\n onfulfilled: (value: T) => T | PromiseLike,\n ): Promise {\n return onfulfilled(await this.run());\n }\n\n public async run(): Promise {\n throw new Error('ComposableTask - run is not implemented');\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class DetectFaceLandmarksTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected useTinyLandmarkNet: boolean,\n ) {\n super();\n }\n\n protected get landmarkNet(): FaceLandmark68Net | FaceLandmark68TinyNet {\n return this.useTinyLandmarkNet\n ? nets.faceLandmark68TinyNet\n : nets.faceLandmark68Net;\n }\n}\n\nexport class DetectAllFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n const detections = parentResults.map((res) => res.detection);\n\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, detections)\n : await extractFaces(this.input, detections);\n\n const faceLandmarksByFace = await Promise.all(faces.map(\n (face) => this.landmarkNet.detectLandmarks(face),\n )) as FaceLandmarks68[];\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return parentResults.map((parentResult, i) => extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i]));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class DetectSingleFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { detection } = parentResult;\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, [detection])\n : await extractFaces(this.input, [detection]);\n\n const landmarks = await this.landmarkNet.detectLandmarks(faces[0]) as FaceLandmarks68;\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return extendWithFaceLandmarks(parentResult, landmarks);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\n\nexport async function extractAllFacesAndComputeResults, TResult>(\n parentResults: TSource[],\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResults: (faces: Array) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment: (parentResult: WithFaceLandmarks) => FaceDetection = ({ alignedRect }) => alignedRect,\n) {\n const faceBoxes = parentResults.map((parentResult) => (isWithFaceLandmarks(parentResult)\n ? getRectForAlignment(parentResult)\n : parentResult.detection));\n const faces: Array = extractedFaces || (\n input instanceof tf.Tensor\n ? await extractFaceTensors(input, faceBoxes)\n : await extractFaces(input, faceBoxes)\n );\n\n const results = await computeResults(faces);\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return results;\n}\n\nexport async function extractSingleFaceAndComputeResult, TResult>(\n parentResult: TSource,\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResult: (face: HTMLCanvasElement | tf.Tensor3D) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment?: (parentResultLocal: WithFaceLandmarks) => FaceDetection,\n) {\n return extractAllFacesAndComputeResults(\n [parentResult],\n input,\n async (faces) => computeResult(faces[0]),\n extractedFaces,\n getRectForAlignment,\n );\n}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB: [number, number, number] = [117.001, 114.697, 97.404];\n", "import * as tf from '../../dist/tfjs.esm.js';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/index';\nimport { TNetInput } from '../dom/index';\nimport { ITinyYolov2Options } from '../tinyYolov2/index';\nimport { TinyYolov2Base } from '../tinyYolov2/TinyYolov2Base';\nimport { TinyYolov2NetParams } from '../tinyYolov2/types';\nimport { BOX_ANCHORS, IOU_THRESHOLD, MEAN_RGB } from './const';\n\nexport class TinyFaceDetector extends TinyYolov2Base {\n constructor() {\n const config = {\n withSeparableConvs: true,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n anchors: BOX_ANCHORS,\n meanRgb: MEAN_RGB,\n isFirstLayerConv2d: true,\n filterSizes: [3, 16, 32, 64, 128, 256, 512],\n };\n\n super(config);\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_face_detector_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { AgeGenderNet } from '../ageGenderNet/AgeGenderNet';\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet';\nimport { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { ITinyYolov2Options, TinyYolov2 } from '../tinyYolov2/index';\n\nexport const nets = {\n ssdMobilenetv1: new SsdMobilenetv1(),\n tinyFaceDetector: new TinyFaceDetector(),\n tinyYolov2: new TinyYolov2(),\n faceLandmark68Net: new FaceLandmark68Net(),\n faceLandmark68TinyNet: new FaceLandmark68TinyNet(),\n faceRecognitionNet: new FaceRecognitionNet(),\n faceExpressionNet: new FaceExpressionNet(),\n ageGenderNet: new AgeGenderNet(),\n};\n\n/**\n * Attempts to detect all faces in an image using SSD Mobilenetv1 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const ssdMobilenetv1 = (input: TNetInput, options: SsdMobilenetv1Options): Promise => nets.ssdMobilenetv1.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Face Detector.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyFaceDetector = (input: TNetInput, options: TinyFaceDetectorOptions): Promise => nets.tinyFaceDetector.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Yolov2 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyYolov2Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyYolov2 = (input: TNetInput, options: ITinyYolov2Options): Promise => nets.tinyYolov2.locateFaces(input, options);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarks = (input: TNetInput): Promise => nets.faceLandmark68Net.detectLandmarks(input);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image\n * using a tinier version of the 68 point face landmark model, which is slightly\n * faster at inference, but also slightly less accurate.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarksTiny = (input: TNetInput): Promise => nets.faceLandmark68TinyNet.detectLandmarks(input);\n\n/**\n * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image,\n * which uniquely represents the features of that persons face. The computed face descriptor can\n * be used to measure the similarity between faces, by computing the euclidean distance of two\n * face descriptors.\n *\n * @param inputs The face image extracted from the aligned bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Face descriptor with 128 entries or array thereof in case of batch input.\n */\nexport const computeFaceDescriptor = (input: TNetInput): Promise => nets.faceRecognitionNet.computeFaceDescriptor(input);\n\n/**\n * Recognizes the facial expressions from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Facial expressions with corresponding probabilities or array thereof in case of batch input.\n */\nexport const recognizeFaceExpressions = (input: TNetInput): Promise => nets.faceExpressionNet.predictExpressions(input);\n\n/**\n * Predicts age and gender from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Predictions with age, gender and gender probability or array thereof in case of batch input.\n */\nexport const predictAgeAndGender = (input: TNetInput): Promise => nets.ageGenderNet.predictAgeAndGender(input);\n\nexport const loadSsdMobilenetv1Model = (url: string) => nets.ssdMobilenetv1.load(url);\nexport const loadTinyFaceDetectorModel = (url: string) => nets.tinyFaceDetector.load(url);\nexport const loadTinyYolov2Model = (url: string) => nets.tinyYolov2.load(url);\nexport const loadFaceLandmarkModel = (url: string) => nets.faceLandmark68Net.load(url);\nexport const loadFaceLandmarkTinyModel = (url: string) => nets.faceLandmark68TinyNet.load(url);\nexport const loadFaceRecognitionModel = (url: string) => nets.faceRecognitionNet.load(url);\nexport const loadFaceExpressionModel = (url: string) => nets.faceExpressionNet.load(url);\nexport const loadAgeGenderModel = (url: string) => nets.ageGenderNet.load(url);\n\n// backward compatibility\nexport const loadFaceDetectionModel = loadSsdMobilenetv1Model;\nexport const locateFaces = ssdMobilenetv1;\nexport const detectLandmarks = detectFaceLandmarks;\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm.js';\n\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderTask,\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\n\nexport class PredictFaceExpressionsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const faceExpressionsByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map(\n (parentResult, i) => extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]),\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const faceExpressions = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithFaceExpressions(parentResult, faceExpressions);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictAllFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm.js';\n\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { TNetInput } from '../dom/index';\nimport { extendWithAge, WithAge } from '../factories/WithAge';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { extendWithGender, WithGender } from '../factories/WithGender';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllFaceExpressionsTask,\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class PredictAgeAndGenderTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase>[], TSource[]> {\n public async run(): Promise>[]> {\n const parentResults = await this.parentTask;\n\n const ageAndGenderByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map((parentResult, i) => {\n const { age, gender, genderProbability } = ageAndGenderByFace[i];\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n });\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase> | undefined, TSource | undefined> {\n public async run(): Promise> | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { age, gender, genderProbability } = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictAllAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDescriptor, WithFaceDescriptor } from '../factories/WithFaceDescriptor';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class ComputeFaceDescriptorsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n ) {\n super();\n }\n}\n\nexport class ComputeAllFaceDescriptorsTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const descriptors = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n (faces) => Promise.all(faces.map((face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise)),\n null,\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return descriptors.map((descriptor, i) => extendWithFaceDescriptor(parentResults[i], descriptor));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n\nexport class ComputeSingleFaceDescriptorTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n const descriptor = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise,\n null,\n // eslint-disable-next-line no-shadow\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return extendWithFaceDescriptor(parentResult, descriptor);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { TinyYolov2Options } from '../tinyYolov2/index';\nimport { ComposableTask } from './ComposableTask';\nimport { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';\nimport { nets } from './nets';\nimport { PredictAllAgeAndGenderTask, PredictSingleAgeAndGenderTask } from './PredictAgeAndGenderTask';\nimport { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionsTask } from './PredictFaceExpressionsTask';\nimport { FaceDetectionOptions } from './types';\n\nexport class DetectFacesTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n ) {\n super();\n }\n}\n\nexport class DetectAllFacesTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const { input, options } = this;\n\n // eslint-disable-next-line no-nested-ternary\n const faceDetectionFunction = options instanceof TinyFaceDetectorOptions\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyFaceDetector.locateFaces(input, options)\n : (\n // eslint-disable-next-line no-nested-ternary\n options instanceof SsdMobilenetv1Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.ssdMobilenetv1.locateFaces(input, options)\n : (\n options instanceof TinyYolov2Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyYolov2.locateFaces(input, options)\n : null\n )\n );\n\n if (!faceDetectionFunction) {\n throw new Error('detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options');\n }\n\n return faceDetectionFunction(input);\n }\n\n private runAndExtendWithFaceDetections(): Promise[]> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise[]>(async (resolve) => {\n const detections = await this.run();\n resolve(detections.map((detection) => extendWithFaceDetection({}, detection)));\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectAllFaceLandmarksTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n}\n\nexport class DetectSingleFaceTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const faceDetections = await new DetectAllFacesTask(this.input, this.options);\n let faceDetectionWithHighestScore = faceDetections[0];\n faceDetections.forEach((faceDetection) => {\n if (faceDetection.score > faceDetectionWithHighestScore.score) {\n faceDetectionWithHighestScore = faceDetection;\n }\n });\n return faceDetectionWithHighestScore;\n }\n\n private runAndExtendWithFaceDetection(): Promise | undefined> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise | undefined>(async (resolve) => {\n const detection = await this.run();\n resolve(detection ? extendWithFaceDetection<{}>({}, detection) : undefined);\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectSingleFaceLandmarksTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n}\n", "import { TNetInput } from '../dom/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { DetectAllFacesTask, DetectSingleFaceTask } from './DetectFacesTasks';\nimport { FaceDetectionOptions } from './types';\n\nexport function detectSingleFace(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectSingleFaceTask {\n return new DetectSingleFaceTask(input, options);\n}\n\nexport function detectAllFaces(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectAllFacesTask {\n return new DetectAllFacesTask(input, options);\n}\n", "import { TNetInput } from '../dom/index';\nimport { WithFaceDescriptor, WithFaceDetection, WithFaceLandmarks } from '../factories/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/index';\nimport { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\nimport { detectAllFaces } from './detectFaces';\n\n// export allFaces API for backward compatibility\n\nexport async function allFacesSsdMobilenetv1(\n input: TNetInput,\n minConfidence?: number,\n): Promise>>[]> {\n return detectAllFaces(input, new SsdMobilenetv1Options(minConfidence ? { minConfidence } : {}))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport async function allFacesTinyYolov2(\n input: TNetInput,\n forwardParams: ITinyYolov2Options = {},\n): Promise>>[]> {\n return detectAllFaces(input, new TinyYolov2Options(forwardParams))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport const allFaces = allFacesSsdMobilenetv1;\n", "export function euclideanDistance(arr1: number[] | Float32Array, arr2: number[] | Float32Array) {\n if (arr1.length !== arr2.length)\n throw new Error('euclideanDistance: arr1.length !== arr2.length')\n\n const desc1 = Array.from(arr1)\n const desc2 = Array.from(arr2)\n\n return Math.sqrt(\n desc1\n .map((val, i) => val - desc2[i])\n .reduce((res, diff) => res + Math.pow(diff, 2), 0)\n )\n}", "import { FaceMatch } from '../classes/FaceMatch';\nimport { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors';\nimport { euclideanDistance } from '../euclideanDistance';\nimport { WithFaceDescriptor } from '../factories/index';\n\nexport class FaceMatcher {\n private _labeledDescriptors: LabeledFaceDescriptors[]\n\n private _distanceThreshold: number\n\n constructor(\n inputs: LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>,\n distanceThreshold: number = 0.6,\n ) {\n this._distanceThreshold = distanceThreshold;\n\n const inputArray = Array.isArray(inputs) ? inputs : [inputs];\n\n if (!inputArray.length) {\n throw new Error('FaceRecognizer.constructor - expected atleast one input');\n }\n\n let count = 1;\n const createUniqueLabel = () => `person ${count++}`;\n\n this._labeledDescriptors = inputArray.map((desc) => {\n if (desc instanceof LabeledFaceDescriptors) {\n return desc;\n }\n\n if (desc instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc]);\n }\n\n if (desc.descriptor && desc.descriptor instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]);\n }\n\n throw new Error('FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>');\n });\n }\n\n public get labeledDescriptors(): LabeledFaceDescriptors[] { return this._labeledDescriptors; }\n\n public get distanceThreshold(): number { return this._distanceThreshold; }\n\n public computeMeanDistance(queryDescriptor: Float32Array, descriptors: Float32Array[]): number {\n return descriptors\n .map((d) => euclideanDistance(d, queryDescriptor))\n .reduce((d1, d2) => d1 + d2, 0)\n / (descriptors.length || 1);\n }\n\n public matchDescriptor(queryDescriptor: Float32Array): FaceMatch {\n return this.labeledDescriptors\n .map(({ descriptors, label }) => new FaceMatch(\n label,\n this.computeMeanDistance(queryDescriptor, descriptors),\n ))\n .reduce((best, curr) => (best.distance < curr.distance ? best : curr));\n }\n\n public findBestMatch(queryDescriptor: Float32Array): FaceMatch {\n const bestMatch = this.matchDescriptor(queryDescriptor);\n return bestMatch.distance < this.distanceThreshold\n ? bestMatch\n : new FaceMatch('unknown', bestMatch.distance);\n }\n\n public toJSON(): any {\n return {\n distanceThreshold: this.distanceThreshold,\n labeledDescriptors: this.labeledDescriptors.map((ld) => ld.toJSON()),\n };\n }\n\n public static fromJSON(json: any): FaceMatcher {\n const labeledDescriptors = json.labeledDescriptors\n .map((ld: any) => LabeledFaceDescriptors.fromJSON(ld));\n return new FaceMatcher(labeledDescriptors, json.distanceThreshold);\n }\n}\n", "import { TinyFaceDetector } from './TinyFaceDetector';\n\nexport * from './TinyFaceDetector';\nexport * from './TinyFaceDetectorOptions';\n\nexport function createTinyFaceDetector(weights: Float32Array) {\n const net = new TinyFaceDetector();\n net.extractWeights(weights);\n return net;\n}\n", "import { Dimensions, IDimensions } from './classes/index';\nimport { FaceDetection } from './classes/FaceDetection';\nimport { FaceLandmarks } from './classes/FaceLandmarks';\nimport { extendWithFaceDetection, isWithFaceDetection } from './factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, isWithFaceLandmarks } from './factories/WithFaceLandmarks';\n\nexport function resizeResults(results: T, dimensions: IDimensions): T {\n\n const { width, height } = new Dimensions(dimensions.width, dimensions.height)\n\n if (width <= 0 || height <= 0) {\n throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({ width, height })}`)\n }\n\n if (Array.isArray(results)) {\n // return results.map(obj => resizeResults(obj, { width, height })) as any as T\n return (results as Array).map(obj => resizeResults(obj, { width, height } as IDimensions)) as any as T\n }\n\n if (isWithFaceLandmarks(results)) {\n const resizedDetection = results.detection.forSize(width, height)\n const resizedLandmarks = results.unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height)\n return extendWithFaceLandmarks(extendWithFaceDetection(results, resizedDetection), resizedLandmarks)\n }\n\n if (isWithFaceDetection(results)) {\n return extendWithFaceDetection(results, results.detection.forSize(width, height))\n }\n\n if (results instanceof FaceLandmarks || results instanceof FaceDetection) {\n return (results as any).forSize(width, height)\n }\n\n return results\n}"], + "sources": ["../src/tfjs/tf-node.ts", "../src/env/isNodejs.ts", "../src/index.ts", "../src/draw/index.ts", "../src/draw/drawContour.ts", "../src/utils/index.ts", "../src/classes/Dimensions.ts", "../src/classes/Point.ts", "../src/classes/Box.ts", "../src/classes/BoundingBox.ts", "../src/classes/ObjectDetection.ts", "../src/classes/FaceDetection.ts", "../src/ops/iou.ts", "../src/ops/minBbox.ts", "../src/ops/nonMaxSuppression.ts", "../src/ops/normalize.ts", "../src/ops/padToSquare.ts", "../src/ops/shuffleArray.ts", "../src/ops/index.ts", "../src/classes/Rect.ts", "../src/classes/FaceLandmarks.ts", "../src/classes/FaceLandmarks5.ts", "../src/classes/FaceLandmarks68.ts", "../src/classes/FaceMatch.ts", "../src/classes/LabeledBox.ts", "../src/classes/LabeledFaceDescriptors.ts", "../src/classes/PredictedBox.ts", "../src/factories/WithFaceDetection.ts", "../src/env/createBrowserEnv.ts", "../src/env/createFileSystem.ts", "../src/env/createNodejsEnv.ts", "../src/env/isBrowser.ts", "../src/env/index.ts", "../src/dom/resolveInput.ts", "../src/dom/getContext2dOrThrow.ts", "../src/draw/DrawTextField.ts", "../src/draw/DrawBox.ts", "../src/draw/drawDetections.ts", "../src/faceExpressionNet/FaceExpressionNet.ts", "../src/dom/isMediaLoaded.ts", "../src/dom/awaitMediaLoaded.ts", "../src/dom/bufferToImage.ts", "../src/dom/getMediaDimensions.ts", "../src/dom/createCanvas.ts", "../src/dom/imageTensorToCanvas.ts", "../src/dom/isMediaElement.ts", "../src/dom/NetInput.ts", "../src/dom/imageToSquare.ts", "../src/dom/toNetInput.ts", "../src/dom/extractFaces.ts", "../src/dom/extractFaceTensors.ts", "../src/dom/fetchOrThrow.ts", "../src/dom/fetchImage.ts", "../src/dom/fetchJson.ts", "../src/dom/fetchNetWeights.ts", "../src/dom/loadWeightMap.ts", "../src/common/getModelUris.ts", "../src/dom/matchDimensions.ts", "../src/faceFeatureExtractor/FaceFeatureExtractor.ts", "../src/NeuralNetwork.ts", "../src/faceFeatureExtractor/denseBlock.ts", "../src/common/depthwiseSeparableConv.ts", "../src/common/convLayer.ts", "../src/common/disposeUnusedWeightTensors.ts", "../src/common/extractConvParamsFactory.ts", "../src/common/extractFCParamsFactory.ts", "../src/common/extractSeparableConvParamsFactory.ts", "../src/common/types.ts", "../src/common/extractWeightEntryFactory.ts", "../src/common/extractWeightsFactory.ts", "../src/faceFeatureExtractor/extractorsFactory.ts", "../src/faceFeatureExtractor/extractParams.ts", "../src/common/loadConvParamsFactory.ts", "../src/faceFeatureExtractor/loadParamsFactory.ts", "../src/faceFeatureExtractor/extractParamsFromWeigthMap.ts", "../src/faceProcessor/FaceProcessor.ts", "../src/common/fullyConnectedLayer.ts", "../src/faceProcessor/extractParams.ts", "../src/faceProcessor/extractParamsFromWeigthMap.ts", "../src/faceProcessor/util.ts", "../src/faceExpressionNet/FaceExpressions.ts", "../src/factories/WithFaceExpressions.ts", "../src/draw/drawFaceExpressions.ts", "../src/factories/WithFaceLandmarks.ts", "../src/draw/DrawFaceLandmarks.ts", "../src/ageGenderNet/AgeGenderNet.ts", "../src/xception/TinyXception.ts", "../src/xception/extractParams.ts", "../src/xception/extractParamsFromWeigthMap.ts", "../src/ageGenderNet/extractParams.ts", "../src/ageGenderNet/extractParamsFromWeigthMap.ts", "../src/ageGenderNet/types.ts", "../src/faceLandmarkNet/FaceLandmark68NetBase.ts", "../src/faceLandmarkNet/FaceLandmark68Net.ts", "../src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts", "../src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts", "../src/faceFeatureExtractor/extractParamsTiny.ts", "../src/faceLandmarkNet/FaceLandmark68TinyNet.ts", "../src/faceLandmarkNet/index.ts", "../src/faceRecognitionNet/FaceRecognitionNet.ts", "../src/faceRecognitionNet/convLayer.ts", "../src/faceRecognitionNet/scaleLayer.ts", "../src/faceRecognitionNet/extractParams.ts", "../src/faceRecognitionNet/extractParamsFromWeigthMap.ts", "../src/faceRecognitionNet/residualLayer.ts", "../src/faceRecognitionNet/index.ts", "../src/factories/WithFaceDescriptor.ts", "../src/factories/WithAge.ts", "../src/factories/WithGender.ts", "../src/ssdMobilenetv1/SsdMobilenetv1.ts", "../src/ssdMobilenetv1/extractParams.ts", "../src/ssdMobilenetv1/extractParamsFromWeigthMap.ts", "../src/ssdMobilenetv1/mobileNetV1.ts", "../src/ssdMobilenetv1/pointwiseConvLayer.ts", "../src/ssdMobilenetv1/nonMaxSuppression.ts", "../src/ssdMobilenetv1/outputLayer.ts", "../src/ssdMobilenetv1/predictionLayer.ts", "../src/ssdMobilenetv1/boxPredictionLayer.ts", "../src/ssdMobilenetv1/SsdMobilenetv1Options.ts", "../src/ssdMobilenetv1/index.ts", "../src/tinyYolov2/const.ts", "../src/tinyYolov2/TinyYolov2Base.ts", "../src/tinyYolov2/config.ts", "../src/tinyYolov2/convWithBatchNorm.ts", "../src/tinyYolov2/leaky.ts", "../src/tinyYolov2/depthwiseSeparableConv.ts", "../src/tinyYolov2/extractParams.ts", "../src/tinyYolov2/extractParamsFromWeigthMap.ts", "../src/tinyYolov2/TinyYolov2Options.ts", "../src/tinyYolov2/TinyYolov2.ts", "../src/tinyYolov2/index.ts", "../src/tinyFaceDetector/TinyFaceDetectorOptions.ts", "../src/globalApi/ComposableTask.ts", "../src/globalApi/DetectFaceLandmarksTasks.ts", "../src/globalApi/extractFacesAndComputeResults.ts", "../src/tinyFaceDetector/const.ts", "../src/tinyFaceDetector/TinyFaceDetector.ts", "../src/globalApi/nets.ts", "../src/globalApi/PredictFaceExpressionsTask.ts", "../src/globalApi/PredictAgeAndGenderTask.ts", "../src/globalApi/ComputeFaceDescriptorsTasks.ts", "../src/globalApi/DetectFacesTasks.ts", "../src/globalApi/detectFaces.ts", "../src/globalApi/allFaces.ts", "../src/euclideanDistance.ts", "../src/globalApi/FaceMatcher.ts", "../src/tinyFaceDetector/index.ts", "../src/resizeResults.ts"], + "sourcesContent": ["/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable node/no-unpublished-import */\n\nexport * from '@tensorflow/tfjs-node';\n", "export function isNodejs(): boolean {\n return typeof global === 'object'\n && typeof require === 'function'\n && typeof module !== 'undefined'\n // issues with gatsby.js: module.exports is undefined\n // && !!module.exports\n && typeof process !== 'undefined' && !!process.version;\n}\n", "import * as tf from '../dist/tfjs.esm';\nimport * as draw from './draw/index';\nimport * as utils from './utils/index';\nimport * as pkg from '../package.json';\n\nexport { tf, draw, utils };\n\nexport * from './ageGenderNet/index';\nexport * from './classes/index';\nexport * from './dom/index';\nexport * from './env/index';\nexport * from './faceExpressionNet/index';\nexport * from './faceLandmarkNet/index';\nexport * from './faceRecognitionNet/index';\nexport * from './factories/index';\nexport * from './globalApi/index';\nexport * from './ops/index';\nexport * from './ssdMobilenetv1/index';\nexport * from './tinyFaceDetector/index';\nexport * from './tinyYolov2/index';\nexport * from './euclideanDistance';\nexport * from './NeuralNetwork';\nexport * from './resizeResults';\n\nconst node = (typeof process !== 'undefined');\n// eslint-disable-next-line no-undef\nconst browser = (typeof navigator !== 'undefined') && (typeof navigator.userAgent !== 'undefined');\nexport const version = { faceapi: pkg.version as string, node, browser };\n", "export * from './drawContour';\nexport * from './drawDetections';\nexport * from './drawFaceExpressions';\nexport * from './DrawBox';\nexport * from './DrawFaceLandmarks';\nexport * from './DrawTextField';\n", "import { Point } from '../classes/index';\n\nexport function drawContour(\n ctx: CanvasRenderingContext2D,\n points: Point[],\n isClosed: boolean = false,\n) {\n ctx.beginPath();\n\n points.slice(1).forEach(({ x, y }, prevIdx) => {\n const from = points[prevIdx];\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(x, y);\n });\n\n if (isClosed) {\n const from = points[points.length - 1];\n const to = points[0];\n if (!from || !to) {\n return;\n }\n\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n }\n\n ctx.stroke();\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Point } from '../classes/index';\nimport { Dimensions, IDimensions } from '../classes/Dimensions';\n\nexport function isTensor(tensor: any, dim: number) {\n return tensor instanceof tf.Tensor && tensor.shape.length === dim;\n}\n\nexport function isTensor1D(tensor: any): tensor is tf.Tensor1D {\n return isTensor(tensor, 1);\n}\n\nexport function isTensor2D(tensor: any): tensor is tf.Tensor2D {\n return isTensor(tensor, 2);\n}\n\nexport function isTensor3D(tensor: any): tensor is tf.Tensor3D {\n return isTensor(tensor, 3);\n}\n\nexport function isTensor4D(tensor: any): tensor is tf.Tensor4D {\n return isTensor(tensor, 4);\n}\n\nexport function isFloat(num: number) {\n return num % 1 !== 0;\n}\n\nexport function isEven(num: number) {\n return num % 2 === 0;\n}\n\nexport function round(num: number, prec: number = 2) {\n const f = 10 ** prec;\n return Math.floor(num * f) / f;\n}\n\nexport function isDimensions(obj: any): boolean {\n return obj && obj.width && obj.height;\n}\n\nexport function computeReshapedDimensions({ width, height }: IDimensions, inputSize: number) {\n const scale = inputSize / Math.max(height, width);\n return new Dimensions(Math.round(width * scale), Math.round(height * scale));\n}\n\nexport function getCenterPoint(pts: Point[]): Point {\n return pts.reduce((sum, pt) => sum.add(pt), new Point(0, 0))\n .div(new Point(pts.length, pts.length));\n}\n\nexport function range(num: number, start: number, step: number): number[] {\n return Array(num).fill(0).map((_, i) => start + (i * step));\n}\n\nexport function isValidNumber(num: any) {\n // eslint-disable-next-line no-mixed-operators\n return !!num && (num !== Infinity) && (num !== -Infinity) && !Number.isNaN(num) || num === 0;\n}\n\nexport function isValidProbablitiy(num: any) {\n return isValidNumber(num) && num >= 0 && num <= 1.0;\n}\n", "import { isValidNumber } from '../utils/index';\n\nexport interface IDimensions {\n width: number\n height: number\n}\n\nexport class Dimensions implements IDimensions {\n private _width: number\n\n private _height: number\n\n constructor(width: number, height: number) {\n if (!isValidNumber(width) || !isValidNumber(height)) {\n throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({ width, height })}`);\n }\n\n this._width = width;\n this._height = height;\n }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public reverse(): Dimensions {\n return new Dimensions(1 / this.width, 1 / this.height);\n }\n}\n", "export interface IPoint {\n x: number\n y: number\n}\n\nexport class Point implements IPoint {\n private _x: number\n\n private _y: number\n\n constructor(x: number, y: number) {\n this._x = x;\n this._y = y;\n }\n\n get x(): number { return this._x; }\n\n get y(): number { return this._y; }\n\n public add(pt: IPoint): Point {\n return new Point(this.x + pt.x, this.y + pt.y);\n }\n\n public sub(pt: IPoint): Point {\n return new Point(this.x - pt.x, this.y - pt.y);\n }\n\n public mul(pt: IPoint): Point {\n return new Point(this.x * pt.x, this.y * pt.y);\n }\n\n public div(pt: IPoint): Point {\n return new Point(this.x / pt.x, this.y / pt.y);\n }\n\n public abs(): Point {\n return new Point(Math.abs(this.x), Math.abs(this.y));\n }\n\n public magnitude(): number {\n return Math.sqrt((this.x ** 2) + (this.y ** 2));\n }\n\n public floor(): Point {\n return new Point(Math.floor(this.x), Math.floor(this.y));\n }\n}\n", "import { isDimensions, isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { IDimensions } from './Dimensions';\nimport { Point } from './Point';\nimport { IRect } from './Rect';\n\nexport class Box implements IBoundingBox, IRect {\n public static isRect(rect: any): boolean {\n return !!rect && [rect.x, rect.y, rect.width, rect.height].every(isValidNumber);\n }\n\n public static assertIsValidBox(box: any, callee: string, allowNegativeDimensions: boolean = false) {\n if (!Box.isRect(box)) {\n throw new Error(`${callee} - invalid box: ${JSON.stringify(box)}, expected object with properties x, y, width, height`);\n }\n\n if (!allowNegativeDimensions && (box.width < 0 || box.height < 0)) {\n throw new Error(`${callee} - width (${box.width}) and height (${box.height}) must be positive numbers`);\n }\n }\n\n private _x: number\n\n private _y: number\n\n private _width: number\n\n private _height: number\n\n constructor(_box: IBoundingBox | IRect, allowNegativeDimensions: boolean = true) {\n const box = (_box || {}) as any;\n\n const isBbox = [box.left, box.top, box.right, box.bottom].every(isValidNumber);\n const isRect = [box.x, box.y, box.width, box.height].every(isValidNumber);\n\n if (!isRect && !isBbox) {\n throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(box)}`);\n }\n\n const [x, y, width, height] = isRect\n ? [box.x, box.y, box.width, box.height]\n : [box.left, box.top, box.right - box.left, box.bottom - box.top];\n\n Box.assertIsValidBox({\n x, y, width, height,\n }, 'Box.constructor', allowNegativeDimensions);\n\n this._x = x;\n this._y = y;\n this._width = width;\n this._height = height;\n }\n\n public get x(): number { return this._x; }\n\n public get y(): number { return this._y; }\n\n public get width(): number { return this._width; }\n\n public get height(): number { return this._height; }\n\n public get left(): number { return this.x; }\n\n public get top(): number { return this.y; }\n\n public get right(): number { return this.x + this.width; }\n\n public get bottom(): number { return this.y + this.height; }\n\n public get area(): number { return this.width * this.height; }\n\n public get topLeft(): Point { return new Point(this.left, this.top); }\n\n public get topRight(): Point { return new Point(this.right, this.top); }\n\n public get bottomLeft(): Point { return new Point(this.left, this.bottom); }\n\n public get bottomRight(): Point { return new Point(this.right, this.bottom); }\n\n public round(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.round(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public floor(): Box {\n const [x, y, width, height] = [this.x, this.y, this.width, this.height]\n .map((val) => Math.floor(val));\n return new Box({\n x, y, width, height,\n });\n }\n\n public toSquare(): Box {\n let {\n x, y, width, height,\n } = this;\n const diff = Math.abs(width - height);\n if (width < height) {\n x -= (diff / 2);\n width += diff;\n }\n if (height < width) {\n y -= (diff / 2);\n height += diff;\n }\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public rescale(s: IDimensions | number): Box {\n const scaleX = isDimensions(s) ? (s as IDimensions).width : s as number;\n const scaleY = isDimensions(s) ? (s as IDimensions).height : s as number;\n return new Box({\n x: this.x * scaleX,\n y: this.y * scaleY,\n width: this.width * scaleX,\n height: this.height * scaleY,\n });\n }\n\n public pad(padX: number, padY: number): Box {\n const [x, y, width, height] = [\n this.x - (padX / 2),\n this.y - (padY / 2),\n this.width + padX,\n this.height + padY,\n ];\n return new Box({\n x, y, width, height,\n });\n }\n\n public clipAtImageBorders(imgWidth: number, imgHeight: number): Box {\n const {\n x, y, right, bottom,\n } = this;\n const clippedX = Math.max(x, 0);\n const clippedY = Math.max(y, 0);\n\n const newWidth = right - clippedX;\n const newHeight = bottom - clippedY;\n const clippedWidth = Math.min(newWidth, imgWidth - clippedX);\n const clippedHeight = Math.min(newHeight, imgHeight - clippedY);\n\n return (new Box({\n x: clippedX, y: clippedY, width: clippedWidth, height: clippedHeight,\n })).floor();\n }\n\n public shift(sx: number, sy: number): Box {\n const { width, height } = this;\n const x = this.x + sx;\n const y = this.y + sy;\n\n return new Box({\n x, y, width, height,\n });\n }\n\n public padAtBorders(imageHeight: number, imageWidth: number) {\n const w = this.width + 1;\n const h = this.height + 1;\n\n const dx = 1;\n const dy = 1;\n let edx = w;\n let edy = h;\n\n let x = this.left;\n let y = this.top;\n let ex = this.right;\n let ey = this.bottom;\n\n if (ex > imageWidth) {\n edx = -ex + imageWidth + w;\n ex = imageWidth;\n }\n if (ey > imageHeight) {\n edy = -ey + imageHeight + h;\n ey = imageHeight;\n }\n if (x < 1) {\n edy = 2 - x;\n x = 1;\n }\n if (y < 1) {\n edy = 2 - y;\n y = 1;\n }\n\n return {\n dy, edy, dx, edx, y, ey, x, ex, w, h,\n };\n }\n\n public calibrate(region: Box) {\n return new Box({\n left: this.left + (region.left * this.width),\n top: this.top + (region.top * this.height),\n right: this.right + (region.right * this.width),\n bottom: this.bottom + (region.bottom * this.height),\n }).toSquare().round();\n }\n}\n", "import { Box } from './Box';\n\nexport interface IBoundingBox {\n left: number\n top: number\n right: number\n bottom: number\n}\n\nexport class BoundingBox extends Box implements IBoundingBox {\n constructor(left: number, top: number, right: number, bottom: number, allowNegativeDimensions: boolean = false) {\n super({\n left, top, right, bottom,\n }, allowNegativeDimensions);\n }\n}\n", "import { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { IRect, Rect } from './Rect';\n\nexport class ObjectDetection {\n private _score: number\n\n private _classScore: number\n\n private _className: string\n\n private _box: Rect\n\n private _imageDims: Dimensions\n\n constructor(\n score: number,\n classScore: number,\n className: string,\n relativeBox: IRect,\n imageDims: IDimensions,\n ) {\n this._imageDims = new Dimensions(imageDims.width, imageDims.height);\n this._score = score;\n this._classScore = classScore;\n this._className = className;\n this._box = new Box(relativeBox).rescale(this._imageDims);\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n\n public get className(): string { return this._className; }\n\n public get box(): Box { return this._box; }\n\n public get imageDims(): Dimensions { return this._imageDims; }\n\n public get imageWidth(): number { return this.imageDims.width; }\n\n public get imageHeight(): number { return this.imageDims.height; }\n\n public get relativeBox(): Box { return new Box(this._box).rescale(this.imageDims.reverse()); }\n\n public forSize(width: number, height: number): ObjectDetection {\n return new ObjectDetection(\n this.score,\n this.classScore,\n this.className,\n this.relativeBox,\n { width, height },\n );\n }\n}\n", "import { Box } from './Box';\nimport { IDimensions } from './Dimensions';\nimport { ObjectDetection } from './ObjectDetection';\nimport { Rect } from './Rect';\n\nexport interface IFaceDetecion {\n score: number\n box: Box\n}\n\nexport class FaceDetection extends ObjectDetection implements IFaceDetecion {\n constructor(\n score: number,\n relativeBox: Rect,\n imageDims: IDimensions,\n ) {\n super(score, score, '', relativeBox, imageDims);\n }\n\n public forSize(width: number, height: number): FaceDetection {\n const { score, relativeBox, imageDims } = super.forSize(width, height);\n return new FaceDetection(score, relativeBox, imageDims);\n }\n}\n", "import { Box } from '../classes/Box';\n\nexport function iou(box1: Box, box2: Box, isIOU: boolean = true) {\n const width = Math.max(0.0, Math.min(box1.right, box2.right) - Math.max(box1.left, box2.left));\n const height = Math.max(0.0, Math.min(box1.bottom, box2.bottom) - Math.max(box1.top, box2.top));\n const interSection = width * height;\n\n return isIOU\n ? interSection / (box1.area + box2.area - interSection)\n : interSection / Math.min(box1.area, box2.area);\n}\n", "import { BoundingBox, IPoint } from '../classes/index';\n\nexport function minBbox(pts: IPoint[]): BoundingBox {\n const xs = pts.map((pt) => pt.x);\n const ys = pts.map((pt) => pt.y);\n const minX = xs.reduce((min, x) => (x < min ? x : min), Infinity);\n const minY = ys.reduce((min, y) => (y < min ? y : min), Infinity);\n const maxX = xs.reduce((max, x) => (max < x ? x : max), 0);\n const maxY = ys.reduce((max, y) => (max < y ? y : max), 0);\n\n return new BoundingBox(minX, minY, maxX, maxY);\n}\n", "import { Box } from '../classes/Box';\nimport { iou } from './iou';\n\nexport function nonMaxSuppression(\n boxes: Box[],\n scores: number[],\n iouThreshold: number,\n isIOU: boolean = true,\n): number[] {\n let indicesSortedByScore = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .sort((c1, c2) => c1.score - c2.score)\n .map((c) => c.boxIndex);\n\n const pick: number[] = [];\n\n while (indicesSortedByScore.length > 0) {\n const curr = indicesSortedByScore.pop() as number;\n pick.push(curr);\n\n const indices = indicesSortedByScore;\n\n const outputs: number[] = [];\n for (let i = 0; i < indices.length; i++) {\n const idx = indices[i];\n\n const currBox = boxes[curr];\n const idxBox = boxes[idx];\n\n outputs.push(iou(currBox, idxBox, isIOU));\n }\n\n indicesSortedByScore = indicesSortedByScore.filter(\n (_, j) => outputs[j] <= iouThreshold,\n );\n }\n\n return pick;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nexport function normalize(x: tf.Tensor4D, meanRgb: number[]): tf.Tensor4D {\n return tf.tidy(() => {\n const [r, g, b] = meanRgb;\n const avg_r = tf.fill([...x.shape.slice(0, 3), 1], r, 'float32');\n const avg_g = tf.fill([...x.shape.slice(0, 3), 1], g, 'float32');\n const avg_b = tf.fill([...x.shape.slice(0, 3), 1], b, 'float32');\n const avg_rgb = tf.concat([avg_r, avg_g, avg_b], 3);\n\n return tf.sub(x, avg_rgb);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\n/**\n * Pads the smaller dimension of an image tensor with zeros, such that width === height.\n *\n * @param imgTensor The image tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The padded tensor with width === height.\n */\nexport function padToSquare(\n imgTensor: tf.Tensor4D,\n isCenterImage: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const [height, width] = imgTensor.shape.slice(1);\n if (height === width) {\n return imgTensor;\n }\n\n const dimDiff = Math.abs(height - width);\n const paddingAmount = Math.round(dimDiff * (isCenterImage ? 0.5 : 1));\n const paddingAxis = height > width ? 2 : 1;\n\n const createPaddingTensor = (paddingAmountLocal: number): tf.Tensor => {\n const paddingTensorShape = imgTensor.shape.slice();\n paddingTensorShape[paddingAxis] = paddingAmountLocal;\n return tf.fill(paddingTensorShape, 0, 'float32');\n };\n\n const paddingTensorAppend = createPaddingTensor(paddingAmount);\n const remainingPaddingAmount = dimDiff - (paddingTensorAppend.shape[paddingAxis] as number);\n\n const paddingTensorPrepend = isCenterImage && remainingPaddingAmount\n ? createPaddingTensor(remainingPaddingAmount)\n : null;\n\n const tensorsToStack = [\n paddingTensorPrepend,\n imgTensor,\n paddingTensorAppend,\n ]\n .filter((t) => !!t)\n // .map((t: tf.Tensor) => t.toFloat()) as tf.Tensor4D[]\n .map((t: tf.Tensor) => tf.cast(t, 'float32')) as tf.Tensor4D[];\n return tf.concat(tensorsToStack, paddingAxis);\n });\n}\n", "export function shuffleArray(inputArray: any[]) {\n const array = inputArray.slice();\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const x = array[i];\n array[i] = array[j];\n array[j] = x;\n }\n return array;\n}\n", "export * from './iou';\nexport * from './minBbox';\nexport * from './nonMaxSuppression';\nexport * from './normalize';\nexport * from './padToSquare';\nexport * from './shuffleArray';\n\nexport function sigmoid(x: number) {\n return 1 / (1 + Math.exp(-x));\n}\n\nexport function inverseSigmoid(x: number) {\n return Math.log(x / (1 - x));\n}\n", "import { Box } from './Box';\n\nexport interface IRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport class Rect extends Box implements IRect {\n constructor(x: number, y: number, width: number, height: number, allowNegativeDimensions: boolean = false) {\n super({\n x, y, width, height,\n }, allowNegativeDimensions);\n }\n}\n", "import { minBbox } from '../ops/index';\nimport { getCenterPoint } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { Dimensions, IDimensions } from './Dimensions';\nimport { FaceDetection } from './FaceDetection';\nimport { Point } from './Point';\nimport { IRect, Rect } from './Rect';\n\n// face alignment constants\nconst relX = 0.5;\nconst relY = 0.43;\nconst relScale = 0.45;\n\nexport interface IFaceLandmarks {\n positions: Point[]\n shift: Point\n}\n\nexport class FaceLandmarks implements IFaceLandmarks {\n protected _shift: Point\n\n protected _positions: Point[]\n\n protected _imgDims: Dimensions\n\n constructor(\n relativeFaceLandmarkPositions: Point[],\n imgDims: IDimensions,\n shift: Point = new Point(0, 0),\n ) {\n const { width, height } = imgDims;\n this._imgDims = new Dimensions(width, height);\n this._shift = shift;\n this._positions = relativeFaceLandmarkPositions.map(\n (pt) => pt.mul(new Point(width, height)).add(shift),\n );\n }\n\n public get shift(): Point { return new Point(this._shift.x, this._shift.y); }\n\n public get imageWidth(): number { return this._imgDims.width; }\n\n public get imageHeight(): number { return this._imgDims.height; }\n\n public get positions(): Point[] { return this._positions; }\n\n public get relativePositions(): Point[] {\n return this._positions.map(\n (pt) => pt.sub(this._shift).div(new Point(this.imageWidth, this.imageHeight)),\n );\n }\n\n public forSize(width: number, height: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n { width, height },\n );\n }\n\n public shiftBy(x: number, y: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n this._imgDims,\n new Point(x, y),\n );\n }\n\n public shiftByPoint(pt: Point): T {\n return this.shiftBy(pt.x, pt.y);\n }\n\n /**\n * Aligns the face landmarks after face detection from the relative positions of the faces\n * bounding box, or it's current shift. This function should be used to align the face images\n * after face detection has been performed, before they are passed to the face recognition net.\n * This will make the computed face descriptor more accurate.\n *\n * @param detection (optional) The bounding box of the face or the face detection result. If\n * no argument was passed the position of the face landmarks are assumed to be relative to\n * it's current shift.\n * @returns The bounding box of the aligned face.\n */\n public align(\n detection?: FaceDetection | IRect | IBoundingBox | null,\n options: { useDlibAlignment?: boolean, minBoxPadding?: number } = { },\n ): Box {\n if (detection) {\n const box = detection instanceof FaceDetection\n ? detection.box.floor()\n : new Box(detection);\n\n return this.shiftBy(box.x, box.y).align(null, options);\n }\n\n const { useDlibAlignment, minBoxPadding } = { useDlibAlignment: false, minBoxPadding: 0.2, ...options };\n\n if (useDlibAlignment) {\n return this.alignDlib();\n }\n\n return this.alignMinBbox(minBoxPadding);\n }\n\n private alignDlib(): Box {\n const centers = this.getRefPointsForAlignment();\n\n const [leftEyeCenter, rightEyeCenter, mouthCenter] = centers;\n const distToMouth = (pt: Point) => mouthCenter.sub(pt).magnitude();\n const eyeToMouthDist = (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2;\n\n const size = Math.floor(eyeToMouthDist / relScale);\n\n const refPoint = getCenterPoint(centers);\n // TODO: pad in case rectangle is out of image bounds\n const x = Math.floor(Math.max(0, refPoint.x - (relX * size)));\n const y = Math.floor(Math.max(0, refPoint.y - (relY * size)));\n\n return new Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y));\n }\n\n private alignMinBbox(padding: number): Box {\n const box = minBbox(this.positions);\n return box.pad(box.width * padding, box.height * padding);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n throw new Error('getRefPointsForAlignment not implemented by base class');\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks5 extends FaceLandmarks {\n protected getRefPointsForAlignment(): Point[] {\n const pts = this.positions;\n return [\n pts[0],\n pts[1],\n getCenterPoint([pts[3], pts[4]]),\n ];\n }\n}\n", "import { getCenterPoint } from '../utils/index';\nimport { FaceLandmarks } from './FaceLandmarks';\nimport { Point } from './Point';\n\nexport class FaceLandmarks68 extends FaceLandmarks {\n public getJawOutline(): Point[] {\n return this.positions.slice(0, 17);\n }\n\n public getLeftEyeBrow(): Point[] {\n return this.positions.slice(17, 22);\n }\n\n public getRightEyeBrow(): Point[] {\n return this.positions.slice(22, 27);\n }\n\n public getNose(): Point[] {\n return this.positions.slice(27, 36);\n }\n\n public getLeftEye(): Point[] {\n return this.positions.slice(36, 42);\n }\n\n public getRightEye(): Point[] {\n return this.positions.slice(42, 48);\n }\n\n public getMouth(): Point[] {\n return this.positions.slice(48, 68);\n }\n\n protected getRefPointsForAlignment(): Point[] {\n return [\n this.getLeftEye(),\n this.getRightEye(),\n this.getMouth(),\n ].map(getCenterPoint);\n }\n}\n", "import { round } from '../utils/index';\n\nexport interface IFaceMatch {\n label: string\n distance: number\n}\n\nexport class FaceMatch implements IFaceMatch {\n private _label: string\n\n private _distance: number\n\n constructor(label: string, distance: number) {\n this._label = label;\n this._distance = distance;\n }\n\n public get label(): string { return this._label; }\n\n public get distance(): number { return this._distance; }\n\n public toString(withDistance: boolean = true): string {\n return `${this.label}${withDistance ? ` (${round(this.distance)})` : ''}`;\n }\n}\n", "import { isValidNumber } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { Box } from './Box';\nimport { IRect } from './Rect';\n\nexport class LabeledBox extends Box {\n public static assertIsValidLabeledBox(box: any, callee: string) {\n Box.assertIsValidBox(box, callee);\n\n if (!isValidNumber(box.label)) {\n throw new Error(`${callee} - expected property label (${box.label}) to be a number`);\n }\n }\n\n private _label: number\n\n constructor(box: IBoundingBox | IRect | any, label: number) {\n super(box);\n this._label = label;\n }\n\n public get label(): number { return this._label; }\n}\n", "export class LabeledFaceDescriptors {\n private _label: string\n\n private _descriptors: Float32Array[]\n\n constructor(label: string, descriptors: Float32Array[]) {\n if (!(typeof label === 'string')) {\n throw new Error('LabeledFaceDescriptors - constructor expected label to be a string');\n }\n\n if (!Array.isArray(descriptors) || descriptors.some((desc) => !(desc instanceof Float32Array))) {\n throw new Error('LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array');\n }\n\n this._label = label;\n this._descriptors = descriptors;\n }\n\n public get label(): string { return this._label; }\n\n public get descriptors(): Float32Array[] { return this._descriptors; }\n\n public toJSON(): any {\n return {\n label: this.label,\n descriptors: this.descriptors.map((d) => Array.from(d)),\n };\n }\n\n public static fromJSON(json: any): LabeledFaceDescriptors {\n const descriptors = json.descriptors.map((d: any) => new Float32Array(d));\n return new LabeledFaceDescriptors(json.label, descriptors);\n }\n}\n", "import { isValidProbablitiy } from '../utils/index';\nimport { IBoundingBox } from './BoundingBox';\nimport { LabeledBox } from './LabeledBox';\nimport { IRect } from './Rect';\n\nexport class PredictedBox extends LabeledBox {\n public static assertIsValidPredictedBox(box: any, callee: string) {\n LabeledBox.assertIsValidLabeledBox(box, callee);\n\n if (\n !isValidProbablitiy(box.score)\n || !isValidProbablitiy(box.classScore)\n ) {\n throw new Error(`${callee} - expected properties score (${box.score}) and (${box.classScore}) to be a number between [0, 1]`);\n }\n }\n\n private _score: number\n\n private _classScore: number\n\n constructor(box: IBoundingBox | IRect | any, label: number, score: number, classScore: number) {\n super(box, label);\n this._score = score;\n this._classScore = classScore;\n }\n\n public get score(): number { return this._score; }\n\n public get classScore(): number { return this._classScore; }\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\n\nexport type WithFaceDetection = TSource & {\n detection: FaceDetection\n}\n\nexport function isWithFaceDetection(obj: any): obj is WithFaceDetection<{}> {\n return obj.detection instanceof FaceDetection;\n}\n\nexport function extendWithFaceDetection<\n TSource\n>(\n sourceObj: TSource,\n detection: FaceDetection,\n): WithFaceDetection {\n const extension = { detection };\n return { ...sourceObj, ...extension };\n}\n", "import { Environment } from './types';\n\nexport function createBrowserEnv(): Environment {\n const fetch = window.fetch;\n if (!fetch) throw new Error('fetch - missing fetch implementation for browser environment');\n\n const readFile = () => {\n throw new Error('readFile - filesystem not available for browser environment');\n };\n\n return {\n Canvas: HTMLCanvasElement,\n CanvasRenderingContext2D,\n Image: HTMLImageElement,\n ImageData,\n Video: HTMLVideoElement,\n createCanvasElement: () => document.createElement('canvas'),\n createImageElement: () => document.createElement('img'),\n fetch,\n readFile,\n };\n}\n", "import { FileSystem } from './types';\n\nexport function createFileSystem(fs?: any): FileSystem {\n let requireFsError = '';\n\n if (!fs) {\n try {\n // eslint-disable-next-line global-require\n fs = require('fs');\n } catch (err) {\n requireFsError = err.toString();\n }\n }\n\n const readFile = fs\n ? (filePath: string) => new Promise((resolve, reject) => {\n fs.readFile(filePath, (err: any, buffer: Buffer) => (err ? reject(err) : resolve(buffer)));\n })\n : () => {\n throw new Error(`readFile - failed to require fs in nodejs environment with error: ${requireFsError}`);\n };\n\n return {\n readFile,\n };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { createFileSystem } from './createFileSystem';\nimport { Environment } from './types';\n\nexport function createNodejsEnv(): Environment {\n // eslint-disable-next-line dot-notation\n const Canvas = global['Canvas'] || global.HTMLCanvasElement;\n const Image = global.Image || global.HTMLImageElement;\n\n const createCanvasElement = () => {\n if (Canvas) return new Canvas();\n throw new Error('createCanvasElement - missing Canvas implementation for nodejs environment');\n };\n\n const createImageElement = () => {\n if (Image) return new Image();\n throw new Error('createImageElement - missing Image implementation for nodejs environment');\n };\n\n const fetch = global.fetch;\n // if (!fetch) throw new Error('fetch - missing fetch implementation for nodejs environment');\n\n const fileSystem = createFileSystem();\n\n return {\n Canvas: Canvas || class {},\n CanvasRenderingContext2D: global.CanvasRenderingContext2D || class {},\n Image: Image || class {},\n ImageData: global.ImageData || class {},\n Video: global.HTMLVideoElement || class {},\n createCanvasElement,\n createImageElement,\n fetch,\n ...fileSystem,\n };\n}\n", "export function isBrowser(): boolean {\n return typeof window === 'object'\n && typeof document !== 'undefined'\n && typeof HTMLImageElement !== 'undefined'\n && typeof HTMLCanvasElement !== 'undefined'\n && typeof HTMLVideoElement !== 'undefined'\n && typeof ImageData !== 'undefined'\n && typeof CanvasRenderingContext2D !== 'undefined';\n}\n", "import { createBrowserEnv } from './createBrowserEnv';\nimport { createFileSystem } from './createFileSystem';\nimport { createNodejsEnv } from './createNodejsEnv';\nimport { isBrowser } from './isBrowser';\nimport { isNodejs } from './isNodejs';\nimport { Environment } from './types';\n\nlet environment: Environment | null;\n\nfunction getEnv(): Environment {\n if (!environment) {\n throw new Error('getEnv - environment is not defined, check isNodejs() and isBrowser()');\n }\n return environment;\n}\n\nfunction setEnv(env: Environment) {\n environment = env;\n}\n\nfunction initialize() {\n // check for isBrowser() first to prevent electron renderer process\n // to be initialized with wrong environment due to isNodejs() returning true\n if (isBrowser()) return setEnv(createBrowserEnv());\n if (isNodejs()) return setEnv(createNodejsEnv());\n return null;\n}\n\nfunction monkeyPatch(env: Partial) {\n if (!environment) {\n initialize();\n }\n\n if (!environment) {\n throw new Error('monkeyPatch - environment is not defined, check isNodejs() and isBrowser()');\n }\n\n const { Canvas = environment.Canvas, Image = environment.Image } = env;\n environment.Canvas = Canvas;\n environment.Image = Image;\n environment.createCanvasElement = env.createCanvasElement || (() => new Canvas());\n environment.createImageElement = env.createImageElement || (() => new Image());\n\n environment.ImageData = env.ImageData || environment.ImageData;\n environment.Video = env.Video || environment.Video;\n environment.fetch = env.fetch || environment.fetch;\n environment.readFile = env.readFile || environment.readFile;\n}\n\nexport const env = {\n getEnv,\n setEnv,\n initialize,\n createBrowserEnv,\n createFileSystem,\n createNodejsEnv,\n monkeyPatch,\n isBrowser,\n isNodejs,\n};\n\ninitialize();\n\nexport * from './types';\n", "import { env } from '../env/index';\n\nexport function resolveInput(arg: string | any) {\n if (!env.isNodejs() && typeof arg === 'string') {\n return document.getElementById(arg);\n }\n return arg;\n}\n", "import { env } from '../env/index';\nimport { resolveInput } from './resolveInput';\n\nexport function getContext2dOrThrow(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D): CanvasRenderingContext2D {\n const { Canvas, CanvasRenderingContext2D } = env.getEnv();\n\n if (canvasArg instanceof CanvasRenderingContext2D) {\n return canvasArg;\n }\n\n const canvas = resolveInput(canvasArg);\n\n if (!(canvas instanceof Canvas)) {\n throw new Error('resolveContext2d - expected canvas to be of instance of Canvas');\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('resolveContext2d - canvas 2d context is null');\n }\n\n return ctx;\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IDimensions, IPoint } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { resolveInput } from '../dom/resolveInput';\n\n// eslint-disable-next-line no-shadow\nexport enum AnchorPosition {\n // eslint-disable-next-line no-unused-vars\n TOP_LEFT = 'TOP_LEFT',\n // eslint-disable-next-line no-unused-vars\n TOP_RIGHT = 'TOP_RIGHT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_LEFT = 'BOTTOM_LEFT',\n // eslint-disable-next-line no-unused-vars\n BOTTOM_RIGHT = 'BOTTOM_RIGHT'\n}\n\nexport interface IDrawTextFieldOptions {\n anchorPosition?: AnchorPosition\n backgroundColor?: string\n fontColor?: string\n fontSize?: number\n fontStyle?: string\n padding?: number\n}\n\nexport class DrawTextFieldOptions implements IDrawTextFieldOptions {\n public anchorPosition: AnchorPosition\n\n public backgroundColor: string\n\n public fontColor: string\n\n public fontSize: number\n\n public fontStyle: string\n\n public padding: number\n\n constructor(options: IDrawTextFieldOptions = {}) {\n const {\n anchorPosition, backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = options;\n this.anchorPosition = anchorPosition || AnchorPosition.TOP_LEFT;\n this.backgroundColor = backgroundColor || 'rgba(0, 0, 0, 0.5)';\n this.fontColor = fontColor || 'rgba(255, 255, 255, 1)';\n this.fontSize = fontSize || 14;\n this.fontStyle = fontStyle || 'Georgia';\n this.padding = padding || 4;\n }\n}\n\nexport class DrawTextField {\n public text: string[]\n\n public anchor : IPoint\n\n public options: DrawTextFieldOptions\n\n constructor(\n text: string | string[] | DrawTextField,\n anchor: IPoint,\n options: IDrawTextFieldOptions = {},\n ) {\n // eslint-disable-next-line no-nested-ternary\n this.text = typeof text === 'string'\n ? [text]\n : (text instanceof DrawTextField ? text.text : text);\n this.anchor = anchor;\n this.options = new DrawTextFieldOptions(options);\n }\n\n measureWidth(ctx: CanvasRenderingContext2D): number {\n const { padding } = this.options;\n return this.text.map((l) => ctx.measureText(l).width).reduce((w0, w1) => (w0 < w1 ? w1 : w0), 0) + (2 * padding);\n }\n\n measureHeight(): number {\n const { fontSize, padding } = this.options;\n return this.text.length * fontSize + (2 * padding);\n }\n\n getUpperLeft(ctx: CanvasRenderingContext2D, canvasDims?: IDimensions): IPoint {\n const { anchorPosition } = this.options;\n const isShiftLeft = anchorPosition === AnchorPosition.BOTTOM_RIGHT || anchorPosition === AnchorPosition.TOP_RIGHT;\n const isShiftTop = anchorPosition === AnchorPosition.BOTTOM_LEFT || anchorPosition === AnchorPosition.BOTTOM_RIGHT;\n\n const textFieldWidth = this.measureWidth(ctx);\n const textFieldHeight = this.measureHeight();\n const x = (isShiftLeft ? this.anchor.x - textFieldWidth : this.anchor.x);\n const y = isShiftTop ? this.anchor.y - textFieldHeight : this.anchor.y;\n\n // adjust anchor if text box exceeds canvas borders\n if (canvasDims) {\n const { width, height } = canvasDims;\n const newX = Math.max(Math.min(x, width - textFieldWidth), 0);\n const newY = Math.max(Math.min(y, height - textFieldHeight), 0);\n return { x: newX, y: newY };\n }\n return { x, y };\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const canvas = resolveInput(canvasArg);\n const ctx = getContext2dOrThrow(canvas);\n\n const {\n backgroundColor, fontColor, fontSize, fontStyle, padding,\n } = this.options;\n\n ctx.font = `${fontSize}px ${fontStyle}`;\n const maxTextWidth = this.measureWidth(ctx);\n const textHeight = this.measureHeight();\n\n ctx.fillStyle = backgroundColor;\n const upperLeft = this.getUpperLeft(ctx, canvas);\n ctx.fillRect(upperLeft.x, upperLeft.y, maxTextWidth, textHeight);\n\n ctx.fillStyle = fontColor;\n this.text.forEach((textLine, i) => {\n const x = padding + upperLeft.x;\n const y = padding + upperLeft.y + ((i + 1) * fontSize);\n ctx.fillText(textLine, x, y);\n });\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { Box, IBoundingBox, IRect } from '../classes/index';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport {\n AnchorPosition, DrawTextField, DrawTextFieldOptions, IDrawTextFieldOptions,\n} from './DrawTextField';\n\nexport interface IDrawBoxOptions {\n boxColor?: string\n lineWidth?: number\n drawLabelOptions?: IDrawTextFieldOptions\n label?: string\n}\n\nexport class DrawBoxOptions {\n public boxColor: string\n\n public lineWidth: number\n\n public drawLabelOptions: DrawTextFieldOptions\n\n public label?: string\n\n constructor(options: IDrawBoxOptions = {}) {\n const {\n boxColor, lineWidth, label, drawLabelOptions,\n } = options;\n this.boxColor = boxColor || 'rgba(0, 0, 255, 1)';\n this.lineWidth = lineWidth || 2;\n this.label = label;\n\n const defaultDrawLabelOptions = {\n anchorPosition: AnchorPosition.BOTTOM_LEFT,\n backgroundColor: this.boxColor,\n };\n this.drawLabelOptions = new DrawTextFieldOptions({ ...defaultDrawLabelOptions, ...drawLabelOptions });\n }\n}\n\nexport class DrawBox {\n public box: Box\n\n public options: DrawBoxOptions\n\n constructor(\n box: IBoundingBox | IRect,\n options: IDrawBoxOptions = {},\n ) {\n this.box = new Box(box);\n this.options = new DrawBoxOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const { boxColor, lineWidth } = this.options;\n\n const {\n x, y, width, height,\n } = this.box;\n ctx.strokeStyle = boxColor;\n ctx.lineWidth = lineWidth;\n ctx.strokeRect(x, y, width, height);\n\n const { label } = this.options;\n if (label) {\n new DrawTextField([label], { x: x - (lineWidth / 2), y }, this.options.drawLabelOptions).draw(canvasArg);\n }\n }\n}\n", "import { Box, IBoundingBox, IRect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { round } from '../utils/index';\nimport { DrawBox } from './DrawBox';\n\nexport type TDrawDetectionsInput = IRect | IBoundingBox | FaceDetection | WithFaceDetection<{}>\n\nexport function drawDetections(\n canvasArg: string | HTMLCanvasElement,\n detections: TDrawDetectionsInput | Array,\n) {\n const detectionsArray = Array.isArray(detections) ? detections : [detections];\n\n detectionsArray.forEach((det) => {\n // eslint-disable-next-line no-nested-ternary\n const score = det instanceof FaceDetection\n ? det.score\n : (isWithFaceDetection(det) ? det.detection.score : undefined);\n\n // eslint-disable-next-line no-nested-ternary\n const box = det instanceof FaceDetection\n ? det.box\n : (isWithFaceDetection(det) ? det.detection.box : new Box(det));\n\n const label = score ? `${round(score)}` : undefined;\n new DrawBox(box, { label }).draw(canvasArg);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { FaceExpressions } from './FaceExpressions';\n\nexport class FaceExpressionNet extends FaceProcessor {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceExpressionNet', faceFeatureExtractor);\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n return tf.tidy(() => tf.softmax(this.runNet(input)));\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictExpressions(input: TNetInput) {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n const probabilitesByBatch = await Promise.all(tf.unstack(out).map(async (t) => {\n const data = await t.data();\n t.dispose();\n return data;\n }));\n out.dispose();\n\n const predictionsByBatch = probabilitesByBatch\n .map((probabilites) => new FaceExpressions(probabilites as Float32Array));\n\n return netInput.isBatchInput\n ? predictionsByBatch\n : predictionsByBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_expression_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n\n protected getClassifierChannelsOut(): number {\n return 7;\n }\n}\n", "import { env } from '../env/index';\n\nexport function isMediaLoaded(media: HTMLImageElement | HTMLVideoElement) : boolean {\n const { Image, Video } = env.getEnv();\n\n return (media instanceof Image && media.complete)\n || (media instanceof Video && media.readyState >= 3);\n}\n", "import { env } from '../env/index';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function awaitMediaLoaded(media: HTMLImageElement | HTMLVideoElement | HTMLCanvasElement) {\n // eslint-disable-next-line consistent-return\n return new Promise((resolve, reject) => {\n if (media instanceof env.getEnv().Canvas || isMediaLoaded(media)) {\n return resolve(null);\n }\n\n function onError(e: Event) {\n if (!e.currentTarget) return;\n // eslint-disable-next-line no-use-before-define\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n reject(e);\n }\n\n function onLoad(e: Event) {\n if (!e.currentTarget) return;\n e.currentTarget.removeEventListener('load', onLoad);\n e.currentTarget.removeEventListener('error', onError);\n resolve(e);\n }\n\n media.addEventListener('load', onLoad);\n media.addEventListener('error', onError);\n });\n}\n", "import { env } from '../env/index';\n\nexport function bufferToImage(buf: Blob): Promise {\n return new Promise((resolve, reject) => {\n if (!(buf instanceof Blob)) reject(new Error('bufferToImage - expected buf to be of type: Blob'));\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result !== 'string') reject(new Error('bufferToImage - expected reader.result to be a string, in onload'));\n const img = env.getEnv().createImageElement();\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = reader.result as string;\n };\n reader.onerror = reject;\n reader.readAsDataURL(buf);\n });\n}\n", "import { Dimensions, IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\n\nexport function getMediaDimensions(input: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | IDimensions): Dimensions {\n const { Image, Video } = env.getEnv();\n\n if (input instanceof Image) {\n return new Dimensions(input.naturalWidth, input.naturalHeight);\n }\n if (input instanceof Video) {\n return new Dimensions(input.videoWidth, input.videoHeight);\n }\n return new Dimensions(input.width, input.height);\n}\n", "import { IDimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\nimport { isMediaLoaded } from './isMediaLoaded';\n\nexport function createCanvas({ width, height }: IDimensions): HTMLCanvasElement {\n const { createCanvasElement } = env.getEnv();\n const canvas = createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n\nexport function createCanvasFromMedia(media: HTMLImageElement | HTMLVideoElement | ImageData, dims?: IDimensions): HTMLCanvasElement {\n const { ImageData } = env.getEnv();\n\n if (!(media instanceof ImageData) && !isMediaLoaded(media)) {\n throw new Error('createCanvasFromMedia - media has not finished loading yet');\n }\n\n const { width, height } = dims || getMediaDimensions(media);\n const canvas = createCanvas({ width, height });\n\n if (media instanceof ImageData) {\n getContext2dOrThrow(canvas).putImageData(media, 0, 0);\n } else {\n getContext2dOrThrow(canvas).drawImage(media, 0, 0, width, height);\n }\n return canvas;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { env } from '../env/index';\nimport { isTensor4D } from '../utils/index';\n\nexport async function imageTensorToCanvas(\n imgTensor: tf.Tensor,\n canvas?: HTMLCanvasElement,\n): Promise {\n const targetCanvas = canvas || env.getEnv().createCanvasElement();\n\n const [height, width, numChannels] = imgTensor.shape.slice(isTensor4D(imgTensor) ? 1 : 0);\n const imgTensor3D = tf.tidy(() => imgTensor.as3D(height, width, numChannels).toInt());\n await tf.browser.toPixels(imgTensor3D, targetCanvas);\n\n imgTensor3D.dispose();\n\n return targetCanvas;\n}\n", "import { env } from '../env/index';\n\nexport function isMediaElement(input: any) {\n const { Image, Canvas, Video } = env.getEnv();\n\n return input instanceof Image\n || input instanceof Canvas\n || input instanceof Video;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Dimensions } from '../classes/Dimensions';\nimport { env } from '../env/index';\nimport { padToSquare } from '../ops/padToSquare';\nimport {\n computeReshapedDimensions, isTensor3D, isTensor4D, range,\n} from '../utils/index';\nimport { createCanvasFromMedia } from './createCanvas';\nimport { imageToSquare } from './imageToSquare';\nimport { TResolvedNetInput } from './types';\n\nexport class NetInput {\n private _imageTensors: Array = []\n\n private _canvases: HTMLCanvasElement[] = []\n\n private _batchSize: number\n\n private _treatAsBatchInput: boolean = false\n\n private _inputDimensions: number[][] = []\n\n private _inputSize: number\n\n constructor(\n inputs: Array,\n treatAsBatchInput: boolean = false,\n ) {\n if (!Array.isArray(inputs)) {\n throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${inputs}`);\n }\n\n this._treatAsBatchInput = treatAsBatchInput;\n this._batchSize = inputs.length;\n\n inputs.forEach((input, idx) => {\n if (isTensor3D(input)) {\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = input.shape;\n return;\n }\n\n if (isTensor4D(input)) {\n const batchSize = (input as any).shape[0];\n if (batchSize !== 1) {\n throw new Error(`NetInput - tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n\n this._imageTensors[idx] = input;\n this._inputDimensions[idx] = (input as any).shape.slice(1);\n return;\n }\n\n const canvas = (input as any) instanceof env.getEnv().Canvas ? input : createCanvasFromMedia(input);\n this._canvases[idx] = canvas;\n this._inputDimensions[idx] = [canvas.height, canvas.width, 3];\n });\n }\n\n public get imageTensors(): Array {\n return this._imageTensors;\n }\n\n public get canvases(): HTMLCanvasElement[] {\n return this._canvases;\n }\n\n public get isBatchInput(): boolean {\n return this.batchSize > 1 || this._treatAsBatchInput;\n }\n\n public get batchSize(): number {\n return this._batchSize;\n }\n\n public get inputDimensions(): number[][] {\n return this._inputDimensions;\n }\n\n public get inputSize(): number | undefined {\n return this._inputSize;\n }\n\n public get reshapedInputDimensions(): Dimensions[] {\n return range(this.batchSize, 0, 1).map(\n (_, batchIdx) => this.getReshapedInputDimensions(batchIdx),\n );\n }\n\n public getInput(batchIdx: number): tf.Tensor3D | tf.Tensor4D | HTMLCanvasElement {\n return this.canvases[batchIdx] || this.imageTensors[batchIdx];\n }\n\n public getInputDimensions(batchIdx: number): number[] {\n return this._inputDimensions[batchIdx];\n }\n\n public getInputHeight(batchIdx: number): number {\n return this._inputDimensions[batchIdx][0];\n }\n\n public getInputWidth(batchIdx: number): number {\n return this._inputDimensions[batchIdx][1];\n }\n\n public getReshapedInputDimensions(batchIdx: number): Dimensions {\n if (typeof this.inputSize !== 'number') {\n throw new Error('getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet');\n }\n\n const width = this.getInputWidth(batchIdx);\n const height = this.getInputHeight(batchIdx);\n return computeReshapedDimensions({ width, height }, this.inputSize);\n }\n\n /**\n * Create a batch tensor from all input canvases and tensors\n * with size [batchSize, inputSize, inputSize, 3].\n *\n * @param inputSize Height and width of the tensor.\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\n * both sides of the minor dimension oof the image.\n * @returns The batch tensor.\n */\n public toBatchTensor(inputSize: number, isCenterInputs: boolean = true): tf.Tensor4D {\n this._inputSize = inputSize;\n\n return tf.tidy(() => {\n const inputTensors = range(this.batchSize, 0, 1).map((batchIdx) => {\n const input = this.getInput(batchIdx);\n\n if (input instanceof tf.Tensor) {\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n let imgTensor = isTensor4D(input) ? input : input.expandDims();\n // @ts-ignore: error TS2344: Type 'Rank.R4' does not satisfy the constraint 'Tensor'.\n imgTensor = padToSquare(imgTensor, isCenterInputs);\n\n if (imgTensor.shape[1] !== inputSize || imgTensor.shape[2] !== inputSize) {\n imgTensor = tf.image.resizeBilinear(imgTensor, [inputSize, inputSize]);\n }\n\n return imgTensor.as3D(inputSize, inputSize, 3);\n }\n\n if (input instanceof env.getEnv().Canvas) {\n return tf.browser.fromPixels(imageToSquare(input, inputSize, isCenterInputs));\n }\n\n throw new Error(`toBatchTensor - at batchIdx ${batchIdx}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${input}`);\n });\n\n // const batchTensor = tf.stack(inputTensors.map(t => t.toFloat())).as4D(this.batchSize, inputSize, inputSize, 3)\n const batchTensor = tf.stack(inputTensors.map((t) => tf.cast(t, 'float32'))).as4D(this.batchSize, inputSize, inputSize, 3);\n // const batchTensor = tf.stack(inputTensors.map(t => tf.Tensor.as4D(tf.cast(t, 'float32'))), this.batchSize, inputSize, inputSize, 3);\n\n return batchTensor;\n });\n }\n}\n", "import { env } from '../env/index';\nimport { createCanvas, createCanvasFromMedia } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function imageToSquare(input: HTMLImageElement | HTMLCanvasElement, inputSize: number, centerImage: boolean = false) {\n const { Image, Canvas } = env.getEnv();\n\n if (!(input instanceof Image || input instanceof Canvas)) {\n throw new Error('imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement');\n }\n\n const dims = getMediaDimensions(input);\n const scale = inputSize / Math.max(dims.height, dims.width);\n const width = scale * dims.width;\n const height = scale * dims.height;\n\n const targetCanvas = createCanvas({ width: inputSize, height: inputSize });\n const inputCanvas = input instanceof Canvas ? input : createCanvasFromMedia(input);\n\n const offset = Math.abs(width - height) / 2;\n const dx = centerImage && width < height ? offset : 0;\n const dy = centerImage && height < width ? offset : 0;\n getContext2dOrThrow(targetCanvas).drawImage(inputCanvas, dx, dy, width, height);\n\n return targetCanvas;\n}\n", "import { isTensor3D, isTensor4D } from '../utils/index';\nimport { awaitMediaLoaded } from './awaitMediaLoaded';\nimport { isMediaElement } from './isMediaElement';\nimport { NetInput } from './NetInput';\nimport { resolveInput } from './resolveInput';\nimport { TNetInput } from './types';\n\n/**\n * Validates the input to make sure, they are valid net inputs and awaits all media elements\n * to be finished loading.\n *\n * @param input The input, which can be a media element or an array of different media elements.\n * @returns A NetInput instance, which can be passed into one of the neural networks.\n */\nexport async function toNetInput(inputs: TNetInput): Promise {\n if (inputs instanceof NetInput) {\n return inputs;\n }\n\n const inputArgArray = Array.isArray(inputs)\n ? inputs\n : [inputs];\n\n if (!inputArgArray.length) {\n throw new Error('toNetInput - empty array passed as input');\n }\n\n const getIdxHint = (idx: number) => (Array.isArray(inputs) ? ` at input index ${idx}:` : '');\n\n const inputArray = inputArgArray.map(resolveInput);\n\n inputArray.forEach((input, i) => {\n if (!isMediaElement(input) && !isTensor3D(input) && !isTensor4D(input)) {\n if (typeof inputArgArray[i] === 'string') {\n throw new Error(`toNetInput -${getIdxHint(i)} string passed, but could not resolve HTMLElement for element id ${inputArgArray[i]}`);\n }\n\n throw new Error(`toNetInput -${getIdxHint(i)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);\n }\n\n if (isTensor4D(input)) {\n // if tf.Tensor4D is passed in the input array, the batch size has to be 1\n const batchSize = input.shape[0];\n if (batchSize !== 1) {\n throw new Error(`toNetInput -${getIdxHint(i)} tf.Tensor4D with batchSize ${batchSize} passed, but not supported in input array`);\n }\n }\n });\n\n // wait for all media elements being loaded\n await Promise.all(\n inputArray.map((input) => isMediaElement(input) && awaitMediaLoaded(input)),\n );\n\n return new NetInput(inputArray, Array.isArray(inputs));\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { Rect } from '../classes/Rect';\nimport { env } from '../env/index';\nimport { createCanvas } from './createCanvas';\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\nimport { imageTensorToCanvas } from './imageTensorToCanvas';\nimport { toNetInput } from './toNetInput';\nimport { TNetInput } from './types';\n\n/**\n * Extracts the image regions containing the detected faces.\n *\n * @param input The image that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns The Canvases of the corresponding image region for each detected face.\n */\nexport async function extractFaces(\n input: TNetInput,\n detections: Array,\n): Promise {\n const { Canvas } = env.getEnv();\n\n let canvas = input as HTMLCanvasElement;\n\n if (!(input instanceof Canvas)) {\n const netInput = await toNetInput(input);\n\n if (netInput.batchSize > 1) {\n throw new Error('extractFaces - batchSize > 1 not supported');\n }\n\n const tensorOrCanvas = netInput.getInput(0);\n canvas = tensorOrCanvas instanceof Canvas\n ? tensorOrCanvas\n : await imageTensorToCanvas(tensorOrCanvas);\n }\n\n const ctx = getContext2dOrThrow(canvas);\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(canvas.width, canvas.height).box.floor()\n : det),\n )\n .map((box) => box.clipAtImageBorders(canvas.width, canvas.height));\n\n return boxes.map(({\n x, y, width, height,\n }) => {\n const faceImg = createCanvas({ width, height });\n getContext2dOrThrow(faceImg)\n .putImageData(ctx.getImageData(x, y, width, height), 0, 0);\n return faceImg;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isTensor3D, isTensor4D } from '../utils/index';\n\n/**\n * Extracts the tensors of the image regions containing the detected faces.\n * Useful if you want to compute the face descriptors for the face images.\n * Using this method is faster then extracting a canvas for each face and\n * converting them to tensors individually.\n *\n * @param imageTensor The image tensor that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns Tensors of the corresponding image region for each detected face.\n */\nexport async function extractFaceTensors(\n imageTensor: tf.Tensor3D | tf.Tensor4D,\n detections: Array,\n): Promise {\n if (!isTensor3D(imageTensor) && !isTensor4D(imageTensor)) {\n throw new Error('extractFaceTensors - expected image tensor to be 3D or 4D');\n }\n\n if (isTensor4D(imageTensor) && imageTensor.shape[0] > 1) {\n throw new Error('extractFaceTensors - batchSize > 1 not supported');\n }\n\n return tf.tidy(() => {\n const [imgHeight, imgWidth, numChannels] = imageTensor.shape.slice(isTensor4D(imageTensor) ? 1 : 0);\n\n const boxes = detections.map(\n (det) => (det instanceof FaceDetection\n ? det.forSize(imgWidth, imgHeight).box\n : det),\n )\n .map((box) => box.clipAtImageBorders(imgWidth, imgHeight));\n\n const faceTensors = boxes.map(({\n x, y, width, height,\n }) => tf.slice3d(imageTensor.as3D(imgHeight, imgWidth, numChannels), [y, x, 0], [height, width, numChannels]));\n\n return faceTensors;\n });\n}\n", "import { env } from '../env/index';\n\nexport async function fetchOrThrow(\n url: string,\n // eslint-disable-next-line no-undef\n init?: RequestInit,\n): Promise {\n const { fetch } = env.getEnv();\n const res = await fetch(url, init);\n if (!(res.status < 400)) {\n throw new Error(`failed to fetch: (${res.status}) ${res.statusText}, from url: ${res.url}`);\n }\n return res;\n}\n", "import { bufferToImage } from './bufferToImage';\nimport { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchImage(uri: string): Promise {\n const res = await fetchOrThrow(uri);\n const blob = await (res).blob();\n\n if (!blob.type.startsWith('image/')) {\n throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${blob.type}, for url: ${res.url}`);\n }\n return bufferToImage(blob);\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchJson(uri: string): Promise {\n return (await fetchOrThrow(uri)).json();\n}\n", "import { fetchOrThrow } from './fetchOrThrow';\n\nexport async function fetchNetWeights(uri: string): Promise {\n return new Float32Array(await (await fetchOrThrow(uri)).arrayBuffer());\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { getModelUris } from '../common/getModelUris';\nimport { fetchJson } from './fetchJson';\n\nexport async function loadWeightMap(\n uri: string | undefined,\n defaultModelName: string,\n): Promise {\n const { manifestUri, modelBaseUri } = getModelUris(uri, defaultModelName);\n const manifest = await fetchJson(manifestUri);\n // if (manifest['weightsManifest']) manifest = manifest['weightsManifest'];\n return tf.io.loadWeights(manifest, modelBaseUri);\n}\n", "export function getModelUris(uri: string | undefined, defaultModelName: string) {\n const defaultManifestFilename = `${defaultModelName}-weights_manifest.json`;\n\n if (!uri) {\n return {\n modelBaseUri: '',\n manifestUri: defaultManifestFilename,\n };\n }\n\n if (uri === '/') {\n return {\n modelBaseUri: '/',\n manifestUri: `/${defaultManifestFilename}`,\n };\n }\n // eslint-disable-next-line no-nested-ternary\n const protocol = uri.startsWith('http://') ? 'http://' : uri.startsWith('https://') ? 'https://' : '';\n uri = uri.replace(protocol, '');\n\n const parts = uri.split('/').filter((s) => s);\n\n const manifestFile = uri.endsWith('.json')\n ? parts[parts.length - 1]\n : defaultManifestFilename;\n\n let modelBaseUri = protocol + (uri.endsWith('.json') ? parts.slice(0, parts.length - 1) : parts).join('/');\n modelBaseUri = uri.startsWith('/') ? `/${modelBaseUri}` : modelBaseUri;\n\n return {\n modelBaseUri,\n manifestUri: modelBaseUri === '/' ? `/${manifestFile}` : `${modelBaseUri}/${manifestFile}`,\n };\n}\n", "import { IDimensions } from '../classes/index';\nimport { getMediaDimensions } from './getMediaDimensions';\n\nexport function matchDimensions(input: IDimensions, reference: IDimensions, useMediaDimensions: boolean = false) {\n const { width, height } = useMediaDimensions\n ? getMediaDimensions(reference)\n : reference;\n input.width = width;\n input.height = height;\n return { width, height };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock4 } from './denseBlock';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { FaceFeatureExtractorParams, IFaceFeatureExtractor } from './types';\n\nexport class FaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('FaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock4(normalized, params.dense0, true);\n out = denseBlock4(out, params.dense1);\n out = denseBlock4(out, params.dense2);\n out = denseBlock4(out, params.dense3);\n out = tf.avgPool(out, [7, 7], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../dist/tfjs.esm';\n\nimport { ParamMapping } from './common/index';\nimport { getModelUris } from './common/getModelUris';\nimport { loadWeightMap } from './dom/index';\nimport { env } from './env/index';\n\nexport abstract class NeuralNetwork {\n\n protected _params: TNetParams | undefined = undefined\n protected _paramMappings: ParamMapping[] = []\n\n constructor(protected _name: string) {\n }\n\n public get params(): TNetParams | undefined { return this._params }\n public get paramMappings(): ParamMapping[] { return this._paramMappings }\n public get isLoaded(): boolean { return !!this.params }\n\n public getParamFromPath(paramPath: string): tf.Tensor {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n return obj[objProp]\n }\n\n public reassignParamFromPath(paramPath: string, tensor: tf.Tensor) {\n const { obj, objProp } = this.traversePropertyPath(paramPath)\n obj[objProp].dispose()\n obj[objProp] = tensor\n }\n\n public getParamList() {\n return this._paramMappings.map(({ paramPath }) => ({\n path: paramPath,\n tensor: this.getParamFromPath(paramPath)\n }))\n }\n\n public getTrainableParams() {\n return this.getParamList().filter(param => param.tensor instanceof tf.Variable)\n }\n\n public getFrozenParams() {\n return this.getParamList().filter(param => !(param.tensor instanceof tf.Variable))\n }\n\n public variable() {\n this.getFrozenParams().forEach(({ path, tensor }) => {\n this.reassignParamFromPath(path, tensor.variable())\n })\n }\n\n public freeze() {\n this.getTrainableParams().forEach(({ path, tensor: variable }) => {\n const tensor = tf.tensor(variable.dataSync())\n variable.dispose()\n this.reassignParamFromPath(path, tensor)\n })\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.getParamList().forEach(param => {\n if (throwOnRedispose && param.tensor.isDisposed) {\n throw new Error(`param tensor has already been disposed for path ${param.path}`)\n }\n param.tensor.dispose()\n })\n this._params = undefined\n }\n\n public serializeParams(): Float32Array {\n return new Float32Array(\n this.getParamList()\n .map(({ tensor }) => Array.from(tensor.dataSync()) as number[])\n .reduce((flat, arr) => flat.concat(arr))\n )\n }\n\n public async load(weightsOrUrl: Float32Array | string | undefined): Promise {\n if (weightsOrUrl instanceof Float32Array) {\n this.extractWeights(weightsOrUrl)\n return\n }\n\n await this.loadFromUri(weightsOrUrl)\n }\n\n public async loadFromUri(uri: string | undefined) {\n if (uri && typeof uri !== 'string') {\n throw new Error(`${this._name}.loadFromUri - expected model uri`)\n }\n\n const weightMap = await loadWeightMap(uri, this.getDefaultModelName())\n this.loadFromWeightMap(weightMap)\n }\n\n public async loadFromDisk(filePath: string | undefined) {\n if (filePath && typeof filePath !== 'string') {\n throw new Error(`${this._name}.loadFromDisk - expected model file path`)\n }\n\n const { readFile } = env.getEnv()\n\n const { manifestUri, modelBaseUri } = getModelUris(filePath, this.getDefaultModelName())\n\n const fetchWeightsFromDisk = (filePaths: string[]) => Promise.all(\n filePaths.map(filePath => readFile(filePath).then(buf => buf.buffer))\n )\n const loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk)\n const manifest = JSON.parse((await readFile(manifestUri)).toString())\n const weightMap = await loadWeights(manifest, modelBaseUri)\n\n this.loadFromWeightMap(weightMap)\n }\n\n public loadFromWeightMap(weightMap: tf.NamedTensorMap) {\n const {\n paramMappings,\n params\n } = this.extractParamsFromWeigthMap(weightMap)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n public extractWeights(weights: Float32Array) {\n const {\n paramMappings,\n params\n } = this.extractParams(weights)\n\n this._paramMappings = paramMappings\n this._params = params\n }\n\n private traversePropertyPath(paramPath: string) {\n if (!this.params) {\n throw new Error(`traversePropertyPath - model has no loaded params`)\n }\n\n const result = paramPath.split('/').reduce((res: { nextObj: any, obj?: any, objProp?: string }, objProp) => {\n if (!res.nextObj.hasOwnProperty(objProp)) {\n throw new Error(`traversePropertyPath - object does not have property ${objProp}, for path ${paramPath}`)\n }\n\n return { obj: res.nextObj, objProp, nextObj: res.nextObj[objProp] }\n }, { nextObj: this.params })\n\n const { obj, objProp } = result\n if (!obj || !objProp || !(obj[objProp] instanceof tf.Tensor)) {\n throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${paramPath}`)\n }\n\n return { obj, objProp }\n }\n\n protected abstract getDefaultModelName(): string\n protected abstract extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TNetParams, paramMappings: ParamMapping[] }\n protected abstract extractParams(weights: Float32Array): { params: TNetParams, paramMappings: ParamMapping[] }\n}", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams, SeparableConvParams } from '../common/index';\nimport { depthwiseSeparableConv } from '../common/depthwiseSeparableConv';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function denseBlock3(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock3Params,\n isFirstLayer: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, [2, 2], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, [2, 2]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n });\n}\n\nexport function denseBlock4(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock4Params,\n isFirstLayer: boolean = false,\n isScaleDown: boolean = true,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, isScaleDown ? [2, 2] : [1, 1], 'same'),\n denseBlockParams.conv0.bias,\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, isScaleDown ? [2, 2] : [1, 1]),\n ) as tf.Tensor4D;\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D;\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\n\n const in4 = tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D;\n const out4 = depthwiseSeparableConv(in4, denseBlockParams.conv3, [1, 1]);\n\n return tf.relu(tf.add(out1, tf.add(out2, tf.add(out3, out4)))) as tf.Tensor4D;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { SeparableConvParams } from './types';\n\nexport function depthwiseSeparableConv(\n x: tf.Tensor4D,\n params: SeparableConvParams,\n stride: [number, number],\n): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same');\n out = tf.add(out, params.bias);\n return out;\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams } from './types';\n\nexport function convLayer(\n x: tf.Tensor4D,\n params: ConvParams,\n padding: 'valid' | 'same' = 'same',\n withRelu: boolean = false,\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out = tf.add(\n tf.conv2d(x, params.filters, [1, 1], padding),\n params.bias,\n ) as tf.Tensor4D;\n\n return withRelu ? tf.relu(out) : out;\n });\n}\n", "import { ParamMapping } from './types';\n\nexport function disposeUnusedWeightTensors(weightMap: any, paramMappings: ParamMapping[]) {\n Object.keys(weightMap).forEach((path) => {\n if (!paramMappings.some((pm) => pm.originalPath === path)) {\n weightMap[path].dispose();\n }\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams, ExtractWeightsFunction, ParamMapping } from './types';\n\nexport function extractConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams => {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ExtractWeightsFunction, FCParams, ParamMapping } from './types';\n\nexport function extractFCParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): FCParams => {\n const fc_weights = tf.tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]);\n const fc_bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return {\n weights: fc_weights,\n bias: fc_bias,\n };\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ExtractWeightsFunction, ParamMapping, SeparableConvParams } from './types';\n\nexport function extractSeparableConvParamsFactory(\n extractWeights: ExtractWeightsFunction,\n paramMappings: ParamMapping[],\n) {\n return (channelsIn: number, channelsOut: number, mappedPrefix: string): SeparableConvParams => {\n const depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]);\n const pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]);\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/depthwise_filter` },\n { paramPath: `${mappedPrefix}/pointwise_filter` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n\nexport function loadSeparableConvParamsFactory(\n // eslint-disable-next-line no-unused-vars\n extractWeightEntry: (originalPath: string, paramRank: number) => T,\n) {\n return (prefix: string): SeparableConvParams => {\n const depthwise_filter = extractWeightEntry(`${prefix}/depthwise_filter`, 4);\n const pointwise_filter = extractWeightEntry(`${prefix}/pointwise_filter`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return new SeparableConvParams(\n depthwise_filter,\n pointwise_filter,\n bias,\n );\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\n// eslint-disable-next-line no-unused-vars\nexport type ExtractWeightsFunction = (numWeights: number) => Float32Array\n\nexport type ParamMapping = {\n originalPath?: string\n paramPath: string\n}\n\nexport type ConvParams = {\n filters: tf.Tensor4D\n bias: tf.Tensor1D\n}\n\nexport type FCParams = {\n weights: tf.Tensor2D\n bias: tf.Tensor1D\n}\n\nexport class SeparableConvParams {\n // eslint-disable-next-line no-useless-constructor\n constructor(\n // eslint-disable-next-line no-unused-vars\n public depthwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public pointwise_filter: tf.Tensor4D,\n // eslint-disable-next-line no-unused-vars\n public bias: tf.Tensor1D,\n // eslint-disable-next-line no-empty-function\n ) {}\n}\n", "import { isTensor } from '../utils/index';\nimport { ParamMapping } from './types';\n\nexport function extractWeightEntryFactory(weightMap: any, paramMappings: ParamMapping[]) {\n return (originalPath: string, paramRank: number, mappedPath?: string) => {\n const tensor = weightMap[originalPath];\n\n if (!isTensor(tensor, paramRank)) {\n throw new Error(`expected weightMap[${originalPath}] to be a Tensor${paramRank}D, instead have ${tensor}`);\n }\n\n paramMappings.push(\n { originalPath, paramPath: mappedPath || originalPath },\n );\n\n return tensor;\n };\n}\n", "export function extractWeightsFactory(weights: Float32Array) {\n let remainingWeights = weights;\n\n function extractWeights(numWeights: number): Float32Array {\n const ret = remainingWeights.slice(0, numWeights);\n remainingWeights = remainingWeights.slice(numWeights);\n return ret;\n }\n\n function getRemainingWeights(): Float32Array {\n return remainingWeights;\n }\n\n return {\n extractWeights,\n getRemainingWeights,\n };\n}\n", "import {\n extractConvParamsFactory,\n extractSeparableConvParamsFactory,\n ExtractWeightsFunction,\n ParamMapping,\n} from '../common/index';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractDenseBlock3Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv0`)\n : extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/conv0`);\n const conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv1`);\n const conv2 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const { conv0, conv1, conv2 } = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer);\n const conv3 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock4Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock4Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock4Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock4Params(64, 128, 'dense2');\n const dense3 = extractDenseBlock4Params(128, 256, 'dense3');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: {\n dense0, dense1, dense2, dense3,\n },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams } from './types';\n\n// eslint-disable-next-line no-unused-vars\nexport function loadConvParamsFactory(extractWeightEntry: (originalPath: string, paramRank: number) => T) {\n return (prefix: string): ConvParams => {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n\n return { filters, bias };\n };\n}\n", "import { extractWeightEntryFactory, loadSeparableConvParamsFactory, ParamMapping } from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractDenseBlock3Params(prefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n\n return { conv0, conv1, conv2 };\n }\n\n function extractDenseBlock4Params(prefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`);\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`);\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`);\n const conv3 = extractSeparableConvParams(`${prefix}/conv3`);\n\n return {\n conv0, conv1, conv2, conv3,\n };\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock4Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock4Params('dense0', true),\n dense1: extractDenseBlock4Params('dense1'),\n dense2: extractDenseBlock4Params('dense2'),\n dense3: extractDenseBlock4Params('dense3'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { NetInput } from '../dom/index';\nimport {\n FaceFeatureExtractorParams,\n IFaceFeatureExtractor,\n TinyFaceFeatureExtractorParams,\n} from '../faceFeatureExtractor/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { NetParams } from './types';\nimport { seperateWeightMaps } from './util';\n\nexport abstract class FaceProcessor<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends NeuralNetwork {\n protected _faceFeatureExtractor: IFaceFeatureExtractor\n\n constructor(_name: string, faceFeatureExtractor: IFaceFeatureExtractor) {\n super(_name);\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): IFaceFeatureExtractor {\n return this._faceFeatureExtractor;\n }\n\n protected abstract getDefaultModelName(): string\n\n protected abstract getClassifierChannelsIn(): number\n\n protected abstract getClassifierChannelsOut(): number\n\n public runNet(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n return fullyConnectedLayer(bottleneckFeatures.as2D(bottleneckFeatures.shape[0], -1), params.fc);\n });\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights, this.getClassifierChannelsIn(), this.getClassifierChannelsOut());\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const cIn = this.getClassifierChannelsIn();\n const cOut = this.getClassifierChannelsOut();\n const classifierWeightSize = (cOut * cIn) + cOut;\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FCParams } from './types';\n\nexport function fullyConnectedLayer(\n x: tf.Tensor2D,\n params: FCParams,\n): tf.Tensor2D {\n return tf.tidy(() => tf.add(\n tf.matMul(x, params.weights),\n params.bias,\n ));\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array, channelsIn: number, channelsOut: number): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const fc = extractFCParams(channelsIn, channelsOut, 'fc');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: extractFcParams('fc'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nexport function seperateWeightMaps(weightMap: tf.NamedTensorMap) {\n const featureExtractorMap: tf.NamedTensorMap = {};\n const classifierMap: tf.NamedTensorMap = {};\n\n Object.keys(weightMap).forEach((key) => {\n const map = key.startsWith('fc') ? classifierMap : featureExtractorMap;\n map[key] = weightMap[key];\n });\n\n return { featureExtractorMap, classifierMap };\n}\n", "export const FACE_EXPRESSION_LABELS = ['neutral', 'happy', 'sad', 'angry', 'fearful', 'disgusted', 'surprised'];\n\nexport class FaceExpressions {\n public neutral: number\n\n public happy: number\n\n public sad: number\n\n public angry: number\n\n public fearful: number\n\n public disgusted: number\n\n public surprised: number\n\n constructor(probabilities: number[] | Float32Array) {\n if (probabilities.length !== 7) {\n throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${probabilities.length}`);\n }\n\n FACE_EXPRESSION_LABELS.forEach((expression, idx) => {\n this[expression] = probabilities[idx];\n });\n }\n\n asSortedArray() {\n return FACE_EXPRESSION_LABELS\n .map((expression) => ({ expression, probability: this[expression] as number }))\n .sort((e0, e1) => e1.probability - e0.probability);\n }\n}\n", "import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\n\nexport type WithFaceExpressions = TSource & {\n expressions: FaceExpressions\n}\n\nexport function isWithFaceExpressions(obj: any): obj is WithFaceExpressions<{}> {\n return obj.expressions instanceof FaceExpressions;\n}\n\nexport function extendWithFaceExpressions<\n TSource\n>(\n sourceObj: TSource,\n expressions: FaceExpressions,\n): WithFaceExpressions {\n const extension = { expressions };\n return { ...sourceObj, ...extension };\n}\n", "import { IPoint, Point } from '../classes/index';\nimport { FaceExpressions } from '../faceExpressionNet/index';\nimport { isWithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { round } from '../utils/index';\nimport { DrawTextField } from './DrawTextField';\n\nexport type DrawFaceExpressionsInput = FaceExpressions | WithFaceExpressions<{}>\n\nexport function drawFaceExpressions(\n canvasArg: string | HTMLCanvasElement,\n faceExpressions: DrawFaceExpressionsInput | Array,\n minConfidence = 0.1,\n textFieldAnchor?: IPoint,\n) {\n const faceExpressionsArray = Array.isArray(faceExpressions) ? faceExpressions : [faceExpressions];\n\n faceExpressionsArray.forEach((e) => {\n // eslint-disable-next-line no-nested-ternary\n const expr = e instanceof FaceExpressions\n ? e\n : (isWithFaceExpressions(e) ? e.expressions : undefined);\n if (!expr) {\n throw new Error('drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof');\n }\n\n const sorted = expr.asSortedArray();\n const resultsToDisplay = sorted.filter((exprLocal) => exprLocal.probability > minConfidence);\n\n const anchor = isWithFaceDetection(e)\n ? e.detection.box.bottomLeft\n : (textFieldAnchor || new Point(0, 0));\n\n const drawTextField = new DrawTextField(\n resultsToDisplay.map((exprLocal) => `${exprLocal.expression} (${round(exprLocal.probability)})`),\n anchor,\n );\n drawTextField.draw(canvasArg);\n });\n}\n", "import { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { isWithFaceDetection, WithFaceDetection } from './WithFaceDetection';\n\nexport type WithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 > = TSource & {\n landmarks: TFaceLandmarks\n unshiftedLandmarks: TFaceLandmarks\n alignedRect: FaceDetection\n }\n\nexport function isWithFaceLandmarks(obj: any): obj is WithFaceLandmarks, FaceLandmarks> {\n return isWithFaceDetection(obj)\n // eslint-disable-next-line dot-notation\n && obj['landmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['unshiftedLandmarks'] instanceof FaceLandmarks\n // eslint-disable-next-line dot-notation\n && obj['alignedRect'] instanceof FaceDetection;\n}\n\nexport function extendWithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68 >(sourceObj: TSource, unshiftedLandmarks: TFaceLandmarks): WithFaceLandmarks {\n const { box: shift } = sourceObj.detection;\n const landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y);\n\n const rect = landmarks.align();\n const { imageDims } = sourceObj.detection;\n const alignedRect = new FaceDetection(sourceObj.detection.score, rect.rescale(imageDims.reverse()), imageDims);\n\n const extension = {\n landmarks,\n unshiftedLandmarks,\n alignedRect,\n };\n\n return { ...sourceObj, ...extension };\n}\n", "/* eslint-disable max-classes-per-file */\nimport { IPoint } from '../classes/index';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { drawContour } from './drawContour';\n\nexport interface IDrawFaceLandmarksOptions {\n drawLines?: boolean\n drawPoints?: boolean\n lineWidth?: number\n pointSize?: number\n lineColor?: string\n pointColor?: string\n}\n\nexport class DrawFaceLandmarksOptions {\n public drawLines: boolean\n\n public drawPoints: boolean\n\n public lineWidth: number\n\n public pointSize: number\n\n public lineColor: string\n\n public pointColor: string\n\n constructor(options: IDrawFaceLandmarksOptions = {}) {\n const {\n drawLines = true, drawPoints = true, lineWidth, lineColor, pointSize, pointColor,\n } = options;\n this.drawLines = drawLines;\n this.drawPoints = drawPoints;\n this.lineWidth = lineWidth || 1;\n this.pointSize = pointSize || 2;\n this.lineColor = lineColor || 'rgba(0, 255, 255, 1)';\n this.pointColor = pointColor || 'rgba(255, 0, 255, 1)';\n }\n}\n\nexport class DrawFaceLandmarks {\n public faceLandmarks: FaceLandmarks\n\n public options: DrawFaceLandmarksOptions\n\n constructor(\n faceLandmarks: FaceLandmarks,\n options: IDrawFaceLandmarksOptions = {},\n ) {\n this.faceLandmarks = faceLandmarks;\n this.options = new DrawFaceLandmarksOptions(options);\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg);\n\n const {\n drawLines, drawPoints, lineWidth, lineColor, pointSize, pointColor,\n } = this.options;\n\n if (drawLines && this.faceLandmarks instanceof FaceLandmarks68) {\n ctx.strokeStyle = lineColor;\n ctx.lineWidth = lineWidth;\n drawContour(ctx, this.faceLandmarks.getJawOutline());\n drawContour(ctx, this.faceLandmarks.getLeftEyeBrow());\n drawContour(ctx, this.faceLandmarks.getRightEyeBrow());\n drawContour(ctx, this.faceLandmarks.getNose());\n drawContour(ctx, this.faceLandmarks.getLeftEye(), true);\n drawContour(ctx, this.faceLandmarks.getRightEye(), true);\n drawContour(ctx, this.faceLandmarks.getMouth(), true);\n }\n\n if (drawPoints) {\n ctx.strokeStyle = pointColor;\n ctx.fillStyle = pointColor;\n\n const drawPoint = (pt: IPoint) => {\n ctx.beginPath();\n ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI);\n ctx.fill();\n };\n this.faceLandmarks.positions.forEach(drawPoint);\n }\n }\n}\n\nexport type DrawFaceLandmarksInput = FaceLandmarks | WithFaceLandmarks>\n\nexport function drawFaceLandmarks(\n canvasArg: string | HTMLCanvasElement,\n faceLandmarks: DrawFaceLandmarksInput | Array,\n) {\n const faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks];\n faceLandmarksArray.forEach((f) => {\n // eslint-disable-next-line no-nested-ternary\n const landmarks = f instanceof FaceLandmarks\n ? f\n : (isWithFaceLandmarks(f) ? f.landmarks : undefined);\n if (!landmarks) {\n throw new Error('drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof');\n }\n\n new DrawFaceLandmarks(landmarks).draw(canvasArg);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { seperateWeightMaps } from '../faceProcessor/util';\nimport { TinyXception } from '../xception/TinyXception';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport {\n AgeAndGenderPrediction, Gender, NetOutput, NetParams,\n} from './types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\n\nexport class AgeGenderNet extends NeuralNetwork {\n private _faceFeatureExtractor: TinyXception\n\n constructor(faceFeatureExtractor: TinyXception = new TinyXception(2)) {\n super('AgeGenderNet');\n this._faceFeatureExtractor = faceFeatureExtractor;\n }\n\n public get faceFeatureExtractor(): TinyXception {\n return this._faceFeatureExtractor;\n }\n\n public runNet(input: NetInput | tf.Tensor4D): NetOutput {\n const { params } = this;\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`);\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input;\n\n const pooled = tf.avgPool(bottleneckFeatures, [7, 7], [2, 2], 'valid').as2D(bottleneckFeatures.shape[0], -1);\n const age = fullyConnectedLayer(pooled, params.fc.age).as1D();\n const gender = fullyConnectedLayer(pooled, params.fc.gender);\n return { age, gender };\n });\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): NetOutput {\n return tf.tidy(() => {\n const { age, gender } = this.runNet(input);\n return { age, gender: tf.softmax(gender) };\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async predictAgeAndGender(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput);\n\n const ages = tf.unstack(out.age);\n const genders = tf.unstack(out.gender);\n const ageAndGenderTensors = ages.map((ageTensor, i) => ({\n ageTensor,\n genderTensor: genders[i],\n }));\n\n const predictionsByBatch = await Promise.all(\n ageAndGenderTensors.map(async ({ ageTensor, genderTensor }) => {\n const age = (await ageTensor.data())[0];\n const probMale = (await genderTensor.data())[0];\n const isMale = probMale > 0.5;\n const gender = isMale ? Gender.MALE : Gender.FEMALE;\n const genderProbability = isMale ? probMale : (1 - probMale);\n\n ageTensor.dispose();\n genderTensor.dispose();\n return { age, gender, genderProbability };\n }),\n );\n out.age.dispose();\n out.gender.dispose();\n\n return netInput.isBatchInput ? predictionsByBatch as AgeAndGenderPrediction[] : predictionsByBatch[0] as AgeAndGenderPrediction;\n }\n\n protected getDefaultModelName(): string {\n return 'age_gender_model';\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose);\n super.dispose(throwOnRedispose);\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights);\n this._params = params;\n this._paramMappings = paramMappings;\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights);\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap);\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\n\n return extractParamsFromWeigthMap(classifierMap);\n }\n\n protected extractParams(weights: Float32Array) {\n const classifierWeightSize = (512 * 1 + 1) + (512 * 2 + 2);\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\n const classifierWeights = weights.slice(weights.length - classifierWeightSize);\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\n return this.extractClassifierParams(classifierWeights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams, depthwiseSeparableConv } from '../common/index';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { range } from '../utils/index';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction conv(x: tf.Tensor4D, params: ConvParams, stride: [number, number]): tf.Tensor4D {\n return tf.add(tf.conv2d(x, params.filters, stride, 'same'), params.bias);\n}\n\nfunction reductionBlock(x: tf.Tensor4D, params: ReductionBlockParams, isActivateInput: boolean = true): tf.Tensor4D {\n let out = isActivateInput ? tf.relu(x) : x;\n out = depthwiseSeparableConv(out, params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = tf.maxPool(out, [3, 3], [2, 2], 'same');\n out = tf.add(out, conv(x, params.expansion_conv, [2, 2]));\n return out;\n}\n\nfunction mainBlock(x: tf.Tensor4D, params: MainBlockParams): tf.Tensor4D {\n let out = depthwiseSeparableConv(tf.relu(x), params.separable_conv0, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv2, [1, 1]);\n out = tf.add(out, x);\n return out;\n}\n\nexport class TinyXception extends NeuralNetwork {\n private _numMainBlocks: number\n\n constructor(numMainBlocks: number) {\n super('TinyXception');\n this._numMainBlocks = numMainBlocks;\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyXception - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = tf.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));\n out = reductionBlock(out, params.entry_flow.reduction_block_0, false);\n out = reductionBlock(out, params.entry_flow.reduction_block_1);\n\n range(this._numMainBlocks, 0, 1).forEach((idx) => {\n out = mainBlock(out, params.middle_flow[`main_block_${idx}`]);\n });\n\n out = reductionBlock(out, params.exit_flow.reduction_block);\n out = tf.relu(depthwiseSeparableConv(out, params.exit_flow.separable_conv, [1, 1]));\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_xception_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this._numMainBlocks);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights, this._numMainBlocks);\n }\n}\n", "import { extractConvParamsFactory, extractSeparableConvParamsFactory, extractWeightsFactory } from '../common/index';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n function extractReductionBlockParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(channels: number, mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParams(weights: Float32Array, numMainBlocks: number): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const entry_flow_conv_in = extractConvParams(3, 32, 3, 'entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams(32, 64, 'entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams(64, 128, 'entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(128, `middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams(128, 256, 'exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams(256, 512, 'exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { entry_flow, middle_flow, exit_flow },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n disposeUnusedWeightTensors,\n extractWeightEntryFactory,\n loadSeparableConvParamsFactory,\n ParamMapping,\n} from '../common/index';\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { range } from '../utils/index';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry);\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n function extractReductionBlockParams(mappedPrefix: string): ReductionBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const expansion_conv = extractConvParams(`${mappedPrefix}/expansion_conv`);\n\n return { separable_conv0, separable_conv1, expansion_conv };\n }\n\n function extractMainBlockParams(mappedPrefix: string): MainBlockParams {\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`);\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`);\n const separable_conv2 = extractSeparableConvParams(`${mappedPrefix}/separable_conv2`);\n\n return { separable_conv0, separable_conv1, separable_conv2 };\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n numMainBlocks: number,\n): { params: TinyXceptionParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const entry_flow_conv_in = extractConvParams('entry_flow/conv_in');\n const entry_flow_reduction_block_0 = extractReductionBlockParams('entry_flow/reduction_block_0');\n const entry_flow_reduction_block_1 = extractReductionBlockParams('entry_flow/reduction_block_1');\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1,\n };\n\n const middle_flow = {};\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(`middle_flow/main_block_${idx}`);\n });\n\n const exit_flow_reduction_block = extractReductionBlockParams('exit_flow/reduction_block');\n const exit_flow_separable_conv = extractSeparableConvParams('exit_flow/separable_conv');\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params: { entry_flow, middle_flow, exit_flow }, paramMappings };\n}\n", "import { extractFCParamsFactory, extractWeightsFactory, ParamMapping } from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\n\n const age = extractFCParams(512, 1, 'fc/age');\n const gender = extractFCParams(512, 2, 'fc/gender');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { fc: { age, gender } },\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping,\n} from '../common/index';\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractFcParams(prefix: string): FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { weights, bias };\n }\n\n const params = {\n fc: {\n age: extractFcParams('fc/age'),\n gender: extractFcParams('fc/gender'),\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FCParams } from '../common/index';\n\n// eslint-disable-next-line no-shadow\nexport enum Gender {\n // eslint-disable-next-line no-unused-vars\n FEMALE = 'female',\n // eslint-disable-next-line no-unused-vars\n MALE = 'male'\n}\n\nexport type AgeAndGenderPrediction = {\n age: number\n gender: Gender\n genderProbability: number\n}\n\nexport type NetOutput = { age: tf.Tensor1D, gender: tf.Tensor2D }\n\nexport type NetParams = {\n fc: {\n age: FCParams\n gender: FCParams\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { IDimensions, Point } from '../classes/index';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { FaceFeatureExtractorParams, TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { isEven } from '../utils/index';\n\nexport abstract class FaceLandmark68NetBase<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends FaceProcessor {\n public postProcess(output: tf.Tensor2D, inputSize: number, originalDimensions: IDimensions[]): tf.Tensor2D {\n const inputDimensions = originalDimensions.map(({ width, height }) => {\n const scale = inputSize / Math.max(height, width);\n return {\n width: width * scale,\n height: height * scale,\n };\n });\n\n const batchSize = inputDimensions.length;\n\n return tf.tidy(() => {\n const createInterleavedTensor = (fillX: number, fillY: number) => tf.stack([tf.fill([68], fillX, 'float32'), tf.fill([68], fillY, 'float32')], 1).as2D(1, 136).as1D();\n\n // eslint-disable-next-line no-unused-vars\n const getPadding = (batchIdx: number, cond: (w: number, h: number) => boolean): number => {\n const { width, height } = inputDimensions[batchIdx];\n return cond(width, height) ? Math.abs(width - height) / 2 : 0;\n };\n\n const getPaddingX = (batchIdx: number) => getPadding(batchIdx, (w, h) => w < h);\n const getPaddingY = (batchIdx: number) => getPadding(batchIdx, (w, h) => h < w);\n\n const landmarkTensors = output\n .mul(tf.fill([batchSize, 136], inputSize, 'float32'))\n .sub(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n getPaddingX(batchIdx),\n getPaddingY(batchIdx),\n ))))\n .div(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(\n inputDimensions[batchIdx].width,\n inputDimensions[batchIdx].height,\n ))));\n\n return landmarkTensors as tf.Tensor2D;\n });\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n return tf.tidy(() => {\n const out = this.runNet(input);\n return this.postProcess(\n out,\n input.inputSize as number,\n input.inputDimensions.map(([height, width]) => ({ height, width })),\n );\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async detectLandmarks(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n const landmarkTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const landmarksForBatch = await Promise.all(landmarkTensors.map(\n async (landmarkTensor, batchIdx) => {\n const landmarksArray = Array.from(await landmarkTensor.data());\n const xCoords = landmarksArray.filter((_, i) => isEven(i));\n const yCoords = landmarksArray.filter((_, i) => !isEven(i));\n\n return new FaceLandmarks68(\n Array(68).fill(0).map((_, i) => new Point(xCoords[i] as number, yCoords[i] as number)),\n {\n height: netInput.getInputHeight(batchIdx),\n width: netInput.getInputWidth(batchIdx),\n },\n );\n },\n ));\n\n landmarkTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput ? landmarksForBatch as FaceLandmarks68[] : landmarksForBatch[0] as FaceLandmarks68;\n }\n\n protected getClassifierChannelsOut(): number {\n return 136;\n }\n}\n", "import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68Net extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceLandmark68Net', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 256;\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { denseBlock3 } from './denseBlock';\nimport { extractParamsFromWeigthMapTiny } from './extractParamsFromWeigthMapTiny';\nimport { extractParamsTiny } from './extractParamsTiny';\nimport { IFaceFeatureExtractor, TinyFaceFeatureExtractorParams } from './types';\n\nexport class TinyFaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n constructor() {\n super('TinyFaceFeatureExtractor');\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyFaceFeatureExtractor - load model before inference');\n }\n\n return tf.tidy(() => {\n const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D;\n\n let out = denseBlock3(normalized, params.dense0, true);\n out = denseBlock3(out, params.dense1);\n out = denseBlock3(out, params.dense2);\n out = tf.avgPool(out, [14, 14], [2, 2], 'valid');\n\n return out;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_tiny_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMapTiny(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParamsTiny(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { disposeUnusedWeightTensors, ParamMapping } from '../common/index';\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMapTiny(\n weightMap: tf.NamedTensorMap,\n): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractDenseBlock3Params,\n } = loadParamsFactory(weightMap, paramMappings);\n\n const params = {\n dense0: extractDenseBlock3Params('dense0', true),\n dense1: extractDenseBlock3Params('dense1'),\n dense2: extractDenseBlock3Params('dense2'),\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import { extractWeightsFactory, ParamMapping } from '../common/index';\nimport { extractorsFactory } from './extractorsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsTiny(weights: Float32Array): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractDenseBlock3Params,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const dense0 = extractDenseBlock3Params(3, 32, 'dense0', true);\n const dense1 = extractDenseBlock3Params(32, 64, 'dense1');\n const dense2 = extractDenseBlock3Params(64, 128, 'dense2');\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n paramMappings,\n params: { dense0, dense1, dense2 },\n };\n}\n", "import { TinyFaceFeatureExtractor } from '../faceFeatureExtractor/TinyFaceFeatureExtractor';\nimport { TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68TinyNet extends FaceLandmark68NetBase {\n constructor(faceFeatureExtractor: TinyFaceFeatureExtractor = new TinyFaceFeatureExtractor()) {\n super('FaceLandmark68TinyNet', faceFeatureExtractor);\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_tiny_model';\n }\n\n protected getClassifierChannelsIn(): number {\n return 128;\n }\n}\n", "import { FaceLandmark68Net } from './FaceLandmark68Net';\n\nexport * from './FaceLandmark68Net';\nexport * from './FaceLandmark68TinyNet';\n\nexport class FaceLandmarkNet extends FaceLandmark68Net {}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { normalize } from '../ops/index';\nimport { convDown } from './convLayer';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { residual, residualDown } from './residualLayer';\nimport { NetParams } from './types';\n\nexport class FaceRecognitionNet extends NeuralNetwork {\n constructor() {\n super('FaceRecognitionNet');\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n const { params } = this;\n\n if (!params) {\n throw new Error('FaceRecognitionNet - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(150, true).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(150, true), 'float32');\n\n const meanRgb = [122.782, 117.001, 104.298];\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D;\n\n let out = convDown(normalized, params.conv32_down);\n out = tf.maxPool(out, 3, 2, 'valid');\n\n out = residual(out, params.conv32_1);\n out = residual(out, params.conv32_2);\n out = residual(out, params.conv32_3);\n\n out = residualDown(out, params.conv64_down);\n out = residual(out, params.conv64_1);\n out = residual(out, params.conv64_2);\n out = residual(out, params.conv64_3);\n\n out = residualDown(out, params.conv128_down);\n out = residual(out, params.conv128_1);\n out = residual(out, params.conv128_2);\n\n out = residualDown(out, params.conv256_down);\n out = residual(out, params.conv256_1);\n out = residual(out, params.conv256_2);\n out = residualDown(out, params.conv256_down_out);\n\n const globalAvg = out.mean([1, 2]) as tf.Tensor2D;\n const fullyConnected = tf.matMul(globalAvg, params.fc);\n\n return fullyConnected;\n });\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async computeFaceDescriptor(input: TNetInput): Promise {\n const netInput = await toNetInput(input);\n\n const faceDescriptorTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput)),\n );\n\n const faceDescriptorsForBatch = await Promise.all(faceDescriptorTensors.map(\n (t) => t.data(),\n )) as Float32Array[];\n\n faceDescriptorTensors.forEach((t) => t.dispose());\n\n return netInput.isBatchInput\n ? faceDescriptorsForBatch\n : faceDescriptorsForBatch[0];\n }\n\n protected getDefaultModelName(): string {\n return 'face_recognition_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { scale } from './scaleLayer';\nimport { ConvLayerParams } from './types';\n\nfunction convLayer(\n x: tf.Tensor4D,\n params: ConvLayerParams,\n strides: [number, number],\n withRelu: boolean,\n padding: 'valid' | 'same' = 'same',\n): tf.Tensor4D {\n const { filters, bias } = params.conv;\n\n let out = tf.conv2d(x, filters, strides, padding);\n out = tf.add(out, bias);\n out = scale(out, params.scale);\n return withRelu ? tf.relu(out) : out;\n}\n\nexport function conv(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], true);\n}\n\nexport function convNoRelu(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], false);\n}\n\nexport function convDown(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [2, 2], true, 'valid');\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ScaleLayerParams } from './types';\n\nexport function scale(x: tf.Tensor4D, params: ScaleLayerParams): tf.Tensor4D {\n return tf.add(tf.mul(x, params.weights), params.biases);\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n ConvParams, extractWeightsFactory, ExtractWeightsFunction, ParamMapping,\n} from '../common/index';\nimport { isFloat } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractFilterValues(numFilterValues: number, numFilters: number, filterSize: number): tf.Tensor4D {\n const weights = extractWeights(numFilterValues);\n const depth = weights.length / (numFilters * filterSize * filterSize);\n\n if (isFloat(depth)) {\n throw new Error(`depth has to be an integer: ${depth}, weights.length: ${weights.length}, numFilters: ${numFilters}, filterSize: ${filterSize}`);\n }\n\n return tf.tidy(\n () => tf.transpose(\n tf.tensor4d(weights, [numFilters, depth, filterSize, filterSize]),\n [2, 3, 1, 0],\n ),\n );\n }\n\n function extractConvParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvParams {\n const filters = extractFilterValues(numFilterValues, numFilters, filterSize);\n const bias = tf.tensor1d(extractWeights(numFilters));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` },\n );\n\n return { filters, bias };\n }\n\n function extractScaleLayerParams(numWeights: number, mappedPrefix: string): ScaleLayerParams {\n const weights = tf.tensor1d(extractWeights(numWeights));\n const biases = tf.tensor1d(extractWeights(numWeights));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/biases` },\n );\n\n return {\n weights,\n biases,\n };\n }\n\n function extractConvLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n ): ConvLayerParams {\n const conv = extractConvParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv`);\n const scale = extractScaleLayerParams(numFilters, `${mappedPrefix}/scale`);\n\n return { conv, scale };\n }\n\n function extractResidualLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n isDown: boolean = false,\n ): ResidualLayerParams {\n const conv1 = extractConvLayerParams((isDown ? 0.5 : 1) * numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv1`);\n const conv2 = extractConvLayerParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv2`);\n\n return { conv1, conv2 };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const conv32_down = extractConvLayerParams(4704, 32, 7, 'conv32_down');\n const conv32_1 = extractResidualLayerParams(9216, 32, 3, 'conv32_1');\n const conv32_2 = extractResidualLayerParams(9216, 32, 3, 'conv32_2');\n const conv32_3 = extractResidualLayerParams(9216, 32, 3, 'conv32_3');\n\n const conv64_down = extractResidualLayerParams(36864, 64, 3, 'conv64_down', true);\n const conv64_1 = extractResidualLayerParams(36864, 64, 3, 'conv64_1');\n const conv64_2 = extractResidualLayerParams(36864, 64, 3, 'conv64_2');\n const conv64_3 = extractResidualLayerParams(36864, 64, 3, 'conv64_3');\n\n const conv128_down = extractResidualLayerParams(147456, 128, 3, 'conv128_down', true);\n const conv128_1 = extractResidualLayerParams(147456, 128, 3, 'conv128_1');\n const conv128_2 = extractResidualLayerParams(147456, 128, 3, 'conv128_2');\n\n const conv256_down = extractResidualLayerParams(589824, 256, 3, 'conv256_down', true);\n const conv256_1 = extractResidualLayerParams(589824, 256, 3, 'conv256_1');\n const conv256_2 = extractResidualLayerParams(589824, 256, 3, 'conv256_2');\n const conv256_down_out = extractResidualLayerParams(589824, 256, 3, 'conv256_down_out');\n\n const fc = tf.tidy(\n () => tf.transpose(tf.tensor2d(extractWeights(256 * 128), [128, 256]), [1, 0]),\n );\n paramMappings.push({ paramPath: 'fc' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping } from '../common/index';\nimport { isTensor2D } from '../utils/index';\nimport {\n ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractScaleLayerParams(prefix: string): ScaleLayerParams {\n const weights = extractWeightEntry(`${prefix}/scale/weights`, 1);\n const biases = extractWeightEntry(`${prefix}/scale/biases`, 1);\n\n return { weights, biases };\n }\n\n function extractConvLayerParams(prefix: string): ConvLayerParams {\n const filters = extractWeightEntry(`${prefix}/conv/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/conv/bias`, 1);\n const scale = extractScaleLayerParams(prefix);\n\n return { conv: { filters, bias }, scale };\n }\n\n function extractResidualLayerParams(prefix: string): ResidualLayerParams {\n return {\n conv1: extractConvLayerParams(`${prefix}/conv1`),\n conv2: extractConvLayerParams(`${prefix}/conv2`),\n };\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const conv32_down = extractConvLayerParams('conv32_down');\n const conv32_1 = extractResidualLayerParams('conv32_1');\n const conv32_2 = extractResidualLayerParams('conv32_2');\n const conv32_3 = extractResidualLayerParams('conv32_3');\n\n const conv64_down = extractResidualLayerParams('conv64_down');\n const conv64_1 = extractResidualLayerParams('conv64_1');\n const conv64_2 = extractResidualLayerParams('conv64_2');\n const conv64_3 = extractResidualLayerParams('conv64_3');\n\n const conv128_down = extractResidualLayerParams('conv128_down');\n const conv128_1 = extractResidualLayerParams('conv128_1');\n const conv128_2 = extractResidualLayerParams('conv128_2');\n\n const conv256_down = extractResidualLayerParams('conv256_down');\n const conv256_1 = extractResidualLayerParams('conv256_1');\n const conv256_2 = extractResidualLayerParams('conv256_2');\n const conv256_down_out = extractResidualLayerParams('conv256_down_out');\n\n const { fc } = weightMap;\n paramMappings.push({ originalPath: 'fc', paramPath: 'fc' });\n\n if (!isTensor2D(fc)) {\n throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${fc}`);\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc,\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { conv, convDown, convNoRelu } from './convLayer';\nimport { ResidualLayerParams } from './types';\n\nexport function residual(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = conv(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n out = tf.add(out, x);\n out = tf.relu(out);\n return out;\n}\n\nexport function residualDown(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = convDown(x, params.conv1);\n out = convNoRelu(out, params.conv2);\n\n let pooled = tf.avgPool(x, 2, 2, 'valid') as tf.Tensor4D;\n const zeros = tf.zeros(pooled.shape);\n const isPad = pooled.shape[3] !== out.shape[3];\n const isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2];\n\n if (isAdjustShape) {\n const padShapeX = [...out.shape] as [number, number, number, number];\n padShapeX[1] = 1;\n const zerosW = tf.zeros(padShapeX);\n out = tf.concat([out, zerosW], 1);\n\n const padShapeY = [...out.shape] as [number, number, number, number];\n padShapeY[2] = 1;\n const zerosH = tf.zeros(padShapeY);\n out = tf.concat([out, zerosH], 2);\n }\n\n pooled = isPad ? tf.concat([pooled, zeros], 3) : pooled;\n out = tf.add(pooled, out) as tf.Tensor4D;\n\n out = tf.relu(out);\n return out;\n}\n", "import { FaceRecognitionNet } from './FaceRecognitionNet';\n\nexport * from './FaceRecognitionNet';\n\nexport function createFaceRecognitionNet(weights: Float32Array) {\n const net = new FaceRecognitionNet();\n net.extractWeights(weights);\n return net;\n}\n", "export type WithFaceDescriptor = TSource & {\n descriptor: Float32Array\n}\n\nexport function extendWithFaceDescriptor<\n TSource\n>(\n sourceObj: TSource,\n descriptor: Float32Array,\n): WithFaceDescriptor {\n const extension = { descriptor };\n return { ...sourceObj, ...extension };\n}\n", "export type WithAge = TSource & {\n age: number\n}\n\nexport function isWithAge(obj: any): obj is WithAge<{}> {\n return typeof obj.age === 'number';\n}\n\nexport function extendWithAge<\n TSource\n>(\n sourceObj: TSource,\n age: number,\n): WithAge {\n const extension = { age };\n return { ...sourceObj, ...extension };\n}\n", "import { Gender } from '../ageGenderNet/types';\nimport { isValidProbablitiy } from '../utils/index';\n\nexport type WithGender = TSource & {\n gender: Gender\n genderProbability: number\n}\n\nexport function isWithGender(obj: any): obj is WithGender<{}> {\n return (obj.gender === Gender.MALE || obj.gender === Gender.FEMALE)\n && isValidProbablitiy(obj.genderProbability);\n}\n\nexport function extendWithGender<\n TSource\n>(\n sourceObj: TSource,\n gender: Gender,\n genderProbability: number,\n): WithGender {\n const extension = { gender, genderProbability };\n return { ...sourceObj, ...extension };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { Rect } from '../classes/index';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { NetInput, TNetInput, toNetInput } from '../dom/index';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { mobileNetV1 } from './mobileNetV1';\nimport { nonMaxSuppression } from './nonMaxSuppression';\nimport { outputLayer } from './outputLayer';\nimport { predictionLayer } from './predictionLayer';\nimport { ISsdMobilenetv1Options, SsdMobilenetv1Options } from './SsdMobilenetv1Options';\nimport { NetParams } from './types';\n\nexport class SsdMobilenetv1 extends NeuralNetwork {\n constructor() {\n super('SsdMobilenetv1');\n }\n\n public forwardInput(input: NetInput) {\n const { params } = this;\n\n if (!params) {\n throw new Error('SsdMobilenetv1 - load model before inference');\n }\n\n return tf.tidy(() => {\n // const batchTensor = input.toBatchTensor(512, false).toFloat()\n const batchTensor = tf.cast(input.toBatchTensor(512, false), 'float32');\n\n const x = tf.sub(tf.mul(batchTensor, tf.scalar(0.007843137718737125)), tf.scalar(1)) as tf.Tensor4D;\n const features = mobileNetV1(x, params.mobilenetv1);\n\n const {\n boxPredictions,\n classPredictions,\n } = predictionLayer(features.out, features.conv11, params.prediction_layer);\n\n return outputLayer(boxPredictions, classPredictions, params.output_layer);\n });\n }\n\n public async forward(input: TNetInput) {\n return this.forwardInput(await toNetInput(input));\n }\n\n public async locateFaces(\n input: TNetInput,\n options: ISsdMobilenetv1Options = {},\n ): Promise {\n const { maxResults, minConfidence } = new SsdMobilenetv1Options(options);\n\n const netInput = await toNetInput(input);\n\n const {\n boxes: _boxes,\n scores: _scores,\n } = this.forwardInput(netInput);\n\n // TODO batches\n const boxes = _boxes[0];\n const scores = _scores[0];\n for (let i = 1; i < _boxes.length; i++) {\n _boxes[i].dispose();\n _scores[i].dispose();\n }\n\n // TODO find a better way to filter by minConfidence\n const scoresData = Array.from(await scores.data());\n\n const iouThreshold = 0.5;\n const indices = nonMaxSuppression(\n boxes,\n scoresData as number[],\n maxResults,\n iouThreshold,\n minConfidence,\n );\n\n const reshapedDims = netInput.getReshapedInputDimensions(0);\n const inputSize = netInput.inputSize as number;\n const padX = inputSize / reshapedDims.width;\n const padY = inputSize / reshapedDims.height;\n\n const boxesData = boxes.arraySync();\n const results = indices\n .map((idx) => {\n const [top, bottom] = [\n Math.max(0, boxesData[idx][0]),\n Math.min(1.0, boxesData[idx][2]),\n ].map((val) => val * padY);\n const [left, right] = [\n Math.max(0, boxesData[idx][1]),\n Math.min(1.0, boxesData[idx][3]),\n ].map((val) => val * padX);\n return new FaceDetection(\n scoresData[idx] as number,\n new Rect(\n left,\n top,\n right - left,\n bottom - top,\n ),\n {\n height: netInput.getInputHeight(0),\n width: netInput.getInputWidth(0),\n },\n );\n });\n\n boxes.dispose();\n scores.dispose();\n\n return results;\n }\n\n protected getDefaultModelName(): string {\n return 'ssd_mobilenetv1_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap);\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n ExtractWeightsFunction, ParamMapping, ConvParams, extractWeightsFactory,\n} from '../common/index';\nimport {\n MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n function extractDepthwiseConvParams(numChannels: number, mappedPrefix: string): MobileNetV1.DepthwiseConvParams {\n const filters = tf.tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]);\n const batch_norm_scale = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_offset = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_mean = tf.tensor1d(extractWeights(numChannels));\n const batch_norm_variance = tf.tensor1d(extractWeights(numChannels));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/batch_norm_scale` },\n { paramPath: `${mappedPrefix}/batch_norm_offset` },\n { paramPath: `${mappedPrefix}/batch_norm_mean` },\n { paramPath: `${mappedPrefix}/batch_norm_variance` },\n );\n\n return {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n };\n }\n\n function extractConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n isPointwiseConv?: boolean,\n ): ConvParams {\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut],\n );\n const bias = tf.tensor1d(extractWeights(channelsOut));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/${isPointwiseConv ? 'batch_norm_offset' : 'bias'}` },\n );\n\n return { filters, bias };\n }\n\n function extractPointwiseConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n ): PointwiseConvParams {\n const {\n filters,\n bias,\n } = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true);\n\n return {\n filters,\n batch_norm_offset: bias,\n };\n }\n\n function extractConvPairParams(\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string,\n ): MobileNetV1.ConvPairParams {\n const depthwise_conv = extractDepthwiseConvParams(channelsIn, `${mappedPrefix}/depthwise_conv`);\n const pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/pointwise_conv`);\n\n return { depthwise_conv, pointwise_conv };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n const conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0');\n\n const conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1');\n const conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2');\n const conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3');\n const conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4');\n const conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5');\n const conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6');\n const conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7');\n const conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8');\n const conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9');\n const conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10');\n const conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11');\n const conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12');\n const conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13');\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n conv_8,\n conv_9,\n conv_10,\n conv_11,\n conv_12,\n conv_13,\n };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n const conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0');\n const conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1');\n const conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2');\n const conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3');\n const conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4');\n const conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5');\n const conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6');\n const conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7');\n\n const box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor');\n const class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor');\n const box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor');\n const class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor');\n const box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor');\n const class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor');\n const box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor');\n const class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor');\n const box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor');\n const class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor');\n const box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor');\n const class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor');\n\n const box_predictor_0 = {\n box_encoding_predictor: box_encoding_0_predictor,\n class_predictor: class_predictor_0,\n };\n const box_predictor_1 = {\n box_encoding_predictor: box_encoding_1_predictor,\n class_predictor: class_predictor_1,\n };\n const box_predictor_2 = {\n box_encoding_predictor: box_encoding_2_predictor,\n class_predictor: class_predictor_2,\n };\n const box_predictor_3 = {\n box_encoding_predictor: box_encoding_3_predictor,\n class_predictor: class_predictor_3,\n };\n const box_predictor_4 = {\n box_encoding_predictor: box_encoding_4_predictor,\n class_predictor: class_predictor_4,\n };\n const box_predictor_5 = {\n box_encoding_predictor: box_encoding_5_predictor,\n class_predictor: class_predictor_5,\n };\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n box_predictor_0,\n box_predictor_1,\n box_predictor_2,\n box_predictor_3,\n box_predictor_4,\n box_predictor_5,\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n const mobilenetv1 = extractMobilenetV1Params();\n const prediction_layer = extractPredictionLayerParams();\n const extra_dim = tf.tensor3d(\n extractWeights(5118 * 4),\n [1, 5118, 4],\n );\n const output_layer = {\n extra_dim,\n };\n\n paramMappings.push({ paramPath: 'output_layer/extra_dim' });\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return {\n params: {\n mobilenetv1,\n prediction_layer,\n output_layer,\n },\n paramMappings,\n };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport {\n ConvParams, disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping,\n} from '../common/index';\nimport { isTensor3D } from '../utils/index';\nimport {\n BoxPredictionParams, MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams,\n} from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractPointwiseConvParams(prefix: string, idx: number, mappedPrefix: string): PointwiseConvParams {\n const filters = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/weights`, 4, `${mappedPrefix}/filters`);\n const batch_norm_offset = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/convolution_bn_offset`, 1, `${mappedPrefix}/batch_norm_offset`);\n\n return { filters, batch_norm_offset };\n }\n\n function extractConvPairParams(idx: number): MobileNetV1.ConvPairParams {\n const mappedPrefix = `mobilenetv1/conv_${idx}`;\n const prefixDepthwiseConv = `MobilenetV1/Conv2d_${idx}_depthwise`;\n const mappedPrefixDepthwiseConv = `${mappedPrefix}/depthwise_conv`;\n const mappedPrefixPointwiseConv = `${mappedPrefix}/pointwise_conv`;\n\n const filters = extractWeightEntry(`${prefixDepthwiseConv}/depthwise_weights`, 4, `${mappedPrefixDepthwiseConv}/filters`);\n const batch_norm_scale = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/gamma`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_scale`);\n const batch_norm_offset = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/beta`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_offset`);\n const batch_norm_mean = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_mean`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_mean`);\n const batch_norm_variance = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_variance`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_variance`);\n\n return {\n depthwise_conv: {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance,\n },\n pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv),\n };\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n return {\n conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'),\n conv_1: extractConvPairParams(1),\n conv_2: extractConvPairParams(2),\n conv_3: extractConvPairParams(3),\n conv_4: extractConvPairParams(4),\n conv_5: extractConvPairParams(5),\n conv_6: extractConvPairParams(6),\n conv_7: extractConvPairParams(7),\n conv_8: extractConvPairParams(8),\n conv_9: extractConvPairParams(9),\n conv_10: extractConvPairParams(10),\n conv_11: extractConvPairParams(11),\n conv_12: extractConvPairParams(12),\n conv_13: extractConvPairParams(13),\n };\n }\n\n function extractConvParams(prefix: string, mappedPrefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/weights`, 4, `${mappedPrefix}/filters`);\n const bias = extractWeightEntry(`${prefix}/biases`, 1, `${mappedPrefix}/bias`);\n\n return { filters, bias };\n }\n\n function extractBoxPredictorParams(idx: number): BoxPredictionParams {\n const box_encoding_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/BoxEncodingPredictor`,\n `prediction_layer/box_predictor_${idx}/box_encoding_predictor`,\n );\n const class_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/ClassPredictor`,\n `prediction_layer/box_predictor_${idx}/class_predictor`,\n );\n\n return { box_encoding_predictor, class_predictor };\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n return {\n conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'),\n conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'),\n conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'),\n conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'),\n conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'),\n conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'),\n conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'),\n conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'),\n box_predictor_0: extractBoxPredictorParams(0),\n box_predictor_1: extractBoxPredictorParams(1),\n box_predictor_2: extractBoxPredictorParams(2),\n box_predictor_3: extractBoxPredictorParams(3),\n box_predictor_4: extractBoxPredictorParams(4),\n box_predictor_5: extractBoxPredictorParams(5),\n };\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n): { params: NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n const extra_dim = weightMap['Output/extra_dim'];\n paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' });\n\n if (!isTensor3D(extra_dim)) {\n throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${extra_dim}`);\n }\n\n const params = {\n mobilenetv1: extractMobilenetV1Params(),\n prediction_layer: extractPredictionLayerParams(),\n output_layer: {\n extra_dim,\n },\n };\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { MobileNetV1 } from './types';\n\nconst epsilon = 0.0010000000474974513;\n\nfunction depthwiseConvLayer(\n x: tf.Tensor4D,\n params: MobileNetV1.DepthwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.depthwiseConv2d(x, params.filters, strides, 'same');\n out = tf.batchNorm(\n out,\n params.batch_norm_mean,\n params.batch_norm_variance,\n params.batch_norm_offset,\n params.batch_norm_scale,\n epsilon,\n );\n return tf.clipByValue(out, 0, 6);\n });\n}\n\nfunction getStridesForLayerIdx(layerIdx: number): [number, number] {\n return [2, 4, 6, 12].some((idx) => idx === layerIdx) ? [2, 2] : [1, 1];\n}\n\nexport function mobileNetV1(x: tf.Tensor4D, params: MobileNetV1.Params) {\n return tf.tidy(() => {\n let conv11;\n let out = pointwiseConvLayer(x, params.conv_0, [2, 2]);\n\n const convPairParams = [\n params.conv_1,\n params.conv_2,\n params.conv_3,\n params.conv_4,\n params.conv_5,\n params.conv_6,\n params.conv_7,\n params.conv_8,\n params.conv_9,\n params.conv_10,\n params.conv_11,\n params.conv_12,\n params.conv_13,\n ];\n\n convPairParams.forEach((param, i) => {\n const layerIdx = i + 1;\n const depthwiseConvStrides = getStridesForLayerIdx(layerIdx);\n out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides);\n out = pointwiseConvLayer(out, param.pointwise_conv, [1, 1]);\n if (layerIdx === 11) {\n conv11 = out;\n }\n });\n\n if (conv11 === null) {\n throw new Error('mobileNetV1 - output of conv layer 11 is null');\n }\n\n return {\n out,\n conv11: conv11 as any,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { PointwiseConvParams } from './types';\n\nexport function pointwiseConvLayer(\n x: tf.Tensor4D,\n params: PointwiseConvParams,\n strides: [number, number],\n) {\n return tf.tidy(() => {\n let out = tf.conv2d(x, params.filters, strides, 'same');\n out = tf.add(out, params.batch_norm_offset);\n return tf.clipByValue(out, 0, 6);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nfunction IOU(boxes: tf.Tensor2D, i: number, j: number) {\n const boxesData = boxes.arraySync();\n const yminI = Math.min(boxesData[i][0], boxesData[i][2]);\n const xminI = Math.min(boxesData[i][1], boxesData[i][3]);\n const ymaxI = Math.max(boxesData[i][0], boxesData[i][2]);\n const xmaxI = Math.max(boxesData[i][1], boxesData[i][3]);\n const yminJ = Math.min(boxesData[j][0], boxesData[j][2]);\n const xminJ = Math.min(boxesData[j][1], boxesData[j][3]);\n const ymaxJ = Math.max(boxesData[j][0], boxesData[j][2]);\n const xmaxJ = Math.max(boxesData[j][1], boxesData[j][3]);\n const areaI = (ymaxI - yminI) * (xmaxI - xminI);\n const areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ);\n if (areaI <= 0 || areaJ <= 0) {\n return 0.0;\n }\n const intersectionYmin = Math.max(yminI, yminJ);\n const intersectionXmin = Math.max(xminI, xminJ);\n const intersectionYmax = Math.min(ymaxI, ymaxJ);\n const intersectionXmax = Math.min(xmaxI, xmaxJ);\n const intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0)\n * Math.max(intersectionXmax - intersectionXmin, 0.0);\n return intersectionArea / (areaI + areaJ - intersectionArea);\n}\n\nexport function nonMaxSuppression(\n boxes: tf.Tensor2D,\n scores: number[],\n maxOutputSize: number,\n iouThreshold: number,\n scoreThreshold: number,\n): number[] {\n const numBoxes = boxes.shape[0];\n const outputSize = Math.min(\n maxOutputSize,\n numBoxes,\n );\n\n const candidates = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .filter((c) => c.score > scoreThreshold)\n .sort((c1, c2) => c2.score - c1.score);\n\n const suppressFunc = (x: number) => (x <= iouThreshold ? 1 : 0);\n\n const selected: number[] = [];\n\n candidates.forEach((c) => {\n if (selected.length >= outputSize) {\n return;\n }\n const originalScore = c.score;\n\n for (let j = selected.length - 1; j >= 0; --j) {\n const iou = IOU(boxes, c.boxIndex, selected[j]);\n if (iou === 0.0) continue;\n c.score *= suppressFunc(iou);\n if (c.score <= scoreThreshold) break;\n }\n if (originalScore === c.score) {\n selected.push(c.boxIndex);\n }\n });\n\n return selected;\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { OutputLayerParams } from './types';\n\nfunction getCenterCoordinatesAndSizesLayer(x: tf.Tensor2D) {\n const vec = tf.unstack(tf.transpose(x, [1, 0]));\n\n const sizes = [\n tf.sub(vec[2], vec[0]),\n tf.sub(vec[3], vec[1]),\n ];\n\n const centers = [\n tf.add(vec[0], tf.div(sizes[0], tf.scalar(2))),\n tf.add(vec[1], tf.div(sizes[1], tf.scalar(2))),\n ];\n\n return {\n sizes,\n centers,\n };\n}\n\nfunction decodeBoxesLayer(x0: tf.Tensor2D, x1: tf.Tensor2D) {\n const {\n sizes,\n centers,\n } = getCenterCoordinatesAndSizesLayer(x0);\n\n const vec = tf.unstack(tf.transpose(x1, [1, 0]));\n\n const div0_out = tf.div(tf.mul(tf.exp(tf.div(vec[2], tf.scalar(5))), sizes[0]), tf.scalar(2));\n const add0_out = tf.add(tf.mul(tf.div(vec[0], tf.scalar(10)), sizes[0]), centers[0]);\n\n const div1_out = tf.div(tf.mul(tf.exp(tf.div(vec[3], tf.scalar(5))), sizes[1]), tf.scalar(2));\n const add1_out = tf.add(tf.mul(tf.div(vec[1], tf.scalar(10)), sizes[1]), centers[1]);\n\n return tf.transpose(\n tf.stack([\n tf.sub(add0_out, div0_out),\n tf.sub(add1_out, div1_out),\n tf.add(add0_out, div0_out),\n tf.add(add1_out, div1_out),\n ]),\n [1, 0],\n );\n}\n\nexport function outputLayer(\n boxPredictions: tf.Tensor4D,\n classPredictions: tf.Tensor4D,\n params: OutputLayerParams,\n) {\n return tf.tidy(() => {\n const batchSize = boxPredictions.shape[0];\n\n let boxes = decodeBoxesLayer(\n tf.reshape(tf.tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]) as tf.Tensor2D,\n tf.reshape(boxPredictions, [-1, 4]) as tf.Tensor2D,\n );\n boxes = tf.reshape(\n boxes,\n [batchSize, (boxes.shape[0] / batchSize), 4],\n );\n\n const scoresAndClasses = tf.sigmoid(tf.slice(classPredictions, [0, 0, 1], [-1, -1, -1]));\n let scores = tf.slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]) as tf.Tensor;\n\n scores = tf.reshape(\n scores,\n [batchSize, scores.shape[1] as number],\n );\n\n const boxesByBatch = tf.unstack(boxes) as tf.Tensor2D[];\n const scoresByBatch = tf.unstack(scores) as tf.Tensor1D[];\n\n return {\n boxes: boxesByBatch,\n scores: scoresByBatch,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { boxPredictionLayer } from './boxPredictionLayer';\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { PredictionLayerParams } from './types';\n\nexport function predictionLayer(\n x: tf.Tensor4D,\n conv11: tf.Tensor4D,\n params: PredictionLayerParams,\n) {\n return tf.tidy(() => {\n const conv0 = pointwiseConvLayer(x, params.conv_0, [1, 1]);\n const conv1 = pointwiseConvLayer(conv0, params.conv_1, [2, 2]);\n const conv2 = pointwiseConvLayer(conv1, params.conv_2, [1, 1]);\n const conv3 = pointwiseConvLayer(conv2, params.conv_3, [2, 2]);\n const conv4 = pointwiseConvLayer(conv3, params.conv_4, [1, 1]);\n const conv5 = pointwiseConvLayer(conv4, params.conv_5, [2, 2]);\n const conv6 = pointwiseConvLayer(conv5, params.conv_6, [1, 1]);\n const conv7 = pointwiseConvLayer(conv6, params.conv_7, [2, 2]);\n\n const boxPrediction0 = boxPredictionLayer(conv11, params.box_predictor_0);\n const boxPrediction1 = boxPredictionLayer(x, params.box_predictor_1);\n const boxPrediction2 = boxPredictionLayer(conv1, params.box_predictor_2);\n const boxPrediction3 = boxPredictionLayer(conv3, params.box_predictor_3);\n const boxPrediction4 = boxPredictionLayer(conv5, params.box_predictor_4);\n const boxPrediction5 = boxPredictionLayer(conv7, params.box_predictor_5);\n\n const boxPredictions = tf.concat([\n boxPrediction0.boxPredictionEncoding,\n boxPrediction1.boxPredictionEncoding,\n boxPrediction2.boxPredictionEncoding,\n boxPrediction3.boxPredictionEncoding,\n boxPrediction4.boxPredictionEncoding,\n boxPrediction5.boxPredictionEncoding,\n ], 1) as tf.Tensor4D;\n\n const classPredictions = tf.concat([\n boxPrediction0.classPrediction,\n boxPrediction1.classPrediction,\n boxPrediction2.classPrediction,\n boxPrediction3.classPrediction,\n boxPrediction4.classPrediction,\n boxPrediction5.classPrediction,\n ], 1) as tf.Tensor4D;\n\n return {\n boxPredictions,\n classPredictions,\n };\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { convLayer } from '../common/index';\nimport { BoxPredictionParams } from './types';\n\nexport function boxPredictionLayer(\n x: tf.Tensor4D,\n params: BoxPredictionParams,\n) {\n return tf.tidy(() => {\n const batchSize = x.shape[0];\n\n const boxPredictionEncoding = tf.reshape(\n convLayer(x, params.box_encoding_predictor),\n [batchSize, -1, 1, 4],\n );\n const classPrediction = tf.reshape(\n convLayer(x, params.class_predictor),\n [batchSize, -1, 3],\n );\n\n return {\n boxPredictionEncoding,\n classPrediction,\n };\n });\n}\n", "export interface ISsdMobilenetv1Options {\n minConfidence?: number\n maxResults?: number\n}\n\nexport class SsdMobilenetv1Options {\n protected _name: string = 'SsdMobilenetv1Options'\n\n private _minConfidence: number\n\n private _maxResults: number\n\n constructor({ minConfidence, maxResults }: ISsdMobilenetv1Options = {}) {\n this._minConfidence = minConfidence || 0.5;\n this._maxResults = maxResults || 100;\n\n if (typeof this._minConfidence !== 'number' || this._minConfidence <= 0 || this._minConfidence >= 1) {\n throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);\n }\n\n if (typeof this._maxResults !== 'number') {\n throw new Error(`${this._name} - expected maxResults to be a number`);\n }\n }\n\n get minConfidence(): number { return this._minConfidence; }\n\n get maxResults(): number { return this._maxResults; }\n}\n", "import { SsdMobilenetv1 } from './SsdMobilenetv1';\n\nexport * from './SsdMobilenetv1';\nexport * from './SsdMobilenetv1Options';\n\nexport function createSsdMobilenetv1(weights: Float32Array) {\n const net = new SsdMobilenetv1();\n net.extractWeights(weights);\n return net;\n}\n\nexport function createFaceDetectionNet(weights: Float32Array) {\n return createSsdMobilenetv1(weights);\n}\n\n// alias for backward compatibily\nexport class FaceDetectionNet extends SsdMobilenetv1 {}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(0.738768, 0.874946),\n new Point(2.42204, 2.65704),\n new Point(4.30971, 7.04493),\n new Point(10.246, 4.59428),\n new Point(12.6868, 11.8741),\n];\n\nexport const BOX_ANCHORS_SEPARABLE = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB_SEPARABLE: [number, number, number] = [117.001, 114.697, 97.404];\n\nexport const DEFAULT_MODEL_NAME = 'tiny_yolov2_model';\nexport const DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model';\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { BoundingBox } from '../classes/BoundingBox';\nimport { Dimensions } from '../classes/Dimensions';\nimport { ObjectDetection } from '../classes/ObjectDetection';\nimport { convLayer } from '../common/index';\nimport { ConvParams, SeparableConvParams } from '../common/types';\nimport { toNetInput } from '../dom/index';\nimport { NetInput } from '../dom/NetInput';\nimport { TNetInput } from '../dom/types';\nimport { NeuralNetwork } from '../NeuralNetwork';\nimport { sigmoid } from '../ops/index';\nimport { nonMaxSuppression } from '../ops/nonMaxSuppression';\nimport { normalize } from '../ops/normalize';\nimport { TinyYolov2Config, validateConfig } from './config';\nimport { convWithBatchNorm } from './convWithBatchNorm';\nimport { depthwiseSeparableConv } from './depthwiseSeparableConv';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { leaky } from './leaky';\nimport { ITinyYolov2Options, TinyYolov2Options } from './TinyYolov2Options';\nimport { DefaultTinyYolov2NetParams, MobilenetParams, TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2Base extends NeuralNetwork {\n public static DEFAULT_FILTER_SIZES = [\n 3, 16, 32, 64, 128, 256, 512, 1024, 1024,\n ]\n\n private _config: TinyYolov2Config\n\n constructor(config: TinyYolov2Config) {\n super('TinyYolov2');\n validateConfig(config);\n this._config = config;\n }\n\n public get config(): TinyYolov2Config {\n return this._config;\n }\n\n public get withClassScores(): boolean {\n return this.config.withClassScores || this.config.classes.length > 1;\n }\n\n public get boxEncodingSize(): number {\n return 5 + (this.withClassScores ? this.config.classes.length : 0);\n }\n\n public runTinyYolov2(x: tf.Tensor4D, params: DefaultTinyYolov2NetParams): tf.Tensor4D {\n let out = convWithBatchNorm(x, params.conv0);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = convWithBatchNorm(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = convWithBatchNorm(out, params.conv6);\n out = convWithBatchNorm(out, params.conv7);\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public runMobilenet(x: tf.Tensor4D, params: MobilenetParams): tf.Tensor4D {\n let out = this.config.isFirstLayerConv2d\n ? leaky(convLayer(x, params.conv0 as ConvParams, 'valid', false))\n : depthwiseSeparableConv(x, params.conv0 as SeparableConvParams);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv1);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv2);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv3);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv4);\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\n out = depthwiseSeparableConv(out, params.conv5);\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\n out = params.conv6 ? depthwiseSeparableConv(out, params.conv6) : out;\n out = params.conv7 ? depthwiseSeparableConv(out, params.conv7) : out;\n\n return convLayer(out, params.conv8, 'valid', false);\n }\n\n public forwardInput(input: NetInput, inputSize: number): tf.Tensor4D {\n const { params } = this;\n\n if (!params) {\n throw new Error('TinyYolov2 - load model before inference');\n }\n\n return tf.tidy(() => {\n // let batchTensor = input.toBatchTensor(inputSize, false).toFloat()\n let batchTensor = tf.cast(input.toBatchTensor(inputSize, false), 'float32');\n batchTensor = this.config.meanRgb\n ? normalize(batchTensor, this.config.meanRgb)\n : batchTensor;\n batchTensor = batchTensor.div(tf.scalar(256)) as tf.Tensor4D;\n\n return this.config.withSeparableConvs\n ? this.runMobilenet(batchTensor, params as MobilenetParams)\n : this.runTinyYolov2(batchTensor, params as DefaultTinyYolov2NetParams);\n });\n }\n\n public async forward(input: TNetInput, inputSize: number): Promise {\n return this.forwardInput(await toNetInput(input), inputSize);\n }\n\n public async detect(input: TNetInput, forwardParams: ITinyYolov2Options = {}): Promise {\n const { inputSize, scoreThreshold } = new TinyYolov2Options(forwardParams);\n\n const netInput = await toNetInput(input);\n const out = await this.forwardInput(netInput, inputSize);\n const out0 = tf.tidy(() => tf.unstack(out)[0].expandDims()) as tf.Tensor4D;\n\n const inputDimensions = {\n width: netInput.getInputWidth(0),\n height: netInput.getInputHeight(0),\n };\n\n const results = await this.extractBoxes(out0, netInput.getReshapedInputDimensions(0), scoreThreshold);\n out.dispose();\n out0.dispose();\n\n const boxes = results.map((res) => res.box);\n const scores = results.map((res) => res.score);\n const classScores = results.map((res) => res.classScore);\n const classNames = results.map((res) => this.config.classes[res.label]);\n\n const indices = nonMaxSuppression(\n boxes.map((box) => box.rescale(inputSize)),\n scores,\n this.config.iouThreshold,\n true,\n );\n\n const detections = indices.map((idx) => new ObjectDetection(\n scores[idx],\n classScores[idx],\n classNames[idx],\n boxes[idx],\n inputDimensions,\n ));\n\n return detections;\n }\n\n protected getDefaultModelName(): string {\n return '';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this.config);\n }\n\n protected extractParams(weights: Float32Array) {\n const filterSizes = this.config.filterSizes || TinyYolov2Base.DEFAULT_FILTER_SIZES;\n\n const numFilters = filterSizes ? filterSizes.length : undefined;\n if (numFilters !== 7 && numFilters !== 8 && numFilters !== 9) {\n throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${numFilters} filterSizes in config`);\n }\n return extractParams(weights, this.config, this.boxEncodingSize, filterSizes);\n }\n\n protected async extractBoxes(\n outputTensor: tf.Tensor4D,\n inputBlobDimensions: Dimensions,\n scoreThreshold?: number,\n ) {\n const { width, height } = inputBlobDimensions;\n const inputSize = Math.max(width, height);\n const correctionFactorX = inputSize / width;\n const correctionFactorY = inputSize / height;\n\n const numCells = outputTensor.shape[1];\n const numBoxes = this.config.anchors.length;\n\n const [boxesTensor, scoresTensor, classScoresTensor] = tf.tidy(() => {\n const reshaped = outputTensor.reshape([numCells, numCells, numBoxes, this.boxEncodingSize]);\n\n const boxes = reshaped.slice([0, 0, 0, 0], [numCells, numCells, numBoxes, 4]);\n const scores = reshaped.slice([0, 0, 0, 4], [numCells, numCells, numBoxes, 1]);\n const classScores = this.withClassScores\n ? tf.softmax(reshaped.slice([0, 0, 0, 5], [numCells, numCells, numBoxes, this.config.classes.length]), 3)\n : tf.scalar(0);\n return [boxes, scores, classScores];\n });\n\n const results = [] as any;\n\n const scoresData = await scoresTensor.array();\n const boxesData = await boxesTensor.array();\n for (let row = 0; row < numCells; row++) {\n for (let col = 0; col < numCells; col++) {\n for (let anchor = 0; anchor < numBoxes; anchor++) {\n const score = sigmoid(scoresData[row][col][anchor][0]);\n if (!scoreThreshold || score > scoreThreshold) {\n const ctX = ((col + sigmoid(boxesData[row][col][anchor][0])) / numCells) * correctionFactorX;\n const ctY = ((row + sigmoid(boxesData[row][col][anchor][1])) / numCells) * correctionFactorY;\n const widthLocal = ((Math.exp(boxesData[row][col][anchor][2]) * this.config.anchors[anchor].x) / numCells) * correctionFactorX;\n const heightLocal = ((Math.exp(boxesData[row][col][anchor][3]) * this.config.anchors[anchor].y) / numCells) * correctionFactorY;\n\n const x = (ctX - (widthLocal / 2));\n const y = (ctY - (heightLocal / 2));\n\n const pos = { row, col, anchor };\n const { classScore, label } = this.withClassScores\n ? await this.extractPredictedClass(classScoresTensor as tf.Tensor4D, pos)\n : { classScore: 1, label: 0 };\n\n results.push({\n box: new BoundingBox(x, y, x + widthLocal, y + heightLocal),\n score,\n classScore: score * classScore,\n label,\n ...pos,\n });\n }\n }\n }\n }\n\n boxesTensor.dispose();\n scoresTensor.dispose();\n classScoresTensor.dispose();\n\n return results;\n }\n\n private async extractPredictedClass(classesTensor: tf.Tensor4D, pos: { row: number, col: number, anchor: number }) {\n const { row, col, anchor } = pos;\n const classesData = await classesTensor.array();\n return Array(this.config.classes.length).fill(0)\n .map((_, i) => classesData[row][col][anchor][i])\n .map((classScore, label) => ({\n classScore,\n label,\n }))\n .reduce((max, curr) => (max.classScore > curr.classScore ? max : curr));\n }\n}\n", "import { Point } from '../classes/Point';\n\nexport type TinyYolov2Config = {\n withSeparableConvs: boolean\n iouThreshold: number\n anchors: Point[]\n classes: string[]\n meanRgb?: [number, number, number]\n withClassScores?: boolean,\n filterSizes?: number[]\n isFirstLayerConv2d?: boolean\n}\n\nconst isNumber = (arg: any) => typeof arg === 'number';\n\nexport function validateConfig(config: any) {\n if (!config) {\n throw new Error(`invalid config: ${config}`);\n }\n\n if (typeof config.withSeparableConvs !== 'boolean') {\n throw new Error(`config.withSeparableConvs has to be a boolean, have: ${config.withSeparableConvs}`);\n }\n\n if (!isNumber(config.iouThreshold) || config.iouThreshold < 0 || config.iouThreshold > 1.0) {\n throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${config.iouThreshold}`);\n }\n\n if (\n !Array.isArray(config.classes)\n || !config.classes.length\n || !config.classes.every((c: any) => typeof c === 'string')\n ) {\n throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(config.classes)}`);\n }\n\n if (\n !Array.isArray(config.anchors)\n || !config.anchors.length\n || !config.anchors.map((a: any) => a || {}).every((a: any) => isNumber(a.x) && isNumber(a.y))\n ) {\n throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(config.anchors)}`);\n }\n\n if (config.meanRgb && (\n !Array.isArray(config.meanRgb)\n || config.meanRgb.length !== 3\n || !config.meanRgb.every(isNumber)\n )) {\n throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(config.meanRgb)}`);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { leaky } from './leaky';\nimport { ConvWithBatchNorm } from './types';\n\nexport function convWithBatchNorm(x: tf.Tensor4D, params: ConvWithBatchNorm): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.conv2d(out, params.conv.filters, [1, 1], 'valid');\n out = tf.sub(out, params.bn.sub);\n out = tf.mul(out, params.bn.truediv);\n out = tf.add(out, params.conv.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nexport function leaky(x: tf.Tensor4D): tf.Tensor4D {\n return tf.tidy(() => {\n const min = tf.mul(x, tf.scalar(0.10000000149011612));\n return tf.add(tf.relu(tf.sub(x, min)), min);\n // return tf.maximum(x, min)\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { SeparableConvParams } from '../common/types';\nimport { leaky } from './leaky';\n\nexport function depthwiseSeparableConv(x: tf.Tensor4D, params: SeparableConvParams): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]) as tf.Tensor4D;\n\n out = tf.separableConv2d(out, params.depthwise_filter, params.pointwise_filter, [1, 1], 'valid');\n out = tf.add(out, params.bias);\n\n return leaky(out);\n });\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { extractConvParamsFactory } from '../common/index';\nimport { extractSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightsFactory } from '../common/extractWeightsFactory';\nimport { ExtractWeightsFunction, ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) {\n const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\n\n function extractBatchNormParams(size: number, mappedPrefix: string): BatchNorm {\n const sub = tf.tensor1d(extractWeights(size));\n const truediv = tf.tensor1d(extractWeights(size));\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/sub` },\n { paramPath: `${mappedPrefix}/truediv` },\n );\n\n return { sub, truediv };\n }\n\n function extractConvWithBatchNormParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv`);\n const bn = extractBatchNormParams(channelsOut, `${mappedPrefix}/bn`);\n\n return { conv, bn };\n }\n const extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParams(\n weights: Float32Array,\n config: TinyYolov2Config,\n boxEncodingSize: number,\n filterSizes: number[],\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const {\n extractWeights,\n getRemainingWeights,\n } = extractWeightsFactory(weights);\n\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(extractWeights, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n\n const conv0 = config.isFirstLayerConv2d\n ? extractConvParams(s0, s1, 3, 'conv0')\n : extractSeparableConvParams(s0, s1, 'conv0');\n const conv1 = extractSeparableConvParams(s1, s2, 'conv1');\n const conv2 = extractSeparableConvParams(s2, s3, 'conv2');\n const conv3 = extractSeparableConvParams(s3, s4, 'conv3');\n const conv4 = extractSeparableConvParams(s4, s5, 'conv4');\n const conv5 = extractSeparableConvParams(s5, s6, 'conv5');\n const conv6 = s7 ? extractSeparableConvParams(s6, s7, 'conv6') : undefined;\n const conv7 = s8 ? extractSeparableConvParams(s7, s8, 'conv7') : undefined;\n const conv8 = extractConvParams(s8 || s7 || s6, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n } else {\n const [s0, s1, s2, s3, s4, s5, s6, s7, s8] = filterSizes;\n const conv0 = extractConvWithBatchNormParams(s0, s1, 'conv0');\n const conv1 = extractConvWithBatchNormParams(s1, s2, 'conv1');\n const conv2 = extractConvWithBatchNormParams(s2, s3, 'conv2');\n const conv3 = extractConvWithBatchNormParams(s3, s4, 'conv3');\n const conv4 = extractConvWithBatchNormParams(s4, s5, 'conv4');\n const conv5 = extractConvWithBatchNormParams(s5, s6, 'conv5');\n const conv6 = extractConvWithBatchNormParams(s6, s7, 'conv6');\n const conv7 = extractConvWithBatchNormParams(s7, s8, 'conv7');\n const conv8 = extractConvParams(s8, 5 * boxEncodingSize, 1, 'conv8');\n params = {\n conv0, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8,\n };\n }\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`);\n }\n\n return { params, paramMappings };\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { ConvParams } from '../common/index';\nimport { disposeUnusedWeightTensors } from '../common/disposeUnusedWeightTensors';\nimport { loadSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\nimport { extractWeightEntryFactory } from '../common/extractWeightEntryFactory';\nimport { ParamMapping } from '../common/types';\nimport { TinyYolov2Config } from './config';\nimport { BatchNorm, ConvWithBatchNorm, TinyYolov2NetParams } from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {\n const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\n\n function extractBatchNormParams(prefix: string): BatchNorm {\n const sub = extractWeightEntry(`${prefix}/sub`, 1);\n const truediv = extractWeightEntry(`${prefix}/truediv`, 1);\n return { sub, truediv };\n }\n\n function extractConvParams(prefix: string): ConvParams {\n const filters = extractWeightEntry(`${prefix}/filters`, 4);\n const bias = extractWeightEntry(`${prefix}/bias`, 1);\n return { filters, bias };\n }\n\n function extractConvWithBatchNormParams(prefix: string): ConvWithBatchNorm {\n const conv = extractConvParams(`${prefix}/conv`);\n const bn = extractBatchNormParams(`${prefix}/bn`);\n return { conv, bn };\n }\n\n const extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\n\n return {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n };\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n config: TinyYolov2Config,\n): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n const paramMappings: ParamMapping[] = [];\n\n const {\n extractConvParams,\n extractConvWithBatchNormParams,\n extractSeparableConvParams,\n } = extractorsFactory(weightMap, paramMappings);\n\n let params: TinyYolov2NetParams;\n\n if (config.withSeparableConvs) {\n // eslint-disable-next-line no-mixed-operators\n const numFilters = (config.filterSizes && config.filterSizes.length || 9);\n params = {\n conv0: config.isFirstLayerConv2d ? extractConvParams('conv0') : extractSeparableConvParams('conv0'),\n conv1: extractSeparableConvParams('conv1'),\n conv2: extractSeparableConvParams('conv2'),\n conv3: extractSeparableConvParams('conv3'),\n conv4: extractSeparableConvParams('conv4'),\n conv5: extractSeparableConvParams('conv5'),\n conv6: numFilters > 7 ? extractSeparableConvParams('conv6') : undefined,\n conv7: numFilters > 8 ? extractSeparableConvParams('conv7') : undefined,\n conv8: extractConvParams('conv8'),\n };\n } else {\n params = {\n conv0: extractConvWithBatchNormParams('conv0'),\n conv1: extractConvWithBatchNormParams('conv1'),\n conv2: extractConvWithBatchNormParams('conv2'),\n conv3: extractConvWithBatchNormParams('conv3'),\n conv4: extractConvWithBatchNormParams('conv4'),\n conv5: extractConvWithBatchNormParams('conv5'),\n conv6: extractConvWithBatchNormParams('conv6'),\n conv7: extractConvWithBatchNormParams('conv7'),\n conv8: extractConvParams('conv8'),\n };\n }\n\n disposeUnusedWeightTensors(weightMap, paramMappings);\n\n return { params, paramMappings };\n}\n", "export interface ITinyYolov2Options {\n inputSize?: number\n scoreThreshold?: number\n}\n\nexport class TinyYolov2Options {\n protected _name: string = 'TinyYolov2Options'\n\n private _inputSize: number\n\n private _scoreThreshold: number\n\n constructor({ inputSize, scoreThreshold }: ITinyYolov2Options = {}) {\n this._inputSize = inputSize || 416;\n this._scoreThreshold = scoreThreshold || 0.5;\n\n if (typeof this._inputSize !== 'number' || this._inputSize % 32 !== 0) {\n throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);\n }\n\n if (typeof this._scoreThreshold !== 'number' || this._scoreThreshold <= 0 || this._scoreThreshold >= 1) {\n throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`);\n }\n }\n\n get inputSize(): number { return this._inputSize; }\n\n get scoreThreshold(): number { return this._scoreThreshold; }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/types';\nimport { TNetInput } from '../dom/types';\nimport {\n BOX_ANCHORS,\n BOX_ANCHORS_SEPARABLE,\n DEFAULT_MODEL_NAME,\n DEFAULT_MODEL_NAME_SEPARABLE_CONV,\n IOU_THRESHOLD,\n MEAN_RGB_SEPARABLE,\n} from './const';\nimport { TinyYolov2Base } from './TinyYolov2Base';\nimport { ITinyYolov2Options } from './TinyYolov2Options';\nimport { TinyYolov2NetParams } from './types';\n\nexport class TinyYolov2 extends TinyYolov2Base {\n constructor(withSeparableConvs: boolean = true) {\n const config = {\n withSeparableConvs,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n ...(withSeparableConvs\n ? {\n anchors: BOX_ANCHORS_SEPARABLE,\n meanRgb: MEAN_RGB_SEPARABLE,\n }\n : {\n anchors: BOX_ANCHORS,\n withClassScores: true,\n }),\n };\n\n super(config);\n }\n\n public get withSeparableConvs(): boolean {\n return this.config.withSeparableConvs;\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME;\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { TinyYolov2 } from './TinyYolov2';\n\nexport * from './TinyYolov2Options';\n\nexport * from './config';\nexport * from './types';\n\nexport { TinyYolov2 };\n\nexport function createTinyYolov2(weights: Float32Array, withSeparableConvs: boolean = true) {\n const net = new TinyYolov2(withSeparableConvs);\n net.extractWeights(weights);\n return net;\n}\n", "import { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\n\nexport interface ITinyFaceDetectorOptions extends ITinyYolov2Options {}\n\nexport class TinyFaceDetectorOptions extends TinyYolov2Options {\n protected _name: string = 'TinyFaceDetectorOptions'\n}\n", "export class ComposableTask {\n public async then(\n // eslint-disable-next-line no-unused-vars\n onfulfilled: (value: T) => T | PromiseLike,\n ): Promise {\n return onfulfilled(await this.run());\n }\n\n public async run(): Promise {\n throw new Error('ComposableTask - run is not implemented');\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm';\n\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class DetectFaceLandmarksTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected useTinyLandmarkNet: boolean,\n ) {\n super();\n }\n\n protected get landmarkNet(): FaceLandmark68Net | FaceLandmark68TinyNet {\n return this.useTinyLandmarkNet\n ? nets.faceLandmark68TinyNet\n : nets.faceLandmark68Net;\n }\n}\n\nexport class DetectAllFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n const detections = parentResults.map((res) => res.detection);\n\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, detections)\n : await extractFaces(this.input, detections);\n\n const faceLandmarksByFace = await Promise.all(faces.map(\n (face) => this.landmarkNet.detectLandmarks(face),\n )) as FaceLandmarks68[];\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return parentResults.map((parentResult, i) => extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i]));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class DetectSingleFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { detection } = parentResult;\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, [detection])\n : await extractFaces(this.input, [detection]);\n\n const landmarks = await this.landmarkNet.detectLandmarks(faces[0]) as FaceLandmarks68;\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return extendWithFaceLandmarks(parentResult, landmarks);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { extractFaces, extractFaceTensors, TNetInput } from '../dom/index';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\n\nexport async function extractAllFacesAndComputeResults, TResult>(\n parentResults: TSource[],\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResults: (faces: Array) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment: (parentResult: WithFaceLandmarks) => FaceDetection = ({ alignedRect }) => alignedRect,\n) {\n const faceBoxes = parentResults.map((parentResult) => (isWithFaceLandmarks(parentResult)\n ? getRectForAlignment(parentResult)\n : parentResult.detection));\n const faces: Array = extractedFaces || (\n input instanceof tf.Tensor\n ? await extractFaceTensors(input, faceBoxes)\n : await extractFaces(input, faceBoxes)\n );\n\n const results = await computeResults(faces);\n\n faces.forEach((f) => f instanceof tf.Tensor && f.dispose());\n\n return results;\n}\n\nexport async function extractSingleFaceAndComputeResult, TResult>(\n parentResult: TSource,\n input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n computeResult: (face: HTMLCanvasElement | tf.Tensor3D) => Promise,\n extractedFaces?: Array | null,\n // eslint-disable-next-line no-unused-vars\n getRectForAlignment?: (parentResultLocal: WithFaceLandmarks) => FaceDetection,\n) {\n return extractAllFacesAndComputeResults(\n [parentResult],\n input,\n async (faces) => computeResult(faces[0]),\n extractedFaces,\n getRectForAlignment,\n );\n}\n", "import { Point } from '../classes/index';\n\nexport const IOU_THRESHOLD = 0.4;\n\nexport const BOX_ANCHORS = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308),\n];\n\nexport const MEAN_RGB: [number, number, number] = [117.001, 114.697, 97.404];\n", "import * as tf from '../../dist/tfjs.esm';\n\nimport { FaceDetection, Point } from '../classes/index';\nimport { ParamMapping } from '../common/index';\nimport { TNetInput } from '../dom/index';\nimport { ITinyYolov2Options } from '../tinyYolov2/index';\nimport { TinyYolov2Base } from '../tinyYolov2/TinyYolov2Base';\nimport { TinyYolov2NetParams } from '../tinyYolov2/types';\nimport { BOX_ANCHORS, IOU_THRESHOLD, MEAN_RGB } from './const';\n\nexport class TinyFaceDetector extends TinyYolov2Base {\n constructor() {\n const config = {\n withSeparableConvs: true,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n anchors: BOX_ANCHORS,\n meanRgb: MEAN_RGB,\n isFirstLayerConv2d: true,\n filterSizes: [3, 16, 32, 64, 128, 256, 512],\n };\n\n super(config);\n }\n\n public get anchors(): Point[] {\n return this.config.anchors;\n }\n\n public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams);\n return objectDetections.map((det) => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }));\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_face_detector_model';\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap);\n }\n}\n", "import { AgeGenderNet } from '../ageGenderNet/AgeGenderNet';\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet';\nimport { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { ITinyYolov2Options, TinyYolov2 } from '../tinyYolov2/index';\n\nexport const nets = {\n ssdMobilenetv1: new SsdMobilenetv1(),\n tinyFaceDetector: new TinyFaceDetector(),\n tinyYolov2: new TinyYolov2(),\n faceLandmark68Net: new FaceLandmark68Net(),\n faceLandmark68TinyNet: new FaceLandmark68TinyNet(),\n faceRecognitionNet: new FaceRecognitionNet(),\n faceExpressionNet: new FaceExpressionNet(),\n ageGenderNet: new AgeGenderNet(),\n};\n\n/**\n * Attempts to detect all faces in an image using SSD Mobilenetv1 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const ssdMobilenetv1 = (input: TNetInput, options: SsdMobilenetv1Options): Promise => nets.ssdMobilenetv1.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Face Detector.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyFaceDetector = (input: TNetInput, options: TinyFaceDetectorOptions): Promise => nets.tinyFaceDetector.locateFaces(input, options);\n\n/**\n * Attempts to detect all faces in an image using the Tiny Yolov2 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyYolov2Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyYolov2 = (input: TNetInput, options: ITinyYolov2Options): Promise => nets.tinyYolov2.locateFaces(input, options);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarks = (input: TNetInput): Promise => nets.faceLandmark68Net.detectLandmarks(input);\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image\n * using a tinier version of the 68 point face landmark model, which is slightly\n * faster at inference, but also slightly less accurate.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarksTiny = (input: TNetInput): Promise => nets.faceLandmark68TinyNet.detectLandmarks(input);\n\n/**\n * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image,\n * which uniquely represents the features of that persons face. The computed face descriptor can\n * be used to measure the similarity between faces, by computing the euclidean distance of two\n * face descriptors.\n *\n * @param inputs The face image extracted from the aligned bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Face descriptor with 128 entries or array thereof in case of batch input.\n */\nexport const computeFaceDescriptor = (input: TNetInput): Promise => nets.faceRecognitionNet.computeFaceDescriptor(input);\n\n/**\n * Recognizes the facial expressions from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Facial expressions with corresponding probabilities or array thereof in case of batch input.\n */\nexport const recognizeFaceExpressions = (input: TNetInput): Promise => nets.faceExpressionNet.predictExpressions(input);\n\n/**\n * Predicts age and gender from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Predictions with age, gender and gender probability or array thereof in case of batch input.\n */\nexport const predictAgeAndGender = (input: TNetInput): Promise => nets.ageGenderNet.predictAgeAndGender(input);\n\nexport const loadSsdMobilenetv1Model = (url: string) => nets.ssdMobilenetv1.load(url);\nexport const loadTinyFaceDetectorModel = (url: string) => nets.tinyFaceDetector.load(url);\nexport const loadTinyYolov2Model = (url: string) => nets.tinyYolov2.load(url);\nexport const loadFaceLandmarkModel = (url: string) => nets.faceLandmark68Net.load(url);\nexport const loadFaceLandmarkTinyModel = (url: string) => nets.faceLandmark68TinyNet.load(url);\nexport const loadFaceRecognitionModel = (url: string) => nets.faceRecognitionNet.load(url);\nexport const loadFaceExpressionModel = (url: string) => nets.faceExpressionNet.load(url);\nexport const loadAgeGenderModel = (url: string) => nets.ageGenderNet.load(url);\n\n// backward compatibility\nexport const loadFaceDetectionModel = loadSsdMobilenetv1Model;\nexport const locateFaces = ssdMobilenetv1;\nexport const detectLandmarks = detectFaceLandmarks;\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm';\n\nimport { TNetInput } from '../dom/index';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderTask,\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\n\nexport class PredictFaceExpressionsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const faceExpressionsByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map(\n (parentResult, i) => extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]),\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const faceExpressions = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceExpressionNet.predictExpressions(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithFaceExpressions(parentResult, faceExpressions);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(this, this.input);\n }\n}\n\nexport class PredictAllFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleFaceExpressionsTask {\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport * as tf from '../../dist/tfjs.esm';\n\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { TNetInput } from '../dom/index';\nimport { extendWithAge, WithAge } from '../factories/WithAge';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { extendWithGender, WithGender } from '../factories/WithGender';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllFaceExpressionsTask,\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class PredictAgeAndGenderTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected extractedFaces?: Array,\n ) {\n super();\n }\n}\n\nexport class PredictAllAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase>[], TSource[]> {\n public async run(): Promise>[]> {\n const parentResults = await this.parentTask;\n\n const ageAndGenderByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async (faces) => Promise.all(faces.map(\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n )),\n this.extractedFaces,\n );\n\n return parentResults.map((parentResult, i) => {\n const { age, gender, genderProbability } = ageAndGenderByFace[i];\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n });\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase> | undefined, TSource | undefined> {\n public async run(): Promise> | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n\n const { age, gender, genderProbability } = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n this.extractedFaces,\n );\n\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(this, this.input);\n }\n}\n\nexport class PredictAllAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input);\n }\n}\n\nexport class PredictSingleAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleAgeAndGenderTask {\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDescriptor, WithFaceDescriptor } from '../factories/WithFaceDescriptor';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class ComputeFaceDescriptorsTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected parentTask: ComposableTask | Promise,\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n ) {\n super();\n }\n}\n\nexport class ComputeAllFaceDescriptorsTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase[], TSource[]> {\n public async run(): Promise[]> {\n const parentResults = await this.parentTask;\n\n const descriptors = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n (faces) => Promise.all(faces.map((face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise)),\n null,\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return descriptors.map((descriptor, i) => extendWithFaceDescriptor(parentResults[i], descriptor));\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n\nexport class ComputeSingleFaceDescriptorTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase | undefined, TSource | undefined> {\n public async run(): Promise | undefined> {\n const parentResult = await this.parentTask;\n if (!parentResult) {\n return undefined;\n }\n const descriptor = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n (face) => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise,\n null,\n // eslint-disable-next-line no-shadow\n (parentResult) => parentResult.landmarks.align(null, { useDlibAlignment: true }),\n );\n\n return extendWithFaceDescriptor(parentResult, descriptor);\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\n }\n}\n", "/* eslint-disable max-classes-per-file */\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { TNetInput } from '../dom/index';\nimport { extendWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { TinyYolov2Options } from '../tinyYolov2/index';\nimport { ComposableTask } from './ComposableTask';\nimport { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';\nimport { nets } from './nets';\nimport { PredictAllAgeAndGenderTask, PredictSingleAgeAndGenderTask } from './PredictAgeAndGenderTask';\nimport { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionsTask } from './PredictFaceExpressionsTask';\nimport { FaceDetectionOptions } from './types';\n\nexport class DetectFacesTaskBase extends ComposableTask {\n constructor(\n // eslint-disable-next-line no-unused-vars\n protected input: TNetInput,\n // eslint-disable-next-line no-unused-vars\n protected options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n ) {\n super();\n }\n}\n\nexport class DetectAllFacesTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const { input, options } = this;\n\n // eslint-disable-next-line no-nested-ternary\n const faceDetectionFunction = options instanceof TinyFaceDetectorOptions\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyFaceDetector.locateFaces(input, options)\n : (\n // eslint-disable-next-line no-nested-ternary\n options instanceof SsdMobilenetv1Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.ssdMobilenetv1.locateFaces(input, options)\n : (\n options instanceof TinyYolov2Options\n // eslint-disable-next-line no-shadow\n ? (input: TNetInput) => nets.tinyYolov2.locateFaces(input, options)\n : null\n )\n );\n\n if (!faceDetectionFunction) {\n throw new Error('detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options');\n }\n\n return faceDetectionFunction(input);\n }\n\n private runAndExtendWithFaceDetections(): Promise[]> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise[]>(async (resolve) => {\n const detections = await this.run();\n resolve(detections.map((detection) => extendWithFaceDetection({}, detection)));\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectAllFaceLandmarksTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n );\n }\n}\n\nexport class DetectSingleFaceTask extends DetectFacesTaskBase {\n public async run(): Promise {\n const faceDetections = await new DetectAllFacesTask(this.input, this.options);\n let faceDetectionWithHighestScore = faceDetections[0];\n faceDetections.forEach((faceDetection) => {\n if (faceDetection.score > faceDetectionWithHighestScore.score) {\n faceDetectionWithHighestScore = faceDetection;\n }\n });\n return faceDetectionWithHighestScore;\n }\n\n private runAndExtendWithFaceDetection(): Promise | undefined> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise | undefined>(async (resolve) => {\n const detection = await this.run();\n resolve(detection ? extendWithFaceDetection<{}>({}, detection) : undefined);\n });\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectSingleFaceLandmarksTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n useTinyLandmarkNet,\n );\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n );\n }\n}\n", "import { TNetInput } from '../dom/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { DetectAllFacesTask, DetectSingleFaceTask } from './DetectFacesTasks';\nimport { FaceDetectionOptions } from './types';\n\nexport function detectSingleFace(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectSingleFaceTask {\n return new DetectSingleFaceTask(input, options);\n}\n\nexport function detectAllFaces(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options(),\n): DetectAllFacesTask {\n return new DetectAllFacesTask(input, options);\n}\n", "import { TNetInput } from '../dom/index';\nimport { WithFaceDescriptor, WithFaceDetection, WithFaceLandmarks } from '../factories/index';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/index';\nimport { ITinyYolov2Options, TinyYolov2Options } from '../tinyYolov2/index';\nimport { detectAllFaces } from './detectFaces';\n\n// export allFaces API for backward compatibility\n\nexport async function allFacesSsdMobilenetv1(\n input: TNetInput,\n minConfidence?: number,\n): Promise>>[]> {\n return detectAllFaces(input, new SsdMobilenetv1Options(minConfidence ? { minConfidence } : {}))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport async function allFacesTinyYolov2(\n input: TNetInput,\n forwardParams: ITinyYolov2Options = {},\n): Promise>>[]> {\n return detectAllFaces(input, new TinyYolov2Options(forwardParams))\n .withFaceLandmarks()\n .withFaceDescriptors();\n}\n\nexport const allFaces = allFacesSsdMobilenetv1;\n", "export function euclideanDistance(arr1: number[] | Float32Array, arr2: number[] | Float32Array) {\n if (arr1.length !== arr2.length)\n throw new Error('euclideanDistance: arr1.length !== arr2.length')\n\n const desc1 = Array.from(arr1)\n const desc2 = Array.from(arr2)\n\n return Math.sqrt(\n desc1\n .map((val, i) => val - desc2[i])\n .reduce((res, diff) => res + Math.pow(diff, 2), 0)\n )\n}", "import { FaceMatch } from '../classes/FaceMatch';\nimport { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors';\nimport { euclideanDistance } from '../euclideanDistance';\nimport { WithFaceDescriptor } from '../factories/index';\n\nexport class FaceMatcher {\n private _labeledDescriptors: LabeledFaceDescriptors[]\n\n private _distanceThreshold: number\n\n constructor(\n inputs: LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>,\n distanceThreshold: number = 0.6,\n ) {\n this._distanceThreshold = distanceThreshold;\n\n const inputArray = Array.isArray(inputs) ? inputs : [inputs];\n\n if (!inputArray.length) {\n throw new Error('FaceRecognizer.constructor - expected atleast one input');\n }\n\n let count = 1;\n const createUniqueLabel = () => `person ${count++}`;\n\n this._labeledDescriptors = inputArray.map((desc) => {\n if (desc instanceof LabeledFaceDescriptors) {\n return desc;\n }\n\n if (desc instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc]);\n }\n\n if (desc.descriptor && desc.descriptor instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]);\n }\n\n throw new Error('FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>');\n });\n }\n\n public get labeledDescriptors(): LabeledFaceDescriptors[] { return this._labeledDescriptors; }\n\n public get distanceThreshold(): number { return this._distanceThreshold; }\n\n public computeMeanDistance(queryDescriptor: Float32Array, descriptors: Float32Array[]): number {\n return descriptors\n .map((d) => euclideanDistance(d, queryDescriptor))\n .reduce((d1, d2) => d1 + d2, 0)\n / (descriptors.length || 1);\n }\n\n public matchDescriptor(queryDescriptor: Float32Array): FaceMatch {\n return this.labeledDescriptors\n .map(({ descriptors, label }) => new FaceMatch(\n label,\n this.computeMeanDistance(queryDescriptor, descriptors),\n ))\n .reduce((best, curr) => (best.distance < curr.distance ? best : curr));\n }\n\n public findBestMatch(queryDescriptor: Float32Array): FaceMatch {\n const bestMatch = this.matchDescriptor(queryDescriptor);\n return bestMatch.distance < this.distanceThreshold\n ? bestMatch\n : new FaceMatch('unknown', bestMatch.distance);\n }\n\n public toJSON(): any {\n return {\n distanceThreshold: this.distanceThreshold,\n labeledDescriptors: this.labeledDescriptors.map((ld) => ld.toJSON()),\n };\n }\n\n public static fromJSON(json: any): FaceMatcher {\n const labeledDescriptors = json.labeledDescriptors\n .map((ld: any) => LabeledFaceDescriptors.fromJSON(ld));\n return new FaceMatcher(labeledDescriptors, json.distanceThreshold);\n }\n}\n", "import { TinyFaceDetector } from './TinyFaceDetector';\n\nexport * from './TinyFaceDetector';\nexport * from './TinyFaceDetectorOptions';\n\nexport function createTinyFaceDetector(weights: Float32Array) {\n const net = new TinyFaceDetector();\n net.extractWeights(weights);\n return net;\n}\n", "import { Dimensions, IDimensions } from './classes/index';\nimport { FaceDetection } from './classes/FaceDetection';\nimport { FaceLandmarks } from './classes/FaceLandmarks';\nimport { extendWithFaceDetection, isWithFaceDetection } from './factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, isWithFaceLandmarks } from './factories/WithFaceLandmarks';\n\nexport function resizeResults(results: T, dimensions: IDimensions): T {\n\n const { width, height } = new Dimensions(dimensions.width, dimensions.height)\n\n if (width <= 0 || height <= 0) {\n throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({ width, height })}`)\n }\n\n if (Array.isArray(results)) {\n // return results.map(obj => resizeResults(obj, { width, height })) as any as T\n return (results as Array).map(obj => resizeResults(obj, { width, height } as IDimensions)) as any as T\n }\n\n if (isWithFaceLandmarks(results)) {\n const resizedDetection = results.detection.forSize(width, height)\n const resizedLandmarks = results.unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height)\n return extendWithFaceLandmarks(extendWithFaceDetection(results, resizedDetection), resizedLandmarks)\n }\n\n if (isWithFaceDetection(results)) {\n return extendWithFaceDetection(results, results.detection.forSize(width, height))\n }\n\n if (results instanceof FaceLandmarks || results instanceof FaceDetection) {\n return (results as any).forSize(width, height)\n }\n\n return results\n}"], "mappings": "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", "names": [] } diff --git a/dist/face-api.node.json b/dist/face-api.node.json index f418ff3..c3414a7 100644 --- a/dist/face-api.node.json +++ b/dist/face-api.node.json @@ -17,7 +17,7 @@ ] }, "src/utils/index.ts": { - "bytes": 1845, + "bytes": 1842, "imports": [ { "path": "dist/tfjs.esm.js" @@ -93,7 +93,7 @@ ] }, "src/ops/normalize.ts": { - "bytes": 486, + "bytes": 483, "imports": [ { "path": "dist/tfjs.esm.js" @@ -101,7 +101,7 @@ ] }, "src/ops/padToSquare.ts": { - "bytes": 1687, + "bytes": 1684, "imports": [ { "path": "dist/tfjs.esm.js" @@ -451,7 +451,7 @@ ] }, "src/dom/imageTensorToCanvas.ts": { - "bytes": 618, + "bytes": 615, "imports": [ { "path": "dist/tfjs.esm.js" @@ -490,7 +490,7 @@ ] }, "src/dom/NetInput.ts": { - "bytes": 5511, + "bytes": 5508, "imports": [ { "path": "dist/tfjs.esm.js" @@ -556,7 +556,7 @@ ] }, "src/dom/extractFaceTensors.ts": { - "bytes": 1733, + "bytes": 1730, "imports": [ { "path": "dist/tfjs.esm.js" @@ -609,7 +609,7 @@ "imports": [] }, "src/dom/loadWeightMap.ts": { - "bytes": 555, + "bytes": 552, "imports": [ { "path": "dist/tfjs.esm.js" @@ -631,7 +631,7 @@ ] }, "src/dom/types.ts": { - "bytes": 386, + "bytes": 383, "imports": [] }, "src/dom/index.ts": { @@ -703,7 +703,7 @@ ] }, "src/NeuralNetwork.ts": { - "bytes": 5113, + "bytes": 5110, "imports": [ { "path": "dist/tfjs.esm.js" @@ -720,7 +720,7 @@ ] }, "src/common/depthwiseSeparableConv.ts": { - "bytes": 417, + "bytes": 414, "imports": [ { "path": "dist/tfjs.esm.js" @@ -728,7 +728,7 @@ ] }, "src/faceFeatureExtractor/denseBlock.ts": { - "bytes": 2041, + "bytes": 2038, "imports": [ { "path": "dist/tfjs.esm.js" @@ -739,7 +739,7 @@ ] }, "src/common/convLayer.ts": { - "bytes": 431, + "bytes": 428, "imports": [ { "path": "dist/tfjs.esm.js" @@ -751,7 +751,7 @@ "imports": [] }, "src/common/extractConvParamsFactory.ts": { - "bytes": 769, + "bytes": 766, "imports": [ { "path": "dist/tfjs.esm.js" @@ -759,7 +759,7 @@ ] }, "src/common/extractFCParamsFactory.ts": { - "bytes": 714, + "bytes": 711, "imports": [ { "path": "dist/tfjs.esm.js" @@ -767,11 +767,11 @@ ] }, "src/common/types.ts": { - "bytes": 800, + "bytes": 797, "imports": [] }, "src/common/extractSeparableConvParamsFactory.ts": { - "bytes": 1536, + "bytes": 1533, "imports": [ { "path": "dist/tfjs.esm.js" @@ -848,7 +848,7 @@ ] }, "src/common/loadConvParamsFactory.ts": { - "bytes": 469, + "bytes": 466, "imports": [] }, "src/faceFeatureExtractor/loadParamsFactory.ts": { @@ -863,7 +863,7 @@ ] }, "src/faceFeatureExtractor/extractParamsFromWeigthMap.ts": { - "bytes": 841, + "bytes": 838, "imports": [ { "path": "src/common/index.ts" @@ -874,7 +874,7 @@ ] }, "src/faceFeatureExtractor/FaceFeatureExtractor.ts": { - "bytes": 1809, + "bytes": 1806, "imports": [ { "path": "dist/tfjs.esm.js" @@ -900,7 +900,7 @@ ] }, "src/common/fullyConnectedLayer.ts": { - "bytes": 266, + "bytes": 263, "imports": [ { "path": "dist/tfjs.esm.js" @@ -916,7 +916,7 @@ ] }, "src/faceProcessor/extractParamsFromWeigthMap.ts": { - "bytes": 826, + "bytes": 823, "imports": [ { "path": "src/common/index.ts" @@ -924,11 +924,11 @@ ] }, "src/faceProcessor/util.ts": { - "bytes": 424, + "bytes": 421, "imports": [] }, "src/faceProcessor/FaceProcessor.ts": { - "bytes": 3037, + "bytes": 3034, "imports": [ { "path": "dist/tfjs.esm.js" @@ -958,7 +958,7 @@ "imports": [] }, "src/faceExpressionNet/FaceExpressionNet.ts": { - "bytes": 1667, + "bytes": 1664, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1092,7 +1092,7 @@ ] }, "src/xception/extractParamsFromWeigthMap.ts": { - "bytes": 3133, + "bytes": 3130, "imports": [ { "path": "src/common/index.ts" @@ -1106,7 +1106,7 @@ ] }, "src/xception/TinyXception.ts": { - "bytes": 3151, + "bytes": 3148, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1143,7 +1143,7 @@ ] }, "src/ageGenderNet/extractParamsFromWeigthMap.ts": { - "bytes": 894, + "bytes": 891, "imports": [ { "path": "src/common/index.ts" @@ -1151,11 +1151,11 @@ ] }, "src/ageGenderNet/types.ts": { - "bytes": 528, + "bytes": 525, "imports": [] }, "src/ageGenderNet/AgeGenderNet.ts": { - "bytes": 4272, + "bytes": 4269, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1198,7 +1198,7 @@ ] }, "src/faceLandmarkNet/FaceLandmark68NetBase.ts": { - "bytes": 3720, + "bytes": 3717, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1232,7 +1232,7 @@ ] }, "src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts": { - "bytes": 805, + "bytes": 802, "imports": [ { "path": "src/common/index.ts" @@ -1254,7 +1254,7 @@ ] }, "src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts": { - "bytes": 1819, + "bytes": 1816, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1305,7 +1305,7 @@ ] }, "src/faceRecognitionNet/scaleLayer.ts": { - "bytes": 232, + "bytes": 229, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1313,7 +1313,7 @@ ] }, "src/faceRecognitionNet/convLayer.ts": { - "bytes": 853, + "bytes": 850, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1324,7 +1324,7 @@ ] }, "src/faceRecognitionNet/extractParams.ts": { - "bytes": 4910, + "bytes": 4907, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1338,7 +1338,7 @@ ] }, "src/faceRecognitionNet/extractParamsFromWeigthMap.ts": { - "bytes": 3104, + "bytes": 3101, "imports": [ { "path": "src/common/index.ts" @@ -1349,7 +1349,7 @@ ] }, "src/faceRecognitionNet/residualLayer.ts": { - "bytes": 1345, + "bytes": 1342, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1360,7 +1360,7 @@ ] }, "src/faceRecognitionNet/FaceRecognitionNet.ts": { - "bytes": 2984, + "bytes": 2981, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1442,7 +1442,7 @@ ] }, "src/ssdMobilenetv1/extractParams.ts": { - "bytes": 8342, + "bytes": 8339, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1453,7 +1453,7 @@ ] }, "src/ssdMobilenetv1/extractParamsFromWeigthMap.ts": { - "bytes": 5785, + "bytes": 5782, "imports": [ { "path": "src/common/index.ts" @@ -1464,7 +1464,7 @@ ] }, "src/ssdMobilenetv1/pointwiseConvLayer.ts": { - "bytes": 394, + "bytes": 391, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1472,7 +1472,7 @@ ] }, "src/ssdMobilenetv1/mobileNetV1.ts": { - "bytes": 1814, + "bytes": 1811, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1483,11 +1483,11 @@ ] }, "src/ssdMobilenetv1/nonMaxSuppression.ts": { - "bytes": 2190, + "bytes": 2187, "imports": [] }, "src/ssdMobilenetv1/outputLayer.ts": { - "bytes": 2190, + "bytes": 2187, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1495,7 +1495,7 @@ ] }, "src/ssdMobilenetv1/boxPredictionLayer.ts": { - "bytes": 620, + "bytes": 617, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1506,7 +1506,7 @@ ] }, "src/ssdMobilenetv1/predictionLayer.ts": { - "bytes": 2058, + "bytes": 2055, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1524,7 +1524,7 @@ "imports": [] }, "src/ssdMobilenetv1/SsdMobilenetv1.ts": { - "bytes": 3829, + "bytes": 3826, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1591,7 +1591,7 @@ "imports": [] }, "src/tinyYolov2/leaky.ts": { - "bytes": 274, + "bytes": 271, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1599,7 +1599,7 @@ ] }, "src/tinyYolov2/convWithBatchNorm.ts": { - "bytes": 535, + "bytes": 532, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1610,7 +1610,7 @@ ] }, "src/tinyYolov2/depthwiseSeparableConv.ts": { - "bytes": 505, + "bytes": 502, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1621,7 +1621,7 @@ ] }, "src/tinyYolov2/extractParams.ts": { - "bytes": 3921, + "bytes": 3918, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1638,7 +1638,7 @@ ] }, "src/tinyYolov2/extractParamsFromWeigthMap.ts": { - "bytes": 3287, + "bytes": 3284, "imports": [ { "path": "src/common/disposeUnusedWeightTensors.ts" @@ -1656,7 +1656,7 @@ "imports": [] }, "src/tinyYolov2/TinyYolov2Base.ts": { - "bytes": 9703, + "bytes": 9700, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1709,7 +1709,7 @@ ] }, "src/tinyYolov2/TinyYolov2.ts": { - "bytes": 1804, + "bytes": 1801, "imports": [ { "path": "src/classes/index.ts" @@ -1723,7 +1723,7 @@ ] }, "src/tinyYolov2/types.ts": { - "bytes": 955, + "bytes": 952, "imports": [] }, "src/tinyYolov2/index.ts": { @@ -1756,7 +1756,7 @@ "imports": [] }, "src/globalApi/extractFacesAndComputeResults.ts": { - "bytes": 2040, + "bytes": 2037, "imports": [ { "path": "dist/tfjs.esm.js" @@ -1778,7 +1778,7 @@ ] }, "src/tinyFaceDetector/TinyFaceDetector.ts": { - "bytes": 1473, + "bytes": 1470, "imports": [ { "path": "src/classes/index.ts" @@ -1821,7 +1821,7 @@ ] }, "src/globalApi/PredictFaceExpressionsTask.ts": { - "bytes": 3830, + "bytes": 3827, "imports": [ { "path": "src/factories/WithFaceExpressions.ts" @@ -1844,7 +1844,7 @@ ] }, "src/globalApi/PredictAgeAndGenderTask.ts": { - "bytes": 4011, + "bytes": 4008, "imports": [ { "path": "src/factories/WithAge.ts" @@ -1893,7 +1893,7 @@ ] }, "src/globalApi/DetectFaceLandmarksTasks.ts": { - "bytes": 4005, + "bytes": 4002, "imports": [ { "path": "dist/tfjs.esm.js" @@ -2067,7 +2067,7 @@ ] }, "src/index.ts": { - "bytes": 1027, + "bytes": 1024, "imports": [ { "path": "dist/tfjs.esm.js" @@ -2136,7 +2136,7 @@ "dist/face-api.node.js.map": { "imports": [], "inputs": {}, - "bytes": 303796 + "bytes": 303619 }, "dist/face-api.node.js": { "imports": [], diff --git a/dist/tfjs.esm.json b/dist/tfjs.esm.json index 1900b30..d72ceef 100644 --- a/dist/tfjs.esm.json +++ b/dist/tfjs.esm.json @@ -20798,8 +20798,8 @@ } ] }, - "src/tfjs/tf-browser.js": { - "bytes": 1888, + "src/tfjs/tf-browser.ts": { + "bytes": 276, "imports": [ { "path": "node_modules/@tensorflow/tfjs/dist/index.js" @@ -24772,7 +24772,7 @@ "node_modules/@tensorflow/tfjs/dist/version.js": { "bytesInOutput": 22 }, - "src/tfjs/tf-browser.js": { + "src/tfjs/tf-browser.ts": { "bytesInOutput": 0 }, "node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/types.js": { diff --git a/example/node-multiprocess-worker.js b/example/node-multiprocess-worker.js index 3f1d211..e39724e 100644 --- a/example/node-multiprocess-worker.js +++ b/example/node-multiprocess-worker.js @@ -3,6 +3,7 @@ const path = require('path'); const log = require('@vladmandic/pilogger'); // workers actual import tfjs and faceapi modules +// eslint-disable-next-line import/no-extraneous-dependencies, node/no-unpublished-require const tf = require('@tensorflow/tfjs-node'); const faceapi = require('../dist/face-api.node.js'); // this is equivalent to '@vladmandic/faceapi' diff --git a/example/node-singleprocess.js b/example/node-singleprocess.js index aa0c8e1..6f6241d 100644 --- a/example/node-singleprocess.js +++ b/example/node-singleprocess.js @@ -1,6 +1,7 @@ const fs = require('fs'); const path = require('path'); const log = require('@vladmandic/pilogger'); +// eslint-disable-next-line import/no-extraneous-dependencies, node/no-unpublished-require const tf = require('@tensorflow/tfjs-node'); const faceapi = require('../dist/face-api.node.js'); // this is equivalent to '@vladmandic/faceapi' diff --git a/src/NeuralNetwork.ts b/src/NeuralNetwork.ts index 534f0fa..646dfbe 100644 --- a/src/NeuralNetwork.ts +++ b/src/NeuralNetwork.ts @@ -1,4 +1,4 @@ -import * as tf from '../dist/tfjs.esm.js'; +import * as tf from '../dist/tfjs.esm'; import { ParamMapping } from './common/index'; import { getModelUris } from './common/getModelUris'; diff --git a/src/ageGenderNet/AgeGenderNet.ts b/src/ageGenderNet/AgeGenderNet.ts index 62de6f8..a5edcb7 100644 --- a/src/ageGenderNet/AgeGenderNet.ts +++ b/src/ageGenderNet/AgeGenderNet.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { fullyConnectedLayer } from '../common/fullyConnectedLayer'; import { seperateWeightMaps } from '../faceProcessor/util'; diff --git a/src/ageGenderNet/extractParamsFromWeigthMap.ts b/src/ageGenderNet/extractParamsFromWeigthMap.ts index 70bcca3..394f241 100644 --- a/src/ageGenderNet/extractParamsFromWeigthMap.ts +++ b/src/ageGenderNet/extractParamsFromWeigthMap.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping, diff --git a/src/ageGenderNet/types.ts b/src/ageGenderNet/types.ts index 5012785..619f817 100644 --- a/src/ageGenderNet/types.ts +++ b/src/ageGenderNet/types.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { FCParams } from '../common/index'; diff --git a/src/common/convLayer.ts b/src/common/convLayer.ts index 222098b..a5a3136 100644 --- a/src/common/convLayer.ts +++ b/src/common/convLayer.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvParams } from './types'; diff --git a/src/common/depthwiseSeparableConv.ts b/src/common/depthwiseSeparableConv.ts index 664a4de..f8ecc58 100644 --- a/src/common/depthwiseSeparableConv.ts +++ b/src/common/depthwiseSeparableConv.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { SeparableConvParams } from './types'; diff --git a/src/common/extractConvParamsFactory.ts b/src/common/extractConvParamsFactory.ts index a971357..09f9118 100644 --- a/src/common/extractConvParamsFactory.ts +++ b/src/common/extractConvParamsFactory.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvParams, ExtractWeightsFunction, ParamMapping } from './types'; diff --git a/src/common/extractFCParamsFactory.ts b/src/common/extractFCParamsFactory.ts index ede4e0d..93b3aa2 100644 --- a/src/common/extractFCParamsFactory.ts +++ b/src/common/extractFCParamsFactory.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ExtractWeightsFunction, FCParams, ParamMapping } from './types'; diff --git a/src/common/extractSeparableConvParamsFactory.ts b/src/common/extractSeparableConvParamsFactory.ts index 2cfe352..45bf018 100644 --- a/src/common/extractSeparableConvParamsFactory.ts +++ b/src/common/extractSeparableConvParamsFactory.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ExtractWeightsFunction, ParamMapping, SeparableConvParams } from './types'; diff --git a/src/common/fullyConnectedLayer.ts b/src/common/fullyConnectedLayer.ts index 9a0ea63..b53b2a6 100644 --- a/src/common/fullyConnectedLayer.ts +++ b/src/common/fullyConnectedLayer.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { FCParams } from './types'; diff --git a/src/common/loadConvParamsFactory.ts b/src/common/loadConvParamsFactory.ts index 1498fb8..1882c54 100644 --- a/src/common/loadConvParamsFactory.ts +++ b/src/common/loadConvParamsFactory.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvParams } from './types'; diff --git a/src/common/types.ts b/src/common/types.ts index 1ed7a8b..996a008 100644 --- a/src/common/types.ts +++ b/src/common/types.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; // eslint-disable-next-line no-unused-vars export type ExtractWeightsFunction = (numWeights: number) => Float32Array diff --git a/src/dom/NetInput.ts b/src/dom/NetInput.ts index a457b02..87c901c 100644 --- a/src/dom/NetInput.ts +++ b/src/dom/NetInput.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { Dimensions } from '../classes/Dimensions'; import { env } from '../env/index'; diff --git a/src/dom/extractFaceTensors.ts b/src/dom/extractFaceTensors.ts index c45c146..ce81ef4 100644 --- a/src/dom/extractFaceTensors.ts +++ b/src/dom/extractFaceTensors.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { Rect } from '../classes/index'; import { FaceDetection } from '../classes/FaceDetection'; diff --git a/src/dom/imageTensorToCanvas.ts b/src/dom/imageTensorToCanvas.ts index f8975a5..2b9ba68 100644 --- a/src/dom/imageTensorToCanvas.ts +++ b/src/dom/imageTensorToCanvas.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { env } from '../env/index'; import { isTensor4D } from '../utils/index'; diff --git a/src/dom/loadWeightMap.ts b/src/dom/loadWeightMap.ts index b49cd22..0c220d7 100644 --- a/src/dom/loadWeightMap.ts +++ b/src/dom/loadWeightMap.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { getModelUris } from '../common/getModelUris'; import { fetchJson } from './fetchJson'; diff --git a/src/dom/types.ts b/src/dom/types.ts index a03b484..4fc2d63 100644 --- a/src/dom/types.ts +++ b/src/dom/types.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { NetInput } from './NetInput'; diff --git a/src/faceExpressionNet/FaceExpressionNet.ts b/src/faceExpressionNet/FaceExpressionNet.ts index 9b8f3b3..cd44039 100644 --- a/src/faceExpressionNet/FaceExpressionNet.ts +++ b/src/faceExpressionNet/FaceExpressionNet.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { NetInput, TNetInput, toNetInput } from '../dom/index'; import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor'; diff --git a/src/faceFeatureExtractor/FaceFeatureExtractor.ts b/src/faceFeatureExtractor/FaceFeatureExtractor.ts index 6015e00..644d4dc 100644 --- a/src/faceFeatureExtractor/FaceFeatureExtractor.ts +++ b/src/faceFeatureExtractor/FaceFeatureExtractor.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { NetInput, TNetInput, toNetInput } from '../dom/index'; import { NeuralNetwork } from '../NeuralNetwork'; diff --git a/src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts b/src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts index f6a0e14..94b37f5 100644 --- a/src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts +++ b/src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { NetInput, TNetInput, toNetInput } from '../dom/index'; import { NeuralNetwork } from '../NeuralNetwork'; diff --git a/src/faceFeatureExtractor/denseBlock.ts b/src/faceFeatureExtractor/denseBlock.ts index f3f7132..aa7fa92 100644 --- a/src/faceFeatureExtractor/denseBlock.ts +++ b/src/faceFeatureExtractor/denseBlock.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvParams, SeparableConvParams } from '../common/index'; import { depthwiseSeparableConv } from '../common/depthwiseSeparableConv'; diff --git a/src/faceFeatureExtractor/extractParamsFromWeigthMap.ts b/src/faceFeatureExtractor/extractParamsFromWeigthMap.ts index a4e8a24..c73fef0 100644 --- a/src/faceFeatureExtractor/extractParamsFromWeigthMap.ts +++ b/src/faceFeatureExtractor/extractParamsFromWeigthMap.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { disposeUnusedWeightTensors, ParamMapping } from '../common/index'; import { loadParamsFactory } from './loadParamsFactory'; diff --git a/src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts b/src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts index 94d4eaf..895e7a2 100644 --- a/src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts +++ b/src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { disposeUnusedWeightTensors, ParamMapping } from '../common/index'; import { loadParamsFactory } from './loadParamsFactory'; diff --git a/src/faceFeatureExtractor/types.ts b/src/faceFeatureExtractor/types.ts index ff637e8..5b41997 100644 --- a/src/faceFeatureExtractor/types.ts +++ b/src/faceFeatureExtractor/types.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { NetInput, TNetInput } from '../index'; import { ConvParams, SeparableConvParams } from '../common/index'; diff --git a/src/faceLandmarkNet/FaceLandmark68NetBase.ts b/src/faceLandmarkNet/FaceLandmark68NetBase.ts index db11e08..fd2ac67 100644 --- a/src/faceLandmarkNet/FaceLandmark68NetBase.ts +++ b/src/faceLandmarkNet/FaceLandmark68NetBase.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { IDimensions, Point } from '../classes/index'; import { FaceLandmarks68 } from '../classes/FaceLandmarks68'; diff --git a/src/faceProcessor/FaceProcessor.ts b/src/faceProcessor/FaceProcessor.ts index 5d5f998..6fca7dd 100644 --- a/src/faceProcessor/FaceProcessor.ts +++ b/src/faceProcessor/FaceProcessor.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { fullyConnectedLayer } from '../common/fullyConnectedLayer'; import { NetInput } from '../dom/index'; diff --git a/src/faceProcessor/extractParamsFromWeigthMap.ts b/src/faceProcessor/extractParamsFromWeigthMap.ts index 0b31221..f8b137b 100644 --- a/src/faceProcessor/extractParamsFromWeigthMap.ts +++ b/src/faceProcessor/extractParamsFromWeigthMap.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { disposeUnusedWeightTensors, extractWeightEntryFactory, FCParams, ParamMapping, diff --git a/src/faceProcessor/util.ts b/src/faceProcessor/util.ts index 0bb179d..c6159dd 100644 --- a/src/faceProcessor/util.ts +++ b/src/faceProcessor/util.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; export function seperateWeightMaps(weightMap: tf.NamedTensorMap) { const featureExtractorMap: tf.NamedTensorMap = {}; diff --git a/src/faceRecognitionNet/FaceRecognitionNet.ts b/src/faceRecognitionNet/FaceRecognitionNet.ts index 13fafc6..205c746 100644 --- a/src/faceRecognitionNet/FaceRecognitionNet.ts +++ b/src/faceRecognitionNet/FaceRecognitionNet.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { NetInput, TNetInput, toNetInput } from '../dom/index'; import { NeuralNetwork } from '../NeuralNetwork'; diff --git a/src/faceRecognitionNet/convLayer.ts b/src/faceRecognitionNet/convLayer.ts index bde3c35..721f954 100644 --- a/src/faceRecognitionNet/convLayer.ts +++ b/src/faceRecognitionNet/convLayer.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { scale } from './scaleLayer'; import { ConvLayerParams } from './types'; diff --git a/src/faceRecognitionNet/extractParams.ts b/src/faceRecognitionNet/extractParams.ts index b579026..1efc681 100644 --- a/src/faceRecognitionNet/extractParams.ts +++ b/src/faceRecognitionNet/extractParams.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvParams, extractWeightsFactory, ExtractWeightsFunction, ParamMapping, diff --git a/src/faceRecognitionNet/extractParamsFromWeigthMap.ts b/src/faceRecognitionNet/extractParamsFromWeigthMap.ts index 03ae418..84d4dda 100644 --- a/src/faceRecognitionNet/extractParamsFromWeigthMap.ts +++ b/src/faceRecognitionNet/extractParamsFromWeigthMap.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping } from '../common/index'; import { isTensor2D } from '../utils/index'; diff --git a/src/faceRecognitionNet/residualLayer.ts b/src/faceRecognitionNet/residualLayer.ts index 8db825c..0e6b359 100644 --- a/src/faceRecognitionNet/residualLayer.ts +++ b/src/faceRecognitionNet/residualLayer.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { conv, convDown, convNoRelu } from './convLayer'; import { ResidualLayerParams } from './types'; diff --git a/src/faceRecognitionNet/scaleLayer.ts b/src/faceRecognitionNet/scaleLayer.ts index 2158cab..89890dd 100644 --- a/src/faceRecognitionNet/scaleLayer.ts +++ b/src/faceRecognitionNet/scaleLayer.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ScaleLayerParams } from './types'; diff --git a/src/faceRecognitionNet/types.ts b/src/faceRecognitionNet/types.ts index a1af14f..a14c2c4 100644 --- a/src/faceRecognitionNet/types.ts +++ b/src/faceRecognitionNet/types.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvParams } from '../common/index'; diff --git a/src/globalApi/DetectFaceLandmarksTasks.ts b/src/globalApi/DetectFaceLandmarksTasks.ts index a683916..03397d1 100644 --- a/src/globalApi/DetectFaceLandmarksTasks.ts +++ b/src/globalApi/DetectFaceLandmarksTasks.ts @@ -1,5 +1,5 @@ /* eslint-disable max-classes-per-file */ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { FaceLandmarks68 } from '../classes/FaceLandmarks68'; import { extractFaces, extractFaceTensors, TNetInput } from '../dom/index'; diff --git a/src/globalApi/PredictAgeAndGenderTask.ts b/src/globalApi/PredictAgeAndGenderTask.ts index 16dae6f..b6c5aeb 100644 --- a/src/globalApi/PredictAgeAndGenderTask.ts +++ b/src/globalApi/PredictAgeAndGenderTask.ts @@ -1,5 +1,5 @@ /* eslint-disable max-classes-per-file */ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { AgeAndGenderPrediction } from '../ageGenderNet/types'; import { TNetInput } from '../dom/index'; diff --git a/src/globalApi/PredictFaceExpressionsTask.ts b/src/globalApi/PredictFaceExpressionsTask.ts index 157fcca..305fb6d 100644 --- a/src/globalApi/PredictFaceExpressionsTask.ts +++ b/src/globalApi/PredictFaceExpressionsTask.ts @@ -1,5 +1,5 @@ /* eslint-disable max-classes-per-file */ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { TNetInput } from '../dom/index'; import { FaceExpressions } from '../faceExpressionNet/FaceExpressions'; diff --git a/src/globalApi/extractFacesAndComputeResults.ts b/src/globalApi/extractFacesAndComputeResults.ts index 56168bf..5c89d3e 100644 --- a/src/globalApi/extractFacesAndComputeResults.ts +++ b/src/globalApi/extractFacesAndComputeResults.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { FaceDetection } from '../classes/FaceDetection'; import { extractFaces, extractFaceTensors, TNetInput } from '../dom/index'; diff --git a/src/index.ts b/src/index.ts index 0d7ef58..18fe7be 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -import * as tf from '../dist/tfjs.esm.js'; +import * as tf from '../dist/tfjs.esm'; import * as draw from './draw/index'; import * as utils from './utils/index'; import * as pkg from '../package.json'; diff --git a/src/ops/normalize.ts b/src/ops/normalize.ts index 65db74d..cc0f4ee 100644 --- a/src/ops/normalize.ts +++ b/src/ops/normalize.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; export function normalize(x: tf.Tensor4D, meanRgb: number[]): tf.Tensor4D { return tf.tidy(() => { diff --git a/src/ops/padToSquare.ts b/src/ops/padToSquare.ts index 9b818d8..a818a36 100644 --- a/src/ops/padToSquare.ts +++ b/src/ops/padToSquare.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; /** * Pads the smaller dimension of an image tensor with zeros, such that width === height. diff --git a/src/ssdMobilenetv1/SsdMobilenetv1.ts b/src/ssdMobilenetv1/SsdMobilenetv1.ts index 856b798..c9a452a 100644 --- a/src/ssdMobilenetv1/SsdMobilenetv1.ts +++ b/src/ssdMobilenetv1/SsdMobilenetv1.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { Rect } from '../classes/index'; import { FaceDetection } from '../classes/FaceDetection'; diff --git a/src/ssdMobilenetv1/boxPredictionLayer.ts b/src/ssdMobilenetv1/boxPredictionLayer.ts index 3784822..76ddd2a 100644 --- a/src/ssdMobilenetv1/boxPredictionLayer.ts +++ b/src/ssdMobilenetv1/boxPredictionLayer.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { convLayer } from '../common/index'; import { BoxPredictionParams } from './types'; diff --git a/src/ssdMobilenetv1/extractParams.ts b/src/ssdMobilenetv1/extractParams.ts index ba9687b..091b5c2 100644 --- a/src/ssdMobilenetv1/extractParams.ts +++ b/src/ssdMobilenetv1/extractParams.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ExtractWeightsFunction, ParamMapping, ConvParams, extractWeightsFactory, diff --git a/src/ssdMobilenetv1/extractParamsFromWeigthMap.ts b/src/ssdMobilenetv1/extractParamsFromWeigthMap.ts index d2da6a4..f0fbe2a 100644 --- a/src/ssdMobilenetv1/extractParamsFromWeigthMap.ts +++ b/src/ssdMobilenetv1/extractParamsFromWeigthMap.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvParams, disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping, diff --git a/src/ssdMobilenetv1/mobileNetV1.ts b/src/ssdMobilenetv1/mobileNetV1.ts index 4db1521..2d3a17f 100644 --- a/src/ssdMobilenetv1/mobileNetV1.ts +++ b/src/ssdMobilenetv1/mobileNetV1.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { pointwiseConvLayer } from './pointwiseConvLayer'; import { MobileNetV1 } from './types'; diff --git a/src/ssdMobilenetv1/nonMaxSuppression.ts b/src/ssdMobilenetv1/nonMaxSuppression.ts index 22c72a7..f7fcf79 100644 --- a/src/ssdMobilenetv1/nonMaxSuppression.ts +++ b/src/ssdMobilenetv1/nonMaxSuppression.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; function IOU(boxes: tf.Tensor2D, i: number, j: number) { const boxesData = boxes.arraySync(); diff --git a/src/ssdMobilenetv1/outputLayer.ts b/src/ssdMobilenetv1/outputLayer.ts index 20f1a91..a2b3bd6 100644 --- a/src/ssdMobilenetv1/outputLayer.ts +++ b/src/ssdMobilenetv1/outputLayer.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { OutputLayerParams } from './types'; diff --git a/src/ssdMobilenetv1/pointwiseConvLayer.ts b/src/ssdMobilenetv1/pointwiseConvLayer.ts index 659e8e9..3c73fd1 100644 --- a/src/ssdMobilenetv1/pointwiseConvLayer.ts +++ b/src/ssdMobilenetv1/pointwiseConvLayer.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { PointwiseConvParams } from './types'; diff --git a/src/ssdMobilenetv1/predictionLayer.ts b/src/ssdMobilenetv1/predictionLayer.ts index 5964bdc..a77cb7c 100644 --- a/src/ssdMobilenetv1/predictionLayer.ts +++ b/src/ssdMobilenetv1/predictionLayer.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { boxPredictionLayer } from './boxPredictionLayer'; import { pointwiseConvLayer } from './pointwiseConvLayer'; diff --git a/src/ssdMobilenetv1/types.ts b/src/ssdMobilenetv1/types.ts index f73b6cc..f3e0718 100644 --- a/src/ssdMobilenetv1/types.ts +++ b/src/ssdMobilenetv1/types.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvParams } from '../common/index'; diff --git a/src/tfjs/tf-browser.js b/src/tfjs/tf-browser.js deleted file mode 100644 index e77521c..0000000 --- a/src/tfjs/tf-browser.js +++ /dev/null @@ -1,47 +0,0 @@ -/* eslint-disable import/no-extraneous-dependencies */ -/* eslint-disable node/no-unpublished-import */ - -// wrapper to load tfjs in a single place so version can be changed quickly - -// simplified -// { modules: 1061, moduleBytes: 3772720, outputBytes: 1531035 } - -export * from '@tensorflow/tfjs/dist/index.js'; -export * from '@tensorflow/tfjs-backend-wasm'; - -// modular -// { modules: 1064, moduleBytes: 3793219, outputBytes: 1535600 } - -/* -// get versions of all packages. -import { version as tfjs } from '@tensorflow/tfjs/package.json'; -import { version as versionCore } from '@tensorflow/tfjs-core/package.json'; -import { version as versionData } from '@tensorflow/tfjs-data/package.json'; -import { version as versionLayers } from '@tensorflow/tfjs-layers/package.json'; -import { version as versionConverter } from '@tensorflow/tfjs-converter/package.json'; -// for backends, get version from source so it can register backend during import -import { version_cpu } from '@tensorflow/tfjs-backend-cpu/dist/index.js'; -import { version_webgl } from '@tensorflow/tfjs-backend-webgl/dist/index.js'; -import { version_wasm } from '@tensorflow/tfjs-backend-wasm/dist/index.js'; - -// export all -export * from '@tensorflow/tfjs-core/dist/index.js'; -export * from '@tensorflow/tfjs-layers/dist/index.js'; -export * from '@tensorflow/tfjs-converter/dist/index.js'; -export * as data from '@tensorflow/tfjs-data/dist/index.js'; -export * from '@tensorflow/tfjs-backend-cpu/dist/index.js'; -export * from '@tensorflow/tfjs-backend-webgl/dist/index.js'; -export * from '@tensorflow/tfjs-backend-wasm/dist/index.js'; - -// export versions -export const version = { - tfjs, - 'tfjs-core': versionCore, - 'tfjs-data': versionData, - 'tfjs-layers': versionLayers, - 'tfjs-converter': versionConverter, - 'tfjs-backend-cpu': version_cpu, - 'tfjs-backend-webgl': version_webgl, - 'tfjs-backend-wasm': version_wasm, -}; -*/ diff --git a/src/tfjs/tf-browser.ts b/src/tfjs/tf-browser.ts new file mode 100644 index 0000000..32c7e34 --- /dev/null +++ b/src/tfjs/tf-browser.ts @@ -0,0 +1,7 @@ +/* eslint-disable import/no-extraneous-dependencies */ +/* eslint-disable node/no-unpublished-import */ + +// wrapper to load tfjs in a single place so version can be changed quickly + +export * from '@tensorflow/tfjs/dist/index.js'; +export * from '@tensorflow/tfjs-backend-wasm'; diff --git a/src/tfjs/tf-node-gpu.js b/src/tfjs/tf-node-gpu.ts similarity index 100% rename from src/tfjs/tf-node-gpu.js rename to src/tfjs/tf-node-gpu.ts diff --git a/src/tfjs/tf-node.js b/src/tfjs/tf-node.ts similarity index 100% rename from src/tfjs/tf-node.js rename to src/tfjs/tf-node.ts diff --git a/src/tinyFaceDetector/TinyFaceDetector.ts b/src/tinyFaceDetector/TinyFaceDetector.ts index 6b74790..4fbc1f8 100644 --- a/src/tinyFaceDetector/TinyFaceDetector.ts +++ b/src/tinyFaceDetector/TinyFaceDetector.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { FaceDetection, Point } from '../classes/index'; import { ParamMapping } from '../common/index'; diff --git a/src/tinyYolov2/TinyYolov2.ts b/src/tinyYolov2/TinyYolov2.ts index 931df16..b3250a1 100644 --- a/src/tinyYolov2/TinyYolov2.ts +++ b/src/tinyYolov2/TinyYolov2.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { FaceDetection, Point } from '../classes/index'; import { ParamMapping } from '../common/types'; diff --git a/src/tinyYolov2/TinyYolov2Base.ts b/src/tinyYolov2/TinyYolov2Base.ts index 43d8c24..e587147 100644 --- a/src/tinyYolov2/TinyYolov2Base.ts +++ b/src/tinyYolov2/TinyYolov2Base.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { BoundingBox } from '../classes/BoundingBox'; import { Dimensions } from '../classes/Dimensions'; diff --git a/src/tinyYolov2/convWithBatchNorm.ts b/src/tinyYolov2/convWithBatchNorm.ts index 5d80a31..0209563 100644 --- a/src/tinyYolov2/convWithBatchNorm.ts +++ b/src/tinyYolov2/convWithBatchNorm.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { leaky } from './leaky'; import { ConvWithBatchNorm } from './types'; diff --git a/src/tinyYolov2/depthwiseSeparableConv.ts b/src/tinyYolov2/depthwiseSeparableConv.ts index 5fb01ad..62f5c3e 100644 --- a/src/tinyYolov2/depthwiseSeparableConv.ts +++ b/src/tinyYolov2/depthwiseSeparableConv.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { SeparableConvParams } from '../common/types'; import { leaky } from './leaky'; diff --git a/src/tinyYolov2/extractParams.ts b/src/tinyYolov2/extractParams.ts index 494c686..2237a79 100644 --- a/src/tinyYolov2/extractParams.ts +++ b/src/tinyYolov2/extractParams.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { extractConvParamsFactory } from '../common/index'; import { extractSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory'; diff --git a/src/tinyYolov2/extractParamsFromWeigthMap.ts b/src/tinyYolov2/extractParamsFromWeigthMap.ts index 25427c8..1577f85 100644 --- a/src/tinyYolov2/extractParamsFromWeigthMap.ts +++ b/src/tinyYolov2/extractParamsFromWeigthMap.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvParams } from '../common/index'; import { disposeUnusedWeightTensors } from '../common/disposeUnusedWeightTensors'; diff --git a/src/tinyYolov2/leaky.ts b/src/tinyYolov2/leaky.ts index 56f4d15..9a44f09 100644 --- a/src/tinyYolov2/leaky.ts +++ b/src/tinyYolov2/leaky.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; export function leaky(x: tf.Tensor4D): tf.Tensor4D { return tf.tidy(() => { diff --git a/src/tinyYolov2/types.ts b/src/tinyYolov2/types.ts index 5a5fcd1..54431db 100644 --- a/src/tinyYolov2/types.ts +++ b/src/tinyYolov2/types.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvParams } from '../common/index'; import { SeparableConvParams } from '../common/types'; diff --git a/src/utils/index.ts b/src/utils/index.ts index 7ff8761..7ed8170 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { Point } from '../classes/index'; import { Dimensions, IDimensions } from '../classes/Dimensions'; diff --git a/src/xception/TinyXception.ts b/src/xception/TinyXception.ts index f96b86f..58faab7 100644 --- a/src/xception/TinyXception.ts +++ b/src/xception/TinyXception.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvParams, depthwiseSeparableConv } from '../common/index'; import { NetInput, TNetInput, toNetInput } from '../dom/index'; diff --git a/src/xception/extractParamsFromWeigthMap.ts b/src/xception/extractParamsFromWeigthMap.ts index 4fe1083..8cae897 100644 --- a/src/xception/extractParamsFromWeigthMap.ts +++ b/src/xception/extractParamsFromWeigthMap.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { disposeUnusedWeightTensors, diff --git a/tsconfig.json b/tsconfig.json index db9c091..194577f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,7 @@ "moduleResolution": "node", "lib": ["es2018", "dom"], "typeRoots": [ - "typings", + "types", "node_modules/@types" ], "outDir": "types", @@ -14,12 +14,13 @@ "emitDecoratorMetadata": true, "experimentalDecorators": true, "importHelpers": true, + "noImplicitAny": false, "preserveConstEnums": true, "removeComments": false, "resolveJsonModule": true, "skipLibCheck": true, "sourceMap": false, - "strictNullChecks": true, + "strictNullChecks": true }, "formatCodeOptions": { "indentSize": 2, "tabSize": 2 }, "include": ["src"], diff --git a/types/NeuralNetwork.d.ts b/types/NeuralNetwork.d.ts index 061a59a..9ec4c0c 100644 --- a/types/NeuralNetwork.d.ts +++ b/types/NeuralNetwork.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../dist/tfjs.esm.js'; +import * as tf from '../dist/tfjs.esm'; import { ParamMapping } from './common/index'; export declare abstract class NeuralNetwork { protected _name: string; diff --git a/types/ageGenderNet/AgeGenderNet.d.ts b/types/ageGenderNet/AgeGenderNet.d.ts index e5b9f73..874759d 100644 --- a/types/ageGenderNet/AgeGenderNet.d.ts +++ b/types/ageGenderNet/AgeGenderNet.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { TinyXception } from '../xception/TinyXception'; import { AgeAndGenderPrediction, NetOutput, NetParams } from './types'; import { NeuralNetwork } from '../NeuralNetwork'; @@ -16,14 +16,14 @@ export declare class AgeGenderNet extends NeuralNetwork { loadClassifierParams(weights: Float32Array): void; extractClassifierParams(weights: Float32Array): { params: NetParams; - paramMappings: import("../common/types.js").ParamMapping[]; + paramMappings: import("../common/types").ParamMapping[]; }; protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: NetParams; - paramMappings: import("../common/types.js").ParamMapping[]; + paramMappings: import("../common/types").ParamMapping[]; }; protected extractParams(weights: Float32Array): { params: NetParams; - paramMappings: import("../common/types.js").ParamMapping[]; + paramMappings: import("../common/types").ParamMapping[]; }; } diff --git a/types/ageGenderNet/extractParamsFromWeigthMap.d.ts b/types/ageGenderNet/extractParamsFromWeigthMap.d.ts index e0a1aff..b5f42fc 100644 --- a/types/ageGenderNet/extractParamsFromWeigthMap.d.ts +++ b/types/ageGenderNet/extractParamsFromWeigthMap.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ParamMapping } from '../common/index'; import { NetParams } from './types'; export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { diff --git a/types/ageGenderNet/types.d.ts b/types/ageGenderNet/types.d.ts index ba4468f..8cda0ed 100644 --- a/types/ageGenderNet/types.d.ts +++ b/types/ageGenderNet/types.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { FCParams } from '../common/index'; export declare enum Gender { FEMALE = "female", diff --git a/types/common/convLayer.d.ts b/types/common/convLayer.d.ts index 44f8510..3b11268 100644 --- a/types/common/convLayer.d.ts +++ b/types/common/convLayer.d.ts @@ -1,3 +1,3 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvParams } from './types'; export declare function convLayer(x: tf.Tensor4D, params: ConvParams, padding?: 'valid' | 'same', withRelu?: boolean): tf.Tensor4D; diff --git a/types/common/depthwiseSeparableConv.d.ts b/types/common/depthwiseSeparableConv.d.ts index 6352c70..630c8ba 100644 --- a/types/common/depthwiseSeparableConv.d.ts +++ b/types/common/depthwiseSeparableConv.d.ts @@ -1,3 +1,3 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { SeparableConvParams } from './types'; export declare function depthwiseSeparableConv(x: tf.Tensor4D, params: SeparableConvParams, stride: [number, number]): tf.Tensor4D; diff --git a/types/common/fullyConnectedLayer.d.ts b/types/common/fullyConnectedLayer.d.ts index fefc5d4..2c0655d 100644 --- a/types/common/fullyConnectedLayer.d.ts +++ b/types/common/fullyConnectedLayer.d.ts @@ -1,3 +1,3 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { FCParams } from './types'; export declare function fullyConnectedLayer(x: tf.Tensor2D, params: FCParams): tf.Tensor2D; diff --git a/types/common/types.d.ts b/types/common/types.d.ts index 75e734f..a50c242 100644 --- a/types/common/types.d.ts +++ b/types/common/types.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; export declare type ExtractWeightsFunction = (numWeights: number) => Float32Array; export declare type ParamMapping = { originalPath?: string; diff --git a/types/dom/NetInput.d.ts b/types/dom/NetInput.d.ts index 1c045b4..756fc25 100644 --- a/types/dom/NetInput.d.ts +++ b/types/dom/NetInput.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { Dimensions } from '../classes/Dimensions'; import { TResolvedNetInput } from './types'; export declare class NetInput { diff --git a/types/dom/extractFaceTensors.d.ts b/types/dom/extractFaceTensors.d.ts index 071df38..5e37b8c 100644 --- a/types/dom/extractFaceTensors.d.ts +++ b/types/dom/extractFaceTensors.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { Rect } from '../classes/index'; import { FaceDetection } from '../classes/FaceDetection'; /** diff --git a/types/dom/imageTensorToCanvas.d.ts b/types/dom/imageTensorToCanvas.d.ts index 726f69b..2d5eb7c 100644 --- a/types/dom/imageTensorToCanvas.d.ts +++ b/types/dom/imageTensorToCanvas.d.ts @@ -1,2 +1,2 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; export declare function imageTensorToCanvas(imgTensor: tf.Tensor, canvas?: HTMLCanvasElement): Promise; diff --git a/types/dom/loadWeightMap.d.ts b/types/dom/loadWeightMap.d.ts index 933fda9..f067282 100644 --- a/types/dom/loadWeightMap.d.ts +++ b/types/dom/loadWeightMap.d.ts @@ -1,2 +1,2 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; export declare function loadWeightMap(uri: string | undefined, defaultModelName: string): Promise; diff --git a/types/dom/types.d.ts b/types/dom/types.d.ts index 6cdfc6c..99c5562 100644 --- a/types/dom/types.d.ts +++ b/types/dom/types.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { NetInput } from './NetInput'; export declare type TMediaElement = HTMLImageElement | HTMLVideoElement | HTMLCanvasElement; export declare type TResolvedNetInput = TMediaElement | tf.Tensor3D | tf.Tensor4D; diff --git a/types/faceExpressionNet/FaceExpressionNet.d.ts b/types/faceExpressionNet/FaceExpressionNet.d.ts index c825197..b01ccea 100644 --- a/types/faceExpressionNet/FaceExpressionNet.d.ts +++ b/types/faceExpressionNet/FaceExpressionNet.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { NetInput, TNetInput } from '../dom/index'; import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor'; import { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types'; diff --git a/types/faceFeatureExtractor/FaceFeatureExtractor.d.ts b/types/faceFeatureExtractor/FaceFeatureExtractor.d.ts index 59e5813..f864b9d 100644 --- a/types/faceFeatureExtractor/FaceFeatureExtractor.d.ts +++ b/types/faceFeatureExtractor/FaceFeatureExtractor.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { NetInput, TNetInput } from '../dom/index'; import { NeuralNetwork } from '../NeuralNetwork'; import { FaceFeatureExtractorParams, IFaceFeatureExtractor } from './types'; @@ -9,10 +9,10 @@ export declare class FaceFeatureExtractor extends NeuralNetwork { protected getDefaultModelName(): string; protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: NetParams; - paramMappings: import("../common/types.js").ParamMapping[]; + paramMappings: import("../common/types").ParamMapping[]; }; protected extractParams(weights: Float32Array): { params: NetParams; - paramMappings: import("../common/types.js").ParamMapping[]; + paramMappings: import("../common/types").ParamMapping[]; }; } diff --git a/types/faceRecognitionNet/convLayer.d.ts b/types/faceRecognitionNet/convLayer.d.ts index 2316af1..3243a70 100644 --- a/types/faceRecognitionNet/convLayer.d.ts +++ b/types/faceRecognitionNet/convLayer.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvLayerParams } from './types'; export declare function conv(x: tf.Tensor4D, params: ConvLayerParams): any; export declare function convNoRelu(x: tf.Tensor4D, params: ConvLayerParams): any; diff --git a/types/faceRecognitionNet/extractParamsFromWeigthMap.d.ts b/types/faceRecognitionNet/extractParamsFromWeigthMap.d.ts index e0a1aff..b5f42fc 100644 --- a/types/faceRecognitionNet/extractParamsFromWeigthMap.d.ts +++ b/types/faceRecognitionNet/extractParamsFromWeigthMap.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ParamMapping } from '../common/index'; import { NetParams } from './types'; export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { diff --git a/types/faceRecognitionNet/residualLayer.d.ts b/types/faceRecognitionNet/residualLayer.d.ts index fcbe422..fbaa75d 100644 --- a/types/faceRecognitionNet/residualLayer.d.ts +++ b/types/faceRecognitionNet/residualLayer.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ResidualLayerParams } from './types'; export declare function residual(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D; export declare function residualDown(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D; diff --git a/types/faceRecognitionNet/scaleLayer.d.ts b/types/faceRecognitionNet/scaleLayer.d.ts index d3826c9..8fcd676 100644 --- a/types/faceRecognitionNet/scaleLayer.d.ts +++ b/types/faceRecognitionNet/scaleLayer.d.ts @@ -1,3 +1,3 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ScaleLayerParams } from './types'; export declare function scale(x: tf.Tensor4D, params: ScaleLayerParams): tf.Tensor4D; diff --git a/types/faceRecognitionNet/types.d.ts b/types/faceRecognitionNet/types.d.ts index f5ae712..6b4c110 100644 --- a/types/faceRecognitionNet/types.d.ts +++ b/types/faceRecognitionNet/types.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvParams } from '../common/index'; export declare type ScaleLayerParams = { weights: tf.Tensor1D; diff --git a/types/globalApi/extractFacesAndComputeResults.d.ts b/types/globalApi/extractFacesAndComputeResults.d.ts index aa42a92..2190bce 100644 --- a/types/globalApi/extractFacesAndComputeResults.d.ts +++ b/types/globalApi/extractFacesAndComputeResults.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { FaceDetection } from '../classes/FaceDetection'; import { TNetInput } from '../dom/index'; import { WithFaceDetection } from '../factories/WithFaceDetection'; diff --git a/types/index.d.ts b/types/index.d.ts index d6c3353..5862bca 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../dist/tfjs.esm.js'; +import * as tf from '../dist/tfjs.esm'; import * as draw from './draw/index'; import * as utils from './utils/index'; export { tf, draw, utils }; diff --git a/types/ops/normalize.d.ts b/types/ops/normalize.d.ts index 3442367..763a64f 100644 --- a/types/ops/normalize.d.ts +++ b/types/ops/normalize.d.ts @@ -1,2 +1,2 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; export declare function normalize(x: tf.Tensor4D, meanRgb: number[]): tf.Tensor4D; diff --git a/types/ops/padToSquare.d.ts b/types/ops/padToSquare.d.ts index c23442e..a7d7805 100644 --- a/types/ops/padToSquare.d.ts +++ b/types/ops/padToSquare.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; /** * Pads the smaller dimension of an image tensor with zeros, such that width === height. * diff --git a/types/ssdMobilenetv1/SsdMobilenetv1.d.ts b/types/ssdMobilenetv1/SsdMobilenetv1.d.ts index f47c802..a414a2c 100644 --- a/types/ssdMobilenetv1/SsdMobilenetv1.d.ts +++ b/types/ssdMobilenetv1/SsdMobilenetv1.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { FaceDetection } from '../classes/FaceDetection'; import { NetInput, TNetInput } from '../dom/index'; import { NeuralNetwork } from '../NeuralNetwork'; @@ -12,10 +12,10 @@ export declare class SsdMobilenetv1 extends NeuralNetwork { protected getDefaultModelName(): string; protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: NetParams; - paramMappings: import("../common/types.js").ParamMapping[]; + paramMappings: import("../common/types").ParamMapping[]; }; protected extractParams(weights: Float32Array): { params: NetParams; - paramMappings: import("../common/types.js").ParamMapping[]; + paramMappings: import("../common/types").ParamMapping[]; }; } diff --git a/types/ssdMobilenetv1/boxPredictionLayer.d.ts b/types/ssdMobilenetv1/boxPredictionLayer.d.ts index 59f5a14..7605a1f 100644 --- a/types/ssdMobilenetv1/boxPredictionLayer.d.ts +++ b/types/ssdMobilenetv1/boxPredictionLayer.d.ts @@ -1,3 +1,3 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { BoxPredictionParams } from './types'; export declare function boxPredictionLayer(x: tf.Tensor4D, params: BoxPredictionParams): any; diff --git a/types/ssdMobilenetv1/extractParamsFromWeigthMap.d.ts b/types/ssdMobilenetv1/extractParamsFromWeigthMap.d.ts index e0a1aff..b5f42fc 100644 --- a/types/ssdMobilenetv1/extractParamsFromWeigthMap.d.ts +++ b/types/ssdMobilenetv1/extractParamsFromWeigthMap.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ParamMapping } from '../common/index'; import { NetParams } from './types'; export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { diff --git a/types/ssdMobilenetv1/mobileNetV1.d.ts b/types/ssdMobilenetv1/mobileNetV1.d.ts index 02c5129..b997b9f 100644 --- a/types/ssdMobilenetv1/mobileNetV1.d.ts +++ b/types/ssdMobilenetv1/mobileNetV1.d.ts @@ -1,3 +1,3 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { MobileNetV1 } from './types'; export declare function mobileNetV1(x: tf.Tensor4D, params: MobileNetV1.Params): any; diff --git a/types/ssdMobilenetv1/nonMaxSuppression.d.ts b/types/ssdMobilenetv1/nonMaxSuppression.d.ts index c8cb64c..40e4c40 100644 --- a/types/ssdMobilenetv1/nonMaxSuppression.d.ts +++ b/types/ssdMobilenetv1/nonMaxSuppression.d.ts @@ -1,2 +1,2 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; export declare function nonMaxSuppression(boxes: tf.Tensor2D, scores: number[], maxOutputSize: number, iouThreshold: number, scoreThreshold: number): number[]; diff --git a/types/ssdMobilenetv1/outputLayer.d.ts b/types/ssdMobilenetv1/outputLayer.d.ts index 9c0f133..a335862 100644 --- a/types/ssdMobilenetv1/outputLayer.d.ts +++ b/types/ssdMobilenetv1/outputLayer.d.ts @@ -1,3 +1,3 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { OutputLayerParams } from './types'; export declare function outputLayer(boxPredictions: tf.Tensor4D, classPredictions: tf.Tensor4D, params: OutputLayerParams): any; diff --git a/types/ssdMobilenetv1/pointwiseConvLayer.d.ts b/types/ssdMobilenetv1/pointwiseConvLayer.d.ts index f8694b9..e30b767 100644 --- a/types/ssdMobilenetv1/pointwiseConvLayer.d.ts +++ b/types/ssdMobilenetv1/pointwiseConvLayer.d.ts @@ -1,3 +1,3 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { PointwiseConvParams } from './types'; export declare function pointwiseConvLayer(x: tf.Tensor4D, params: PointwiseConvParams, strides: [number, number]): any; diff --git a/types/ssdMobilenetv1/predictionLayer.d.ts b/types/ssdMobilenetv1/predictionLayer.d.ts index f6c6e9d..8559d7c 100644 --- a/types/ssdMobilenetv1/predictionLayer.d.ts +++ b/types/ssdMobilenetv1/predictionLayer.d.ts @@ -1,3 +1,3 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { PredictionLayerParams } from './types'; export declare function predictionLayer(x: tf.Tensor4D, conv11: tf.Tensor4D, params: PredictionLayerParams): any; diff --git a/types/ssdMobilenetv1/types.d.ts b/types/ssdMobilenetv1/types.d.ts index 56dde37..0a62845 100644 --- a/types/ssdMobilenetv1/types.d.ts +++ b/types/ssdMobilenetv1/types.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvParams } from '../common/index'; export declare type PointwiseConvParams = { filters: tf.Tensor4D; diff --git a/types/tinyFaceDetector/TinyFaceDetector.d.ts b/types/tinyFaceDetector/TinyFaceDetector.d.ts index d7cce74..1a3b72d 100644 --- a/types/tinyFaceDetector/TinyFaceDetector.d.ts +++ b/types/tinyFaceDetector/TinyFaceDetector.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { FaceDetection, Point } from '../classes/index'; import { ParamMapping } from '../common/index'; import { TNetInput } from '../dom/index'; diff --git a/types/tinyYolov2/TinyYolov2.d.ts b/types/tinyYolov2/TinyYolov2.d.ts index 721b394..2f0853d 100644 --- a/types/tinyYolov2/TinyYolov2.d.ts +++ b/types/tinyYolov2/TinyYolov2.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { FaceDetection, Point } from '../classes/index'; import { ParamMapping } from '../common/types'; import { TNetInput } from '../dom/types'; diff --git a/types/tinyYolov2/TinyYolov2Base.d.ts b/types/tinyYolov2/TinyYolov2Base.d.ts index ad58969..4d1b860 100644 --- a/types/tinyYolov2/TinyYolov2Base.d.ts +++ b/types/tinyYolov2/TinyYolov2Base.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { Dimensions } from '../classes/Dimensions'; import { ObjectDetection } from '../classes/ObjectDetection'; import { NetInput } from '../dom/NetInput'; @@ -22,11 +22,11 @@ export declare class TinyYolov2Base extends NeuralNetwork { protected getDefaultModelName(): string; protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams; - paramMappings: import("../common/types.js").ParamMapping[]; + paramMappings: import("../common/types").ParamMapping[]; }; protected extractParams(weights: Float32Array): { params: TinyYolov2NetParams; - paramMappings: import("../common/types.js").ParamMapping[]; + paramMappings: import("../common/types").ParamMapping[]; }; protected extractBoxes(outputTensor: tf.Tensor4D, inputBlobDimensions: Dimensions, scoreThreshold?: number): Promise; private extractPredictedClass; diff --git a/types/tinyYolov2/convWithBatchNorm.d.ts b/types/tinyYolov2/convWithBatchNorm.d.ts index ce94166..229f572 100644 --- a/types/tinyYolov2/convWithBatchNorm.d.ts +++ b/types/tinyYolov2/convWithBatchNorm.d.ts @@ -1,3 +1,3 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvWithBatchNorm } from './types'; export declare function convWithBatchNorm(x: tf.Tensor4D, params: ConvWithBatchNorm): tf.Tensor4D; diff --git a/types/tinyYolov2/depthwiseSeparableConv.d.ts b/types/tinyYolov2/depthwiseSeparableConv.d.ts index b8a01e8..dcb9956 100644 --- a/types/tinyYolov2/depthwiseSeparableConv.d.ts +++ b/types/tinyYolov2/depthwiseSeparableConv.d.ts @@ -1,3 +1,3 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { SeparableConvParams } from '../common/types'; export declare function depthwiseSeparableConv(x: tf.Tensor4D, params: SeparableConvParams): tf.Tensor4D; diff --git a/types/tinyYolov2/extractParamsFromWeigthMap.d.ts b/types/tinyYolov2/extractParamsFromWeigthMap.d.ts index 25a05a1..90a45de 100644 --- a/types/tinyYolov2/extractParamsFromWeigthMap.d.ts +++ b/types/tinyYolov2/extractParamsFromWeigthMap.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ParamMapping } from '../common/types'; import { TinyYolov2Config } from './config'; import { TinyYolov2NetParams } from './types'; diff --git a/types/tinyYolov2/leaky.d.ts b/types/tinyYolov2/leaky.d.ts index 01a54ce..ae5c2f1 100644 --- a/types/tinyYolov2/leaky.d.ts +++ b/types/tinyYolov2/leaky.d.ts @@ -1,2 +1,2 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; export declare function leaky(x: tf.Tensor4D): tf.Tensor4D; diff --git a/types/tinyYolov2/types.d.ts b/types/tinyYolov2/types.d.ts index ce7804e..a2dc675 100644 --- a/types/tinyYolov2/types.d.ts +++ b/types/tinyYolov2/types.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ConvParams } from '../common/index'; import { SeparableConvParams } from '../common/types'; export declare type BatchNorm = { diff --git a/types/utils/index.d.ts b/types/utils/index.d.ts index 0bcb8da..3e720e3 100644 --- a/types/utils/index.d.ts +++ b/types/utils/index.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { Point } from '../classes/index'; import { Dimensions, IDimensions } from '../classes/Dimensions'; export declare function isTensor(tensor: any, dim: number): boolean; diff --git a/types/xception/TinyXception.d.ts b/types/xception/TinyXception.d.ts index b0f58d7..bdccc03 100644 --- a/types/xception/TinyXception.d.ts +++ b/types/xception/TinyXception.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { NetInput, TNetInput } from '../dom/index'; import { NeuralNetwork } from '../NeuralNetwork'; import { TinyXceptionParams } from './types'; @@ -10,10 +10,10 @@ export declare class TinyXception extends NeuralNetwork { protected getDefaultModelName(): string; protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyXceptionParams; - paramMappings: import("../common/types.js").ParamMapping[]; + paramMappings: import("../common/types").ParamMapping[]; }; protected extractParams(weights: Float32Array): { params: TinyXceptionParams; - paramMappings: import("../common/types.js").ParamMapping[]; + paramMappings: import("../common/types").ParamMapping[]; }; } diff --git a/types/xception/extractParamsFromWeigthMap.d.ts b/types/xception/extractParamsFromWeigthMap.d.ts index ab56a36..3c99d7e 100644 --- a/types/xception/extractParamsFromWeigthMap.d.ts +++ b/types/xception/extractParamsFromWeigthMap.d.ts @@ -1,4 +1,4 @@ -import * as tf from '../../dist/tfjs.esm.js'; +import * as tf from '../../dist/tfjs.esm'; import { ParamMapping } from '../common/index'; import { TinyXceptionParams } from './types'; export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap, numMainBlocks: number): {