added live webcam demo

pull/34/head
Vladimir Mandic 2021-01-10 10:35:51 -05:00
parent 952f145e98
commit 3ceec1bc5d
30 changed files with 1227 additions and 642 deletions

View File

@ -6,7 +6,7 @@ This is updated **face-api.js** with latest available TensorFlow/JS as the origi
Forked from [face-api.js](https://github.com/justadudewhohacks/face-api.js) version **0.22.2** released on March 22nd, 2020 Forked from [face-api.js](https://github.com/justadudewhohacks/face-api.js) version **0.22.2** released on March 22nd, 2020
Currently based on **`TensorFlow/JS` 2.8.2** Currently based on **`TensorFlow/JS` 2.8.3**
### Why? ### Why?
@ -35,6 +35,7 @@ Unfortunately, changes ended up being too large for a simple pull request on ori
- Updated TensorFlow/JS dependencies since backends were removed from `@tensorflow/tfjs-core` - Updated TensorFlow/JS dependencies since backends were removed from `@tensorflow/tfjs-core`
- Updated mobileNetv1 model due to `batchNorm()` dependency - Updated mobileNetv1 model due to `batchNorm()` dependency
- Added `version` class that returns JSON object with version of FaceAPI as well as linked TFJS - Added `version` class that returns JSON object with version of FaceAPI as well as linked TFJS
- Added test/dev built-in HTTP & HTTPS Web server
- Removed `mtcnn` and `tinyYolov2` models as they were non-functional in latest public version of `Face-API` - Removed `mtcnn` and `tinyYolov2` models as they were non-functional in latest public version of `Face-API`
*If there is a demand, I can re-implement them back.* *If there is a demand, I can re-implement them back.*
@ -50,8 +51,12 @@ Which means valid models are **tinyFaceDetector** and **mobileNetv1**
### Browser ### Browser
Browser example that uses both models as well as all of the extensions is included in `/example/index.html` Browser example that uses static images and showcases both models as well as all of the extensions is included in `/example/index.html`
Example can be accessed directly using Git pages using URL: <https://vladmandic.github.io/face-api/example/> Example can be accessed directly using Git pages using URL: <https://vladmandic.github.io/face-api/example/index.html>
Browser example that uses live webcam is included in `/example/webcam.html`
Example can be accessed directly using Git pages using URL: <https://vladmandic.github.io/face-api/example/webcam.html>
<br> <br>
@ -242,6 +247,37 @@ And then use with:
Pretrained models and their weights are includes in `./model`. Pretrained models and their weights are includes in `./model`.
<br>
<hr>
<br>
## Test & Dev Web Server
Built-in test&dev web server can be started using
```shell
npm run dev
```
By default it starts HTTP server on port 8000 and HTTPS server on port 8001 and can be accessed as:
- <https://localhost:8001/example/index.html>
- <https://localhost:8001/example/webcam.html>
```json
2021-01-10 08:39:00 INFO: @vladmandic/face-api version 0.10.2
2021-01-10 08:39:00 INFO: User: vlado Platform: linux Arch: x64 Node: v15.4.0
2021-01-10 08:39:00 INFO: Build: file startup all target: es2018
2021-01-10 08:39:00 STATE: HTTP server listening: 8000
2021-01-10 08:39:00 STATE: HTTP2 server listening: 8001
2021-01-10 08:39:00 STATE: Monitoring: [ 'package.json', 'config.js', 'example', 'src', [length]: 4 ]
2021-01-10 08:39:00 STATE: Monitoring: [ 'package.json', 'config.js', 'example', 'src', [length]: 4 ]
2021-01-10 08:39:01 STATE: Build for: browserBundle type: tfjs: { modules: 1253, moduleBytes: 3997175, imports: 7, importBytes: 276, outputBytes: 1565414, outputFiles: 'dist/tfjs.esm.js' }
2021-01-10 08:39:01 STATE: Build for: browserBundle type: iife: { imports: 160, importBytes: 1797487, outputBytes: 1699552, outputFiles: 'dist/face-api.js' }
2021-01-10 08:39:01 STATE: Build for: browserBundle type: esm: { imports: 160, importBytes: 1797487, outputBytes: 1697086, outputFiles: 'dist/face-api.esm.js' }
2021-01-10 08:39:01 INFO: Compile: [ 'src/index.ts', [length]: 1 ]
```
<br>
<hr>
<br> <br>
## Build ## Build
@ -272,19 +308,21 @@ npm run build
> @vladmandic/face-api@0.8.9 build /home/vlado/dev/face-api > @vladmandic/face-api@0.8.9 build /home/vlado/dev/face-api
> rimraf dist/* && node ./build.js > rimraf dist/* && node ./build.js
``` ```
```json ```json
2020-12-02 16:31:23 INFO: @vladmandic/face-api version 0.8.9 2021-01-10 08:42:01 INFO: @vladmandic/face-api version 0.10.2
2020-12-02 16:31:23 INFO: User: vlado Platform: linux Arch: x64 Node: v15.0.1 2021-01-10 08:42:01 INFO: User: vlado Platform: linux Arch: x64 Node: v15.4.0
2020-12-02 16:31:23 INFO: Build: file startup all target: es2018 2021-01-10 08:42:01 INFO: Build: file startup all target: es2018
2020-12-02 16:31:23 STATE: Build for: node type: tfjs: { imports: 1, importBytes: 39, outputBytes: 1042, outputFiles: 'dist/tfjs.esm.js' } 2021-01-10 08:42:01 STATE: Build for: node type: tfjs: { imports: 1, importBytes: 143, outputBytes: 1042, outputFiles: 'dist/tfjs.esm.js' }
2020-12-02 16:31:23 STATE: Build for: node type: node: { imports: 160, importBytes: 228038, outputBytes: 134190, outputFiles: 'dist/face-api.node.js' } 2021-01-10 08:42:01 STATE: Build for: node type: node: { imports: 160, importBytes: 233115, outputBytes: 132266, outputFiles: 'dist/face-api.node.js' }
2020-12-02 16:31:23 STATE: Build for: nodeGPU type: tfjs: { imports: 1, importBytes: 43, outputBytes: 1046, outputFiles: 'dist/tfjs.esm.js' } 2021-01-10 08:42:01 STATE: Build for: nodeGPU type: tfjs: { imports: 1, importBytes: 147, outputBytes: 1046, outputFiles: 'dist/tfjs.esm.js' }
2020-12-02 16:31:23 STATE: Build for: nodeGPU type: node: { imports: 160, importBytes: 228042, outputBytes: 134198, outputFiles: 'dist/face-api.node-gpu.js' } 2021-01-10 08:42:01 STATE: Build for: nodeGPU type: node: { imports: 160, importBytes: 233119, outputBytes: 132274, outputFiles: 'dist/face-api.node-gpu.js' }
2020-12-02 16:31:23 STATE: Build for: browserNoBundle type: tfjs: { imports: 1, importBytes: 1784, outputBytes: 244, outputFiles: 'dist/tfjs.esm.js' } 2021-01-10 08:42:01 STATE: Build for: browserNoBundle type: tfjs: { imports: 1, importBytes: 276, outputBytes: 244, outputFiles: 'dist/tfjs.esm.js' }
2020-12-02 16:31:23 STATE: Build for: browserNoBundle type: esm: { imports: 160, importBytes: 227240, outputBytes: 131024, outputFiles: 'dist/face-api.esm-nobundle.js' } 2021-01-10 08:42:01 STATE: Build for: browserNoBundle type: esm: { imports: 160, importBytes: 232317, outputBytes: 129069, outputFiles: 'dist/face-api.esm-nobundle.js' }
2020-12-02 16:31:24 STATE: Build for: browserBundle type: tfjs: { modules: 1045, moduleBytes: 3718721, imports: 7, importBytes: 1784, outputBytes: 1501677, outputFiles: 'dist/tfjs.esm.js' } 2021-01-10 08:42:01 STATE: Build for: browserBundle type: tfjs: { modules: 1253, moduleBytes: 3997175, imports: 7, importBytes: 276, outputBytes: 1565414, outputFiles: 'dist/tfjs.esm.js' }
2020-12-02 16:31:24 STATE: Build for: browserBundle type: iife: { imports: 162, importBytes: 1728673, modules: 576, moduleBytes: 1359851, outputBytes: 1903311, outputFiles: 'dist/face-api.js' } 2021-01-10 08:42:02 STATE: Build for: browserBundle type: iife: { imports: 160, importBytes: 1797487, outputBytes: 1699552, outputFiles: 'dist/face-api.js' }
2020-12-02 16:31:25 STATE: Build for: browserBundle type: esm: { imports: 162, importBytes: 1728673, modules: 576, moduleBytes: 1359851, outputBytes: 1900836, outputFiles: 'dist/face-api.esm.js' } 2021-01-10 08:42:02 STATE: Build for: browserBundle type: esm: { imports: 160, importBytes: 1797487, outputBytes: 1697086, outputFiles: 'dist/face-api.esm.js' }
2021-01-10 08:42:02 INFO: Compile: [ 'src/index.ts', [length]: 1 ]```
``` ```
<br> <br>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1077,7 +1077,7 @@
] ]
}, },
"package.json": { "package.json": {
"bytes": 1728, "bytes": 1807,
"imports": [] "imports": []
}, },
"src/xception/extractParams.ts": { "src/xception/extractParams.ts": {
@ -2136,7 +2136,7 @@
"dist/face-api.esm-nobundle.js.map": { "dist/face-api.esm-nobundle.js.map": {
"imports": [], "imports": [],
"inputs": {}, "inputs": {},
"bytes": 303708 "bytes": 311523
}, },
"dist/face-api.esm-nobundle.js": { "dist/face-api.esm-nobundle.js": {
"imports": [], "imports": [],
@ -2264,43 +2264,43 @@
], ],
"inputs": { "inputs": {
"dist/tfjs.esm.js": { "dist/tfjs.esm.js": {
"bytesInOutput": 246 "bytesInOutput": 247
}, },
"src/env/isNodejs.ts": { "src/env/isNodejs.ts": {
"bytesInOutput": 224 "bytesInOutput": 229
}, },
"src/index.ts": { "src/index.ts": {
"bytesInOutput": 201 "bytesInOutput": 206
}, },
"src/draw/index.ts": { "src/draw/index.ts": {
"bytesInOutput": 447 "bytesInOutput": 451
}, },
"src/draw/drawContour.ts": { "src/draw/drawContour.ts": {
"bytesInOutput": 313 "bytesInOutput": 313
}, },
"src/utils/index.ts": { "src/utils/index.ts": {
"bytesInOutput": 1561 "bytesInOutput": 1560
}, },
"src/classes/Dimensions.ts": { "src/classes/Dimensions.ts": {
"bytesInOutput": 394 "bytesInOutput": 398
}, },
"src/classes/Point.ts": { "src/classes/Point.ts": {
"bytesInOutput": 472 "bytesInOutput": 473
}, },
"src/classes/Box.ts": { "src/classes/Box.ts": {
"bytesInOutput": 3300 "bytesInOutput": 3305
}, },
"src/classes/BoundingBox.ts": { "src/classes/BoundingBox.ts": {
"bytesInOutput": 149 "bytesInOutput": 153
}, },
"src/classes/index.ts": { "src/classes/index.ts": {
"bytesInOutput": 0 "bytesInOutput": 0
}, },
"src/classes/ObjectDetection.ts": { "src/classes/ObjectDetection.ts": {
"bytesInOutput": 753 "bytesInOutput": 754
}, },
"src/classes/FaceDetection.ts": { "src/classes/FaceDetection.ts": {
"bytesInOutput": 268 "bytesInOutput": 272
}, },
"src/ops/iou.ts": { "src/ops/iou.ts": {
"bytesInOutput": 328 "bytesInOutput": 328
@ -2324,10 +2324,10 @@
"bytesInOutput": 188 "bytesInOutput": 188
}, },
"src/classes/Rect.ts": { "src/classes/Rect.ts": {
"bytesInOutput": 135 "bytesInOutput": 136
}, },
"src/classes/FaceLandmarks.ts": { "src/classes/FaceLandmarks.ts": {
"bytesInOutput": 1884 "bytesInOutput": 1888
}, },
"src/classes/FaceLandmarks5.ts": { "src/classes/FaceLandmarks5.ts": {
"bytesInOutput": 153 "bytesInOutput": 153
@ -2372,16 +2372,16 @@
"bytesInOutput": 446 "bytesInOutput": 446
}, },
"src/draw/DrawTextField.ts": { "src/draw/DrawTextField.ts": {
"bytesInOutput": 2254 "bytesInOutput": 2255
}, },
"src/draw/DrawBox.ts": { "src/draw/DrawBox.ts": {
"bytesInOutput": 821 "bytesInOutput": 825
}, },
"src/draw/drawDetections.ts": { "src/draw/drawDetections.ts": {
"bytesInOutput": 390 "bytesInOutput": 390
}, },
"src/faceExpressionNet/FaceExpressionNet.ts": { "src/faceExpressionNet/FaceExpressionNet.ts": {
"bytesInOutput": 874 "bytesInOutput": 878
}, },
"src/dom/isMediaLoaded.ts": { "src/dom/isMediaLoaded.ts": {
"bytesInOutput": 151 "bytesInOutput": 151
@ -2444,16 +2444,16 @@
"bytesInOutput": 201 "bytesInOutput": 201
}, },
"src/faceFeatureExtractor/FaceFeatureExtractor.ts": { "src/faceFeatureExtractor/FaceFeatureExtractor.ts": {
"bytesInOutput": 895 "bytesInOutput": 897
}, },
"src/NeuralNetwork.ts": { "src/NeuralNetwork.ts": {
"bytesInOutput": 3282 "bytesInOutput": 3292
}, },
"src/faceFeatureExtractor/denseBlock.ts": { "src/faceFeatureExtractor/denseBlock.ts": {
"bytesInOutput": 1171 "bytesInOutput": 1176
}, },
"src/common/depthwiseSeparableConv.ts": { "src/common/depthwiseSeparableConv.ts": {
"bytesInOutput": 240 "bytesInOutput": 244
}, },
"src/common/convLayer.ts": { "src/common/convLayer.ts": {
"bytesInOutput": 229 "bytesInOutput": 229
@ -2471,10 +2471,10 @@
"bytesInOutput": 428 "bytesInOutput": 428
}, },
"src/common/extractSeparableConvParamsFactory.ts": { "src/common/extractSeparableConvParamsFactory.ts": {
"bytesInOutput": 945 "bytesInOutput": 946
}, },
"src/common/types.ts": { "src/common/types.ts": {
"bytesInOutput": 173 "bytesInOutput": 177
}, },
"src/common/extractWeightEntryFactory.ts": { "src/common/extractWeightEntryFactory.ts": {
"bytesInOutput": 366 "bytesInOutput": 366
@ -2498,10 +2498,10 @@
"bytesInOutput": 400 "bytesInOutput": 400
}, },
"src/faceProcessor/FaceProcessor.ts": { "src/faceProcessor/FaceProcessor.ts": {
"bytesInOutput": 1579 "bytesInOutput": 1585
}, },
"src/common/fullyConnectedLayer.ts": { "src/common/fullyConnectedLayer.ts": {
"bytesInOutput": 149 "bytesInOutput": 153
}, },
"src/faceProcessor/extractParams.ts": { "src/faceProcessor/extractParams.ts": {
"bytesInOutput": 382 "bytesInOutput": 382
@ -2513,7 +2513,7 @@
"bytesInOutput": 252 "bytesInOutput": 252
}, },
"src/faceExpressionNet/FaceExpressions.ts": { "src/faceExpressionNet/FaceExpressions.ts": {
"bytesInOutput": 527 "bytesInOutput": 532
}, },
"src/faceExpressionNet/index.ts": { "src/faceExpressionNet/index.ts": {
"bytesInOutput": 0 "bytesInOutput": 0
@ -2531,13 +2531,13 @@
"bytesInOutput": 1723 "bytesInOutput": 1723
}, },
"package.json": { "package.json": {
"bytesInOutput": 20 "bytesInOutput": 21
}, },
"src/ageGenderNet/AgeGenderNet.ts": { "src/ageGenderNet/AgeGenderNet.ts": {
"bytesInOutput": 2554 "bytesInOutput": 2559
}, },
"src/xception/TinyXception.ts": { "src/xception/TinyXception.ts": {
"bytesInOutput": 1901 "bytesInOutput": 1905
}, },
"src/xception/extractParams.ts": { "src/xception/extractParams.ts": {
"bytesInOutput": 2443 "bytesInOutput": 2443
@ -2558,16 +2558,16 @@
"bytesInOutput": 0 "bytesInOutput": 0
}, },
"src/faceLandmarkNet/FaceLandmark68NetBase.ts": { "src/faceLandmarkNet/FaceLandmark68NetBase.ts": {
"bytesInOutput": 2029 "bytesInOutput": 2035
}, },
"src/faceLandmarkNet/FaceLandmark68Net.ts": { "src/faceLandmarkNet/FaceLandmark68Net.ts": {
"bytesInOutput": 253 "bytesInOutput": 257
}, },
"src/faceLandmarkNet/index.ts": { "src/faceLandmarkNet/index.ts": {
"bytesInOutput": 50 "bytesInOutput": 54
}, },
"src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts": { "src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts": {
"bytesInOutput": 888 "bytesInOutput": 889
}, },
"src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts": { "src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts": {
"bytesInOutput": 362 "bytesInOutput": 362
@ -2576,16 +2576,16 @@
"bytesInOutput": 517 "bytesInOutput": 517
}, },
"src/faceLandmarkNet/FaceLandmark68TinyNet.ts": { "src/faceLandmarkNet/FaceLandmark68TinyNet.ts": {
"bytesInOutput": 269 "bytesInOutput": 274
}, },
"src/faceRecognitionNet/FaceRecognitionNet.ts": { "src/faceRecognitionNet/FaceRecognitionNet.ts": {
"bytesInOutput": 1705 "bytesInOutput": 1706
}, },
"src/faceRecognitionNet/convLayer.ts": { "src/faceRecognitionNet/convLayer.ts": {
"bytesInOutput": 458 "bytesInOutput": 463
}, },
"src/faceRecognitionNet/scaleLayer.ts": { "src/faceRecognitionNet/scaleLayer.ts": {
"bytesInOutput": 119 "bytesInOutput": 123
}, },
"src/faceRecognitionNet/extractParams.ts": { "src/faceRecognitionNet/extractParams.ts": {
"bytesInOutput": 3405 "bytesInOutput": 3405
@ -2612,52 +2612,52 @@
"bytesInOutput": 244 "bytesInOutput": 244
}, },
"src/ssdMobilenetv1/SsdMobilenetv1.ts": { "src/ssdMobilenetv1/SsdMobilenetv1.ts": {
"bytesInOutput": 1900 "bytesInOutput": 1905
}, },
"src/ssdMobilenetv1/extractParams.ts": { "src/ssdMobilenetv1/extractParams.ts": {
"bytesInOutput": 5963 "bytesInOutput": 5967
}, },
"src/ssdMobilenetv1/extractParamsFromWeigthMap.ts": { "src/ssdMobilenetv1/extractParamsFromWeigthMap.ts": {
"bytesInOutput": 4319 "bytesInOutput": 4319
}, },
"src/ssdMobilenetv1/mobileNetV1.ts": { "src/ssdMobilenetv1/mobileNetV1.ts": {
"bytesInOutput": 1110 "bytesInOutput": 1111
}, },
"src/ssdMobilenetv1/pointwiseConvLayer.ts": { "src/ssdMobilenetv1/pointwiseConvLayer.ts": {
"bytesInOutput": 235 "bytesInOutput": 239
}, },
"src/ssdMobilenetv1/nonMaxSuppression.ts": { "src/ssdMobilenetv1/nonMaxSuppression.ts": {
"bytesInOutput": 1502 "bytesInOutput": 1504
}, },
"src/ssdMobilenetv1/outputLayer.ts": { "src/ssdMobilenetv1/outputLayer.ts": {
"bytesInOutput": 1590 "bytesInOutput": 1590
}, },
"src/ssdMobilenetv1/predictionLayer.ts": { "src/ssdMobilenetv1/predictionLayer.ts": {
"bytesInOutput": 1418 "bytesInOutput": 1419
}, },
"src/ssdMobilenetv1/boxPredictionLayer.ts": { "src/ssdMobilenetv1/boxPredictionLayer.ts": {
"bytesInOutput": 350 "bytesInOutput": 354
}, },
"src/ssdMobilenetv1/SsdMobilenetv1Options.ts": { "src/ssdMobilenetv1/SsdMobilenetv1Options.ts": {
"bytesInOutput": 554 "bytesInOutput": 555
}, },
"src/ssdMobilenetv1/index.ts": { "src/ssdMobilenetv1/index.ts": {
"bytesInOutput": 234 "bytesInOutput": 235
}, },
"src/tinyYolov2/const.ts": { "src/tinyYolov2/const.ts": {
"bytesInOutput": 485 "bytesInOutput": 490
}, },
"src/tinyYolov2/TinyYolov2Base.ts": { "src/tinyYolov2/TinyYolov2Base.ts": {
"bytesInOutput": 5885 "bytesInOutput": 5894
}, },
"src/tinyYolov2/config.ts": { "src/tinyYolov2/config.ts": {
"bytesInOutput": 1164 "bytesInOutput": 1168
}, },
"src/tinyYolov2/convWithBatchNorm.ts": { "src/tinyYolov2/convWithBatchNorm.ts": {
"bytesInOutput": 322 "bytesInOutput": 323
}, },
"src/tinyYolov2/leaky.ts": { "src/tinyYolov2/leaky.ts": {
"bytesInOutput": 178 "bytesInOutput": 182
}, },
"src/tinyYolov2/depthwiseSeparableConv.ts": { "src/tinyYolov2/depthwiseSeparableConv.ts": {
"bytesInOutput": 293 "bytesInOutput": 293
@ -2678,37 +2678,37 @@
"bytesInOutput": 139 "bytesInOutput": 139
}, },
"src/tinyFaceDetector/TinyFaceDetectorOptions.ts": { "src/tinyFaceDetector/TinyFaceDetectorOptions.ts": {
"bytesInOutput": 132 "bytesInOutput": 133
}, },
"src/globalApi/ComposableTask.ts": { "src/globalApi/ComposableTask.ts": {
"bytesInOutput": 154 "bytesInOutput": 159
}, },
"src/globalApi/DetectFaceLandmarksTasks.ts": { "src/globalApi/DetectFaceLandmarksTasks.ts": {
"bytesInOutput": 1912 "bytesInOutput": 1926
}, },
"src/globalApi/extractFacesAndComputeResults.ts": { "src/globalApi/extractFacesAndComputeResults.ts": {
"bytesInOutput": 812 "bytesInOutput": 816
}, },
"src/tinyFaceDetector/const.ts": { "src/tinyFaceDetector/const.ts": {
"bytesInOutput": 215 "bytesInOutput": 216
}, },
"src/tinyFaceDetector/TinyFaceDetector.ts": { "src/tinyFaceDetector/TinyFaceDetector.ts": {
"bytesInOutput": 624 "bytesInOutput": 629
}, },
"src/globalApi/nets.ts": { "src/globalApi/nets.ts": {
"bytesInOutput": 1515 "bytesInOutput": 1520
}, },
"src/globalApi/PredictFaceExpressionsTask.ts": { "src/globalApi/PredictFaceExpressionsTask.ts": {
"bytesInOutput": 1691 "bytesInOutput": 1700
}, },
"src/globalApi/PredictAgeAndGenderTask.ts": { "src/globalApi/PredictAgeAndGenderTask.ts": {
"bytesInOutput": 1785 "bytesInOutput": 1794
}, },
"src/globalApi/ComputeFaceDescriptorsTasks.ts": { "src/globalApi/ComputeFaceDescriptorsTasks.ts": {
"bytesInOutput": 1390 "bytesInOutput": 1399
}, },
"src/globalApi/DetectFacesTasks.ts": { "src/globalApi/DetectFacesTasks.ts": {
"bytesInOutput": 2221 "bytesInOutput": 2225
}, },
"src/globalApi/detectFaces.ts": { "src/globalApi/detectFaces.ts": {
"bytesInOutput": 224 "bytesInOutput": 224
@ -2732,7 +2732,7 @@
"bytesInOutput": 824 "bytesInOutput": 824
} }
}, },
"bytes": 129069 "bytes": 129272
} }
} }
} }

74
dist/face-api.esm.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
{ {
"inputs": { "inputs": {
"dist/tfjs.esm.js": { "dist/tfjs.esm.js": {
"bytes": 1565414, "bytes": 1566890,
"imports": [] "imports": []
}, },
"src/draw/drawContour.ts": { "src/draw/drawContour.ts": {
@ -1077,7 +1077,7 @@
] ]
}, },
"package.json": { "package.json": {
"bytes": 1728, "bytes": 1807,
"imports": [] "imports": []
}, },
"src/xception/extractParams.ts": { "src/xception/extractParams.ts": {
@ -2136,7 +2136,7 @@
"dist/face-api.esm.js.map": { "dist/face-api.esm.js.map": {
"imports": [], "imports": [],
"inputs": {}, "inputs": {},
"bytes": 1348028 "bytes": 1452595
}, },
"dist/face-api.esm.js": { "dist/face-api.esm.js": {
"imports": [], "imports": [],
@ -2264,10 +2264,10 @@
], ],
"inputs": { "inputs": {
"src/env/isNodejs.ts": { "src/env/isNodejs.ts": {
"bytesInOutput": 224 "bytesInOutput": 229
}, },
"dist/tfjs.esm.js": { "dist/tfjs.esm.js": {
"bytesInOutput": 1564181 "bytesInOutput": 1564739
}, },
"src/draw/index.ts": { "src/draw/index.ts": {
"bytesInOutput": 451 "bytesInOutput": 451
@ -2276,28 +2276,28 @@
"bytesInOutput": 313 "bytesInOutput": 313
}, },
"src/utils/index.ts": { "src/utils/index.ts": {
"bytesInOutput": 1531 "bytesInOutput": 1529
}, },
"src/classes/Dimensions.ts": { "src/classes/Dimensions.ts": {
"bytesInOutput": 398 "bytesInOutput": 398
}, },
"src/classes/Point.ts": { "src/classes/Point.ts": {
"bytesInOutput": 472 "bytesInOutput": 473
}, },
"src/classes/Box.ts": { "src/classes/Box.ts": {
"bytesInOutput": 3300 "bytesInOutput": 3305
}, },
"src/classes/BoundingBox.ts": { "src/classes/BoundingBox.ts": {
"bytesInOutput": 149 "bytesInOutput": 153
}, },
"src/classes/index.ts": { "src/classes/index.ts": {
"bytesInOutput": 0 "bytesInOutput": 0
}, },
"src/classes/ObjectDetection.ts": { "src/classes/ObjectDetection.ts": {
"bytesInOutput": 753 "bytesInOutput": 754
}, },
"src/classes/FaceDetection.ts": { "src/classes/FaceDetection.ts": {
"bytesInOutput": 268 "bytesInOutput": 272
}, },
"src/ops/iou.ts": { "src/ops/iou.ts": {
"bytesInOutput": 328 "bytesInOutput": 328
@ -2321,10 +2321,10 @@
"bytesInOutput": 195 "bytesInOutput": 195
}, },
"src/classes/Rect.ts": { "src/classes/Rect.ts": {
"bytesInOutput": 135 "bytesInOutput": 136
}, },
"src/classes/FaceLandmarks.ts": { "src/classes/FaceLandmarks.ts": {
"bytesInOutput": 1884 "bytesInOutput": 1888
}, },
"src/classes/FaceLandmarks5.ts": { "src/classes/FaceLandmarks5.ts": {
"bytesInOutput": 153 "bytesInOutput": 153
@ -2369,10 +2369,10 @@
"bytesInOutput": 447 "bytesInOutput": 447
}, },
"src/draw/DrawTextField.ts": { "src/draw/DrawTextField.ts": {
"bytesInOutput": 2254 "bytesInOutput": 2255
}, },
"src/draw/DrawBox.ts": { "src/draw/DrawBox.ts": {
"bytesInOutput": 821 "bytesInOutput": 825
}, },
"src/draw/drawDetections.ts": { "src/draw/drawDetections.ts": {
"bytesInOutput": 391 "bytesInOutput": 391
@ -2504,13 +2504,13 @@
"bytesInOutput": 252 "bytesInOutput": 252
}, },
"src/faceProcessor/FaceProcessor.ts": { "src/faceProcessor/FaceProcessor.ts": {
"bytesInOutput": 1543 "bytesInOutput": 1544
}, },
"src/faceExpressionNet/FaceExpressions.ts": { "src/faceExpressionNet/FaceExpressions.ts": {
"bytesInOutput": 527 "bytesInOutput": 532
}, },
"src/faceExpressionNet/FaceExpressionNet.ts": { "src/faceExpressionNet/FaceExpressionNet.ts": {
"bytesInOutput": 825 "bytesInOutput": 829
}, },
"src/faceExpressionNet/index.ts": { "src/faceExpressionNet/index.ts": {
"bytesInOutput": 0 "bytesInOutput": 0
@ -2558,13 +2558,13 @@
"bytesInOutput": 159 "bytesInOutput": 159
}, },
"src/faceLandmarkNet/FaceLandmark68NetBase.ts": { "src/faceLandmarkNet/FaceLandmark68NetBase.ts": {
"bytesInOutput": 1957 "bytesInOutput": 1958
}, },
"src/faceLandmarkNet/FaceLandmark68Net.ts": { "src/faceLandmarkNet/FaceLandmark68Net.ts": {
"bytesInOutput": 253 "bytesInOutput": 257
}, },
"src/faceLandmarkNet/index.ts": { "src/faceLandmarkNet/index.ts": {
"bytesInOutput": 50 "bytesInOutput": 54
}, },
"src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts": { "src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts": {
"bytesInOutput": 362 "bytesInOutput": 362
@ -2573,10 +2573,10 @@
"bytesInOutput": 517 "bytesInOutput": 517
}, },
"src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts": { "src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts": {
"bytesInOutput": 832 "bytesInOutput": 833
}, },
"src/faceLandmarkNet/FaceLandmark68TinyNet.ts": { "src/faceLandmarkNet/FaceLandmark68TinyNet.ts": {
"bytesInOutput": 269 "bytesInOutput": 274
}, },
"src/faceRecognitionNet/scaleLayer.ts": { "src/faceRecognitionNet/scaleLayer.ts": {
"bytesInOutput": 75 "bytesInOutput": 75
@ -2624,7 +2624,7 @@
"bytesInOutput": 1048 "bytesInOutput": 1048
}, },
"src/ssdMobilenetv1/nonMaxSuppression.ts": { "src/ssdMobilenetv1/nonMaxSuppression.ts": {
"bytesInOutput": 1502 "bytesInOutput": 1504
}, },
"src/ssdMobilenetv1/outputLayer.ts": { "src/ssdMobilenetv1/outputLayer.ts": {
"bytesInOutput": 1311 "bytesInOutput": 1311
@ -2636,19 +2636,19 @@
"bytesInOutput": 1364 "bytesInOutput": 1364
}, },
"src/ssdMobilenetv1/SsdMobilenetv1Options.ts": { "src/ssdMobilenetv1/SsdMobilenetv1Options.ts": {
"bytesInOutput": 554 "bytesInOutput": 555
}, },
"src/ssdMobilenetv1/SsdMobilenetv1.ts": { "src/ssdMobilenetv1/SsdMobilenetv1.ts": {
"bytesInOutput": 1837 "bytesInOutput": 1841
}, },
"src/ssdMobilenetv1/index.ts": { "src/ssdMobilenetv1/index.ts": {
"bytesInOutput": 234 "bytesInOutput": 235
}, },
"src/tinyYolov2/const.ts": { "src/tinyYolov2/const.ts": {
"bytesInOutput": 486 "bytesInOutput": 491
}, },
"src/tinyYolov2/config.ts": { "src/tinyYolov2/config.ts": {
"bytesInOutput": 1169 "bytesInOutput": 1173
}, },
"src/tinyYolov2/leaky.ts": { "src/tinyYolov2/leaky.ts": {
"bytesInOutput": 116 "bytesInOutput": 116
@ -2669,7 +2669,7 @@
"bytesInOutput": 588 "bytesInOutput": 588
}, },
"src/tinyYolov2/TinyYolov2Base.ts": { "src/tinyYolov2/TinyYolov2Base.ts": {
"bytesInOutput": 5763 "bytesInOutput": 5767
}, },
"src/tinyYolov2/TinyYolov2.ts": { "src/tinyYolov2/TinyYolov2.ts": {
"bytesInOutput": 782 "bytesInOutput": 782
@ -2678,37 +2678,37 @@
"bytesInOutput": 139 "bytesInOutput": 139
}, },
"src/tinyFaceDetector/TinyFaceDetectorOptions.ts": { "src/tinyFaceDetector/TinyFaceDetectorOptions.ts": {
"bytesInOutput": 132 "bytesInOutput": 133
}, },
"src/globalApi/ComposableTask.ts": { "src/globalApi/ComposableTask.ts": {
"bytesInOutput": 155 "bytesInOutput": 159
}, },
"src/globalApi/extractFacesAndComputeResults.ts": { "src/globalApi/extractFacesAndComputeResults.ts": {
"bytesInOutput": 772 "bytesInOutput": 772
}, },
"src/tinyFaceDetector/const.ts": { "src/tinyFaceDetector/const.ts": {
"bytesInOutput": 215 "bytesInOutput": 216
}, },
"src/tinyFaceDetector/TinyFaceDetector.ts": { "src/tinyFaceDetector/TinyFaceDetector.ts": {
"bytesInOutput": 626 "bytesInOutput": 631
}, },
"src/globalApi/nets.ts": { "src/globalApi/nets.ts": {
"bytesInOutput": 1531 "bytesInOutput": 1536
}, },
"src/globalApi/PredictFaceExpressionsTask.ts": { "src/globalApi/PredictFaceExpressionsTask.ts": {
"bytesInOutput": 1693 "bytesInOutput": 1702
}, },
"src/globalApi/PredictAgeAndGenderTask.ts": { "src/globalApi/PredictAgeAndGenderTask.ts": {
"bytesInOutput": 1787 "bytesInOutput": 1796
}, },
"src/globalApi/ComputeFaceDescriptorsTasks.ts": { "src/globalApi/ComputeFaceDescriptorsTasks.ts": {
"bytesInOutput": 1392 "bytesInOutput": 1401
}, },
"src/globalApi/DetectFaceLandmarksTasks.ts": { "src/globalApi/DetectFaceLandmarksTasks.ts": {
"bytesInOutput": 1859 "bytesInOutput": 1868
}, },
"src/globalApi/DetectFacesTasks.ts": { "src/globalApi/DetectFacesTasks.ts": {
"bytesInOutput": 2231 "bytesInOutput": 2235
}, },
"src/globalApi/detectFaces.ts": { "src/globalApi/detectFaces.ts": {
"bytesInOutput": 228 "bytesInOutput": 228
@ -2732,7 +2732,7 @@
"bytesInOutput": 824 "bytesInOutput": 824
} }
}, },
"bytes": 1697086 "bytes": 1698462
} }
} }
} }

74
dist/face-api.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

84
dist/face-api.json vendored
View File

@ -1,7 +1,7 @@
{ {
"inputs": { "inputs": {
"dist/tfjs.esm.js": { "dist/tfjs.esm.js": {
"bytes": 1565414, "bytes": 1566890,
"imports": [] "imports": []
}, },
"src/draw/drawContour.ts": { "src/draw/drawContour.ts": {
@ -1077,7 +1077,7 @@
] ]
}, },
"package.json": { "package.json": {
"bytes": 1728, "bytes": 1807,
"imports": [] "imports": []
}, },
"src/xception/extractParams.ts": { "src/xception/extractParams.ts": {
@ -2136,20 +2136,20 @@
"dist/face-api.js.map": { "dist/face-api.js.map": {
"imports": [], "imports": [],
"inputs": {}, "inputs": {},
"bytes": 1348035 "bytes": 1452603
}, },
"dist/face-api.js": { "dist/face-api.js": {
"imports": [], "imports": [],
"exports": [], "exports": [],
"inputs": { "inputs": {
"src/env/isNodejs.ts": { "src/env/isNodejs.ts": {
"bytesInOutput": 224 "bytesInOutput": 229
}, },
"src/index.ts": { "src/index.ts": {
"bytesInOutput": 4718 "bytesInOutput": 4722
}, },
"dist/tfjs.esm.js": { "dist/tfjs.esm.js": {
"bytesInOutput": 1564185 "bytesInOutput": 1564739
}, },
"src/draw/index.ts": { "src/draw/index.ts": {
"bytesInOutput": 451 "bytesInOutput": 451
@ -2158,28 +2158,28 @@
"bytesInOutput": 313 "bytesInOutput": 313
}, },
"src/utils/index.ts": { "src/utils/index.ts": {
"bytesInOutput": 1531 "bytesInOutput": 1529
}, },
"src/classes/Dimensions.ts": { "src/classes/Dimensions.ts": {
"bytesInOutput": 398 "bytesInOutput": 398
}, },
"src/classes/Point.ts": { "src/classes/Point.ts": {
"bytesInOutput": 472 "bytesInOutput": 473
}, },
"src/classes/Box.ts": { "src/classes/Box.ts": {
"bytesInOutput": 3300 "bytesInOutput": 3305
}, },
"src/classes/BoundingBox.ts": { "src/classes/BoundingBox.ts": {
"bytesInOutput": 149 "bytesInOutput": 153
}, },
"src/classes/index.ts": { "src/classes/index.ts": {
"bytesInOutput": 0 "bytesInOutput": 0
}, },
"src/classes/ObjectDetection.ts": { "src/classes/ObjectDetection.ts": {
"bytesInOutput": 753 "bytesInOutput": 754
}, },
"src/classes/FaceDetection.ts": { "src/classes/FaceDetection.ts": {
"bytesInOutput": 268 "bytesInOutput": 272
}, },
"src/ops/iou.ts": { "src/ops/iou.ts": {
"bytesInOutput": 328 "bytesInOutput": 328
@ -2203,10 +2203,10 @@
"bytesInOutput": 195 "bytesInOutput": 195
}, },
"src/classes/Rect.ts": { "src/classes/Rect.ts": {
"bytesInOutput": 135 "bytesInOutput": 136
}, },
"src/classes/FaceLandmarks.ts": { "src/classes/FaceLandmarks.ts": {
"bytesInOutput": 1884 "bytesInOutput": 1888
}, },
"src/classes/FaceLandmarks5.ts": { "src/classes/FaceLandmarks5.ts": {
"bytesInOutput": 153 "bytesInOutput": 153
@ -2251,10 +2251,10 @@
"bytesInOutput": 447 "bytesInOutput": 447
}, },
"src/draw/DrawTextField.ts": { "src/draw/DrawTextField.ts": {
"bytesInOutput": 2254 "bytesInOutput": 2255
}, },
"src/draw/DrawBox.ts": { "src/draw/DrawBox.ts": {
"bytesInOutput": 821 "bytesInOutput": 825
}, },
"src/draw/drawDetections.ts": { "src/draw/drawDetections.ts": {
"bytesInOutput": 391 "bytesInOutput": 391
@ -2386,13 +2386,13 @@
"bytesInOutput": 252 "bytesInOutput": 252
}, },
"src/faceProcessor/FaceProcessor.ts": { "src/faceProcessor/FaceProcessor.ts": {
"bytesInOutput": 1543 "bytesInOutput": 1544
}, },
"src/faceExpressionNet/FaceExpressions.ts": { "src/faceExpressionNet/FaceExpressions.ts": {
"bytesInOutput": 527 "bytesInOutput": 532
}, },
"src/faceExpressionNet/FaceExpressionNet.ts": { "src/faceExpressionNet/FaceExpressionNet.ts": {
"bytesInOutput": 825 "bytesInOutput": 829
}, },
"src/faceExpressionNet/index.ts": { "src/faceExpressionNet/index.ts": {
"bytesInOutput": 0 "bytesInOutput": 0
@ -2437,13 +2437,13 @@
"bytesInOutput": 0 "bytesInOutput": 0
}, },
"src/faceLandmarkNet/FaceLandmark68NetBase.ts": { "src/faceLandmarkNet/FaceLandmark68NetBase.ts": {
"bytesInOutput": 1957 "bytesInOutput": 1958
}, },
"src/faceLandmarkNet/FaceLandmark68Net.ts": { "src/faceLandmarkNet/FaceLandmark68Net.ts": {
"bytesInOutput": 253 "bytesInOutput": 257
}, },
"src/faceLandmarkNet/index.ts": { "src/faceLandmarkNet/index.ts": {
"bytesInOutput": 50 "bytesInOutput": 54
}, },
"src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts": { "src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts": {
"bytesInOutput": 362 "bytesInOutput": 362
@ -2452,10 +2452,10 @@
"bytesInOutput": 517 "bytesInOutput": 517
}, },
"src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts": { "src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts": {
"bytesInOutput": 832 "bytesInOutput": 833
}, },
"src/faceLandmarkNet/FaceLandmark68TinyNet.ts": { "src/faceLandmarkNet/FaceLandmark68TinyNet.ts": {
"bytesInOutput": 269 "bytesInOutput": 274
}, },
"src/faceRecognitionNet/scaleLayer.ts": { "src/faceRecognitionNet/scaleLayer.ts": {
"bytesInOutput": 75 "bytesInOutput": 75
@ -2503,7 +2503,7 @@
"bytesInOutput": 1048 "bytesInOutput": 1048
}, },
"src/ssdMobilenetv1/nonMaxSuppression.ts": { "src/ssdMobilenetv1/nonMaxSuppression.ts": {
"bytesInOutput": 1502 "bytesInOutput": 1504
}, },
"src/ssdMobilenetv1/outputLayer.ts": { "src/ssdMobilenetv1/outputLayer.ts": {
"bytesInOutput": 1311 "bytesInOutput": 1311
@ -2515,19 +2515,19 @@
"bytesInOutput": 1364 "bytesInOutput": 1364
}, },
"src/ssdMobilenetv1/SsdMobilenetv1Options.ts": { "src/ssdMobilenetv1/SsdMobilenetv1Options.ts": {
"bytesInOutput": 554 "bytesInOutput": 555
}, },
"src/ssdMobilenetv1/SsdMobilenetv1.ts": { "src/ssdMobilenetv1/SsdMobilenetv1.ts": {
"bytesInOutput": 1837 "bytesInOutput": 1841
}, },
"src/ssdMobilenetv1/index.ts": { "src/ssdMobilenetv1/index.ts": {
"bytesInOutput": 234 "bytesInOutput": 235
}, },
"src/tinyYolov2/const.ts": { "src/tinyYolov2/const.ts": {
"bytesInOutput": 486 "bytesInOutput": 491
}, },
"src/tinyYolov2/config.ts": { "src/tinyYolov2/config.ts": {
"bytesInOutput": 1169 "bytesInOutput": 1173
}, },
"src/tinyYolov2/leaky.ts": { "src/tinyYolov2/leaky.ts": {
"bytesInOutput": 116 "bytesInOutput": 116
@ -2548,7 +2548,7 @@
"bytesInOutput": 588 "bytesInOutput": 588
}, },
"src/tinyYolov2/TinyYolov2Base.ts": { "src/tinyYolov2/TinyYolov2Base.ts": {
"bytesInOutput": 5763 "bytesInOutput": 5767
}, },
"src/tinyYolov2/TinyYolov2.ts": { "src/tinyYolov2/TinyYolov2.ts": {
"bytesInOutput": 782 "bytesInOutput": 782
@ -2557,37 +2557,37 @@
"bytesInOutput": 139 "bytesInOutput": 139
}, },
"src/tinyFaceDetector/TinyFaceDetectorOptions.ts": { "src/tinyFaceDetector/TinyFaceDetectorOptions.ts": {
"bytesInOutput": 132 "bytesInOutput": 133
}, },
"src/globalApi/ComposableTask.ts": { "src/globalApi/ComposableTask.ts": {
"bytesInOutput": 155 "bytesInOutput": 159
}, },
"src/globalApi/extractFacesAndComputeResults.ts": { "src/globalApi/extractFacesAndComputeResults.ts": {
"bytesInOutput": 772 "bytesInOutput": 772
}, },
"src/tinyFaceDetector/const.ts": { "src/tinyFaceDetector/const.ts": {
"bytesInOutput": 215 "bytesInOutput": 216
}, },
"src/tinyFaceDetector/TinyFaceDetector.ts": { "src/tinyFaceDetector/TinyFaceDetector.ts": {
"bytesInOutput": 626 "bytesInOutput": 631
}, },
"src/globalApi/nets.ts": { "src/globalApi/nets.ts": {
"bytesInOutput": 1531 "bytesInOutput": 1536
}, },
"src/globalApi/PredictFaceExpressionsTask.ts": { "src/globalApi/PredictFaceExpressionsTask.ts": {
"bytesInOutput": 1693 "bytesInOutput": 1702
}, },
"src/globalApi/PredictAgeAndGenderTask.ts": { "src/globalApi/PredictAgeAndGenderTask.ts": {
"bytesInOutput": 1787 "bytesInOutput": 1796
}, },
"src/globalApi/ComputeFaceDescriptorsTasks.ts": { "src/globalApi/ComputeFaceDescriptorsTasks.ts": {
"bytesInOutput": 1392 "bytesInOutput": 1401
}, },
"src/globalApi/DetectFaceLandmarksTasks.ts": { "src/globalApi/DetectFaceLandmarksTasks.ts": {
"bytesInOutput": 1859 "bytesInOutput": 1868
}, },
"src/globalApi/DetectFacesTasks.ts": { "src/globalApi/DetectFacesTasks.ts": {
"bytesInOutput": 2231 "bytesInOutput": 2235
}, },
"src/globalApi/detectFaces.ts": { "src/globalApi/detectFaces.ts": {
"bytesInOutput": 228 "bytesInOutput": 228
@ -2611,7 +2611,7 @@
"bytesInOutput": 824 "bytesInOutput": 824
} }
}, },
"bytes": 1699552 "bytes": 1700928
} }
} }
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
{ {
"inputs": { "inputs": {
"dist/tfjs.esm.js": { "dist/tfjs.esm.js": {
"bytes": 1046, "bytes": 1054,
"imports": [] "imports": []
}, },
"src/draw/drawContour.ts": { "src/draw/drawContour.ts": {
@ -1077,7 +1077,7 @@
] ]
}, },
"package.json": { "package.json": {
"bytes": 1728, "bytes": 1807,
"imports": [] "imports": []
}, },
"src/xception/extractParams.ts": { "src/xception/extractParams.ts": {
@ -2136,50 +2136,50 @@
"dist/face-api.node-gpu.js.map": { "dist/face-api.node-gpu.js.map": {
"imports": [], "imports": [],
"inputs": {}, "inputs": {},
"bytes": 303586 "bytes": 311396
}, },
"dist/face-api.node-gpu.js": { "dist/face-api.node-gpu.js": {
"imports": [], "imports": [],
"exports": [], "exports": [],
"inputs": { "inputs": {
"dist/tfjs.esm.js": { "dist/tfjs.esm.js": {
"bytesInOutput": 966 "bytesInOutput": 971
}, },
"src/env/isNodejs.ts": { "src/env/isNodejs.ts": {
"bytesInOutput": 229 "bytesInOutput": 233
}, },
"src/index.ts": { "src/index.ts": {
"bytesInOutput": 4728 "bytesInOutput": 4729
}, },
"src/draw/index.ts": { "src/draw/index.ts": {
"bytesInOutput": 447 "bytesInOutput": 451
}, },
"src/draw/drawContour.ts": { "src/draw/drawContour.ts": {
"bytesInOutput": 313 "bytesInOutput": 313
}, },
"src/utils/index.ts": { "src/utils/index.ts": {
"bytesInOutput": 1561 "bytesInOutput": 1560
}, },
"src/classes/Dimensions.ts": { "src/classes/Dimensions.ts": {
"bytesInOutput": 394 "bytesInOutput": 398
}, },
"src/classes/Point.ts": { "src/classes/Point.ts": {
"bytesInOutput": 472 "bytesInOutput": 473
}, },
"src/classes/Box.ts": { "src/classes/Box.ts": {
"bytesInOutput": 3300 "bytesInOutput": 3305
}, },
"src/classes/BoundingBox.ts": { "src/classes/BoundingBox.ts": {
"bytesInOutput": 149 "bytesInOutput": 153
}, },
"src/classes/index.ts": { "src/classes/index.ts": {
"bytesInOutput": 0 "bytesInOutput": 0
}, },
"src/classes/ObjectDetection.ts": { "src/classes/ObjectDetection.ts": {
"bytesInOutput": 753 "bytesInOutput": 754
}, },
"src/classes/FaceDetection.ts": { "src/classes/FaceDetection.ts": {
"bytesInOutput": 268 "bytesInOutput": 272
}, },
"src/ops/iou.ts": { "src/ops/iou.ts": {
"bytesInOutput": 328 "bytesInOutput": 328
@ -2203,10 +2203,10 @@
"bytesInOutput": 188 "bytesInOutput": 188
}, },
"src/classes/Rect.ts": { "src/classes/Rect.ts": {
"bytesInOutput": 135 "bytesInOutput": 136
}, },
"src/classes/FaceLandmarks.ts": { "src/classes/FaceLandmarks.ts": {
"bytesInOutput": 1884 "bytesInOutput": 1888
}, },
"src/classes/FaceLandmarks5.ts": { "src/classes/FaceLandmarks5.ts": {
"bytesInOutput": 153 "bytesInOutput": 153
@ -2251,16 +2251,16 @@
"bytesInOutput": 446 "bytesInOutput": 446
}, },
"src/draw/DrawTextField.ts": { "src/draw/DrawTextField.ts": {
"bytesInOutput": 2254 "bytesInOutput": 2255
}, },
"src/draw/DrawBox.ts": { "src/draw/DrawBox.ts": {
"bytesInOutput": 821 "bytesInOutput": 825
}, },
"src/draw/drawDetections.ts": { "src/draw/drawDetections.ts": {
"bytesInOutput": 390 "bytesInOutput": 390
}, },
"src/faceExpressionNet/FaceExpressionNet.ts": { "src/faceExpressionNet/FaceExpressionNet.ts": {
"bytesInOutput": 874 "bytesInOutput": 878
}, },
"src/dom/isMediaLoaded.ts": { "src/dom/isMediaLoaded.ts": {
"bytesInOutput": 151 "bytesInOutput": 151
@ -2323,16 +2323,16 @@
"bytesInOutput": 201 "bytesInOutput": 201
}, },
"src/faceFeatureExtractor/FaceFeatureExtractor.ts": { "src/faceFeatureExtractor/FaceFeatureExtractor.ts": {
"bytesInOutput": 895 "bytesInOutput": 897
}, },
"src/NeuralNetwork.ts": { "src/NeuralNetwork.ts": {
"bytesInOutput": 3282 "bytesInOutput": 3292
}, },
"src/faceFeatureExtractor/denseBlock.ts": { "src/faceFeatureExtractor/denseBlock.ts": {
"bytesInOutput": 1171 "bytesInOutput": 1176
}, },
"src/common/depthwiseSeparableConv.ts": { "src/common/depthwiseSeparableConv.ts": {
"bytesInOutput": 240 "bytesInOutput": 244
}, },
"src/common/convLayer.ts": { "src/common/convLayer.ts": {
"bytesInOutput": 229 "bytesInOutput": 229
@ -2350,10 +2350,10 @@
"bytesInOutput": 428 "bytesInOutput": 428
}, },
"src/common/extractSeparableConvParamsFactory.ts": { "src/common/extractSeparableConvParamsFactory.ts": {
"bytesInOutput": 945 "bytesInOutput": 946
}, },
"src/common/types.ts": { "src/common/types.ts": {
"bytesInOutput": 173 "bytesInOutput": 177
}, },
"src/common/extractWeightEntryFactory.ts": { "src/common/extractWeightEntryFactory.ts": {
"bytesInOutput": 366 "bytesInOutput": 366
@ -2377,10 +2377,10 @@
"bytesInOutput": 400 "bytesInOutput": 400
}, },
"src/faceProcessor/FaceProcessor.ts": { "src/faceProcessor/FaceProcessor.ts": {
"bytesInOutput": 1579 "bytesInOutput": 1585
}, },
"src/common/fullyConnectedLayer.ts": { "src/common/fullyConnectedLayer.ts": {
"bytesInOutput": 149 "bytesInOutput": 153
}, },
"src/faceProcessor/extractParams.ts": { "src/faceProcessor/extractParams.ts": {
"bytesInOutput": 382 "bytesInOutput": 382
@ -2392,7 +2392,7 @@
"bytesInOutput": 252 "bytesInOutput": 252
}, },
"src/faceExpressionNet/FaceExpressions.ts": { "src/faceExpressionNet/FaceExpressions.ts": {
"bytesInOutput": 527 "bytesInOutput": 532
}, },
"src/faceExpressionNet/index.ts": { "src/faceExpressionNet/index.ts": {
"bytesInOutput": 0 "bytesInOutput": 0
@ -2410,13 +2410,13 @@
"bytesInOutput": 1723 "bytesInOutput": 1723
}, },
"package.json": { "package.json": {
"bytesInOutput": 20 "bytesInOutput": 21
}, },
"src/ageGenderNet/AgeGenderNet.ts": { "src/ageGenderNet/AgeGenderNet.ts": {
"bytesInOutput": 2554 "bytesInOutput": 2559
}, },
"src/xception/TinyXception.ts": { "src/xception/TinyXception.ts": {
"bytesInOutput": 1901 "bytesInOutput": 1905
}, },
"src/xception/extractParams.ts": { "src/xception/extractParams.ts": {
"bytesInOutput": 2443 "bytesInOutput": 2443
@ -2437,16 +2437,16 @@
"bytesInOutput": 0 "bytesInOutput": 0
}, },
"src/faceLandmarkNet/FaceLandmark68NetBase.ts": { "src/faceLandmarkNet/FaceLandmark68NetBase.ts": {
"bytesInOutput": 2029 "bytesInOutput": 2035
}, },
"src/faceLandmarkNet/FaceLandmark68Net.ts": { "src/faceLandmarkNet/FaceLandmark68Net.ts": {
"bytesInOutput": 253 "bytesInOutput": 257
}, },
"src/faceLandmarkNet/index.ts": { "src/faceLandmarkNet/index.ts": {
"bytesInOutput": 50 "bytesInOutput": 54
}, },
"src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts": { "src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts": {
"bytesInOutput": 888 "bytesInOutput": 889
}, },
"src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts": { "src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts": {
"bytesInOutput": 362 "bytesInOutput": 362
@ -2455,16 +2455,16 @@
"bytesInOutput": 517 "bytesInOutput": 517
}, },
"src/faceLandmarkNet/FaceLandmark68TinyNet.ts": { "src/faceLandmarkNet/FaceLandmark68TinyNet.ts": {
"bytesInOutput": 269 "bytesInOutput": 274
}, },
"src/faceRecognitionNet/FaceRecognitionNet.ts": { "src/faceRecognitionNet/FaceRecognitionNet.ts": {
"bytesInOutput": 1705 "bytesInOutput": 1706
}, },
"src/faceRecognitionNet/convLayer.ts": { "src/faceRecognitionNet/convLayer.ts": {
"bytesInOutput": 458 "bytesInOutput": 463
}, },
"src/faceRecognitionNet/scaleLayer.ts": { "src/faceRecognitionNet/scaleLayer.ts": {
"bytesInOutput": 119 "bytesInOutput": 123
}, },
"src/faceRecognitionNet/extractParams.ts": { "src/faceRecognitionNet/extractParams.ts": {
"bytesInOutput": 3405 "bytesInOutput": 3405
@ -2491,52 +2491,52 @@
"bytesInOutput": 244 "bytesInOutput": 244
}, },
"src/ssdMobilenetv1/SsdMobilenetv1.ts": { "src/ssdMobilenetv1/SsdMobilenetv1.ts": {
"bytesInOutput": 1900 "bytesInOutput": 1905
}, },
"src/ssdMobilenetv1/extractParams.ts": { "src/ssdMobilenetv1/extractParams.ts": {
"bytesInOutput": 5963 "bytesInOutput": 5967
}, },
"src/ssdMobilenetv1/extractParamsFromWeigthMap.ts": { "src/ssdMobilenetv1/extractParamsFromWeigthMap.ts": {
"bytesInOutput": 4319 "bytesInOutput": 4319
}, },
"src/ssdMobilenetv1/mobileNetV1.ts": { "src/ssdMobilenetv1/mobileNetV1.ts": {
"bytesInOutput": 1110 "bytesInOutput": 1111
}, },
"src/ssdMobilenetv1/pointwiseConvLayer.ts": { "src/ssdMobilenetv1/pointwiseConvLayer.ts": {
"bytesInOutput": 235 "bytesInOutput": 239
}, },
"src/ssdMobilenetv1/nonMaxSuppression.ts": { "src/ssdMobilenetv1/nonMaxSuppression.ts": {
"bytesInOutput": 1502 "bytesInOutput": 1504
}, },
"src/ssdMobilenetv1/outputLayer.ts": { "src/ssdMobilenetv1/outputLayer.ts": {
"bytesInOutput": 1590 "bytesInOutput": 1590
}, },
"src/ssdMobilenetv1/predictionLayer.ts": { "src/ssdMobilenetv1/predictionLayer.ts": {
"bytesInOutput": 1418 "bytesInOutput": 1419
}, },
"src/ssdMobilenetv1/boxPredictionLayer.ts": { "src/ssdMobilenetv1/boxPredictionLayer.ts": {
"bytesInOutput": 350 "bytesInOutput": 354
}, },
"src/ssdMobilenetv1/SsdMobilenetv1Options.ts": { "src/ssdMobilenetv1/SsdMobilenetv1Options.ts": {
"bytesInOutput": 554 "bytesInOutput": 555
}, },
"src/ssdMobilenetv1/index.ts": { "src/ssdMobilenetv1/index.ts": {
"bytesInOutput": 234 "bytesInOutput": 235
}, },
"src/tinyYolov2/const.ts": { "src/tinyYolov2/const.ts": {
"bytesInOutput": 485 "bytesInOutput": 490
}, },
"src/tinyYolov2/TinyYolov2Base.ts": { "src/tinyYolov2/TinyYolov2Base.ts": {
"bytesInOutput": 5885 "bytesInOutput": 5894
}, },
"src/tinyYolov2/config.ts": { "src/tinyYolov2/config.ts": {
"bytesInOutput": 1164 "bytesInOutput": 1168
}, },
"src/tinyYolov2/convWithBatchNorm.ts": { "src/tinyYolov2/convWithBatchNorm.ts": {
"bytesInOutput": 322 "bytesInOutput": 323
}, },
"src/tinyYolov2/leaky.ts": { "src/tinyYolov2/leaky.ts": {
"bytesInOutput": 178 "bytesInOutput": 182
}, },
"src/tinyYolov2/depthwiseSeparableConv.ts": { "src/tinyYolov2/depthwiseSeparableConv.ts": {
"bytesInOutput": 293 "bytesInOutput": 293
@ -2557,37 +2557,37 @@
"bytesInOutput": 139 "bytesInOutput": 139
}, },
"src/tinyFaceDetector/TinyFaceDetectorOptions.ts": { "src/tinyFaceDetector/TinyFaceDetectorOptions.ts": {
"bytesInOutput": 132 "bytesInOutput": 133
}, },
"src/globalApi/ComposableTask.ts": { "src/globalApi/ComposableTask.ts": {
"bytesInOutput": 154 "bytesInOutput": 159
}, },
"src/globalApi/DetectFaceLandmarksTasks.ts": { "src/globalApi/DetectFaceLandmarksTasks.ts": {
"bytesInOutput": 1912 "bytesInOutput": 1926
}, },
"src/globalApi/extractFacesAndComputeResults.ts": { "src/globalApi/extractFacesAndComputeResults.ts": {
"bytesInOutput": 812 "bytesInOutput": 816
}, },
"src/tinyFaceDetector/const.ts": { "src/tinyFaceDetector/const.ts": {
"bytesInOutput": 215 "bytesInOutput": 216
}, },
"src/tinyFaceDetector/TinyFaceDetector.ts": { "src/tinyFaceDetector/TinyFaceDetector.ts": {
"bytesInOutput": 624 "bytesInOutput": 629
}, },
"src/globalApi/nets.ts": { "src/globalApi/nets.ts": {
"bytesInOutput": 1515 "bytesInOutput": 1520
}, },
"src/globalApi/PredictFaceExpressionsTask.ts": { "src/globalApi/PredictFaceExpressionsTask.ts": {
"bytesInOutput": 1691 "bytesInOutput": 1700
}, },
"src/globalApi/PredictAgeAndGenderTask.ts": { "src/globalApi/PredictAgeAndGenderTask.ts": {
"bytesInOutput": 1785 "bytesInOutput": 1794
}, },
"src/globalApi/ComputeFaceDescriptorsTasks.ts": { "src/globalApi/ComputeFaceDescriptorsTasks.ts": {
"bytesInOutput": 1390 "bytesInOutput": 1399
}, },
"src/globalApi/DetectFacesTasks.ts": { "src/globalApi/DetectFacesTasks.ts": {
"bytesInOutput": 2221 "bytesInOutput": 2225
}, },
"src/globalApi/detectFaces.ts": { "src/globalApi/detectFaces.ts": {
"bytesInOutput": 224 "bytesInOutput": 224
@ -2611,7 +2611,7 @@
"bytesInOutput": 824 "bytesInOutput": 824
} }
}, },
"bytes": 132274 "bytes": 132477
} }
} }
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
{ {
"inputs": { "inputs": {
"dist/tfjs.esm.js": { "dist/tfjs.esm.js": {
"bytes": 1042, "bytes": 1050,
"imports": [] "imports": []
}, },
"src/draw/drawContour.ts": { "src/draw/drawContour.ts": {
@ -1077,7 +1077,7 @@
] ]
}, },
"package.json": { "package.json": {
"bytes": 1728, "bytes": 1807,
"imports": [] "imports": []
}, },
"src/xception/extractParams.ts": { "src/xception/extractParams.ts": {
@ -2136,50 +2136,50 @@
"dist/face-api.node.js.map": { "dist/face-api.node.js.map": {
"imports": [], "imports": [],
"inputs": {}, "inputs": {},
"bytes": 303578 "bytes": 311388
}, },
"dist/face-api.node.js": { "dist/face-api.node.js": {
"imports": [], "imports": [],
"exports": [], "exports": [],
"inputs": { "inputs": {
"dist/tfjs.esm.js": { "dist/tfjs.esm.js": {
"bytesInOutput": 962 "bytesInOutput": 967
}, },
"src/env/isNodejs.ts": { "src/env/isNodejs.ts": {
"bytesInOutput": 229 "bytesInOutput": 233
}, },
"src/index.ts": { "src/index.ts": {
"bytesInOutput": 4728 "bytesInOutput": 4729
}, },
"src/draw/index.ts": { "src/draw/index.ts": {
"bytesInOutput": 447 "bytesInOutput": 451
}, },
"src/draw/drawContour.ts": { "src/draw/drawContour.ts": {
"bytesInOutput": 313 "bytesInOutput": 313
}, },
"src/utils/index.ts": { "src/utils/index.ts": {
"bytesInOutput": 1561 "bytesInOutput": 1560
}, },
"src/classes/Dimensions.ts": { "src/classes/Dimensions.ts": {
"bytesInOutput": 394 "bytesInOutput": 398
}, },
"src/classes/Point.ts": { "src/classes/Point.ts": {
"bytesInOutput": 472 "bytesInOutput": 473
}, },
"src/classes/Box.ts": { "src/classes/Box.ts": {
"bytesInOutput": 3300 "bytesInOutput": 3305
}, },
"src/classes/BoundingBox.ts": { "src/classes/BoundingBox.ts": {
"bytesInOutput": 149 "bytesInOutput": 153
}, },
"src/classes/index.ts": { "src/classes/index.ts": {
"bytesInOutput": 0 "bytesInOutput": 0
}, },
"src/classes/ObjectDetection.ts": { "src/classes/ObjectDetection.ts": {
"bytesInOutput": 753 "bytesInOutput": 754
}, },
"src/classes/FaceDetection.ts": { "src/classes/FaceDetection.ts": {
"bytesInOutput": 268 "bytesInOutput": 272
}, },
"src/ops/iou.ts": { "src/ops/iou.ts": {
"bytesInOutput": 328 "bytesInOutput": 328
@ -2203,10 +2203,10 @@
"bytesInOutput": 188 "bytesInOutput": 188
}, },
"src/classes/Rect.ts": { "src/classes/Rect.ts": {
"bytesInOutput": 135 "bytesInOutput": 136
}, },
"src/classes/FaceLandmarks.ts": { "src/classes/FaceLandmarks.ts": {
"bytesInOutput": 1884 "bytesInOutput": 1888
}, },
"src/classes/FaceLandmarks5.ts": { "src/classes/FaceLandmarks5.ts": {
"bytesInOutput": 153 "bytesInOutput": 153
@ -2251,16 +2251,16 @@
"bytesInOutput": 446 "bytesInOutput": 446
}, },
"src/draw/DrawTextField.ts": { "src/draw/DrawTextField.ts": {
"bytesInOutput": 2254 "bytesInOutput": 2255
}, },
"src/draw/DrawBox.ts": { "src/draw/DrawBox.ts": {
"bytesInOutput": 821 "bytesInOutput": 825
}, },
"src/draw/drawDetections.ts": { "src/draw/drawDetections.ts": {
"bytesInOutput": 390 "bytesInOutput": 390
}, },
"src/faceExpressionNet/FaceExpressionNet.ts": { "src/faceExpressionNet/FaceExpressionNet.ts": {
"bytesInOutput": 874 "bytesInOutput": 878
}, },
"src/dom/isMediaLoaded.ts": { "src/dom/isMediaLoaded.ts": {
"bytesInOutput": 151 "bytesInOutput": 151
@ -2323,16 +2323,16 @@
"bytesInOutput": 201 "bytesInOutput": 201
}, },
"src/faceFeatureExtractor/FaceFeatureExtractor.ts": { "src/faceFeatureExtractor/FaceFeatureExtractor.ts": {
"bytesInOutput": 895 "bytesInOutput": 897
}, },
"src/NeuralNetwork.ts": { "src/NeuralNetwork.ts": {
"bytesInOutput": 3282 "bytesInOutput": 3292
}, },
"src/faceFeatureExtractor/denseBlock.ts": { "src/faceFeatureExtractor/denseBlock.ts": {
"bytesInOutput": 1171 "bytesInOutput": 1176
}, },
"src/common/depthwiseSeparableConv.ts": { "src/common/depthwiseSeparableConv.ts": {
"bytesInOutput": 240 "bytesInOutput": 244
}, },
"src/common/convLayer.ts": { "src/common/convLayer.ts": {
"bytesInOutput": 229 "bytesInOutput": 229
@ -2350,10 +2350,10 @@
"bytesInOutput": 428 "bytesInOutput": 428
}, },
"src/common/extractSeparableConvParamsFactory.ts": { "src/common/extractSeparableConvParamsFactory.ts": {
"bytesInOutput": 945 "bytesInOutput": 946
}, },
"src/common/types.ts": { "src/common/types.ts": {
"bytesInOutput": 173 "bytesInOutput": 177
}, },
"src/common/extractWeightEntryFactory.ts": { "src/common/extractWeightEntryFactory.ts": {
"bytesInOutput": 366 "bytesInOutput": 366
@ -2377,10 +2377,10 @@
"bytesInOutput": 400 "bytesInOutput": 400
}, },
"src/faceProcessor/FaceProcessor.ts": { "src/faceProcessor/FaceProcessor.ts": {
"bytesInOutput": 1579 "bytesInOutput": 1585
}, },
"src/common/fullyConnectedLayer.ts": { "src/common/fullyConnectedLayer.ts": {
"bytesInOutput": 149 "bytesInOutput": 153
}, },
"src/faceProcessor/extractParams.ts": { "src/faceProcessor/extractParams.ts": {
"bytesInOutput": 382 "bytesInOutput": 382
@ -2392,7 +2392,7 @@
"bytesInOutput": 252 "bytesInOutput": 252
}, },
"src/faceExpressionNet/FaceExpressions.ts": { "src/faceExpressionNet/FaceExpressions.ts": {
"bytesInOutput": 527 "bytesInOutput": 532
}, },
"src/faceExpressionNet/index.ts": { "src/faceExpressionNet/index.ts": {
"bytesInOutput": 0 "bytesInOutput": 0
@ -2410,13 +2410,13 @@
"bytesInOutput": 1723 "bytesInOutput": 1723
}, },
"package.json": { "package.json": {
"bytesInOutput": 20 "bytesInOutput": 21
}, },
"src/ageGenderNet/AgeGenderNet.ts": { "src/ageGenderNet/AgeGenderNet.ts": {
"bytesInOutput": 2554 "bytesInOutput": 2559
}, },
"src/xception/TinyXception.ts": { "src/xception/TinyXception.ts": {
"bytesInOutput": 1901 "bytesInOutput": 1905
}, },
"src/xception/extractParams.ts": { "src/xception/extractParams.ts": {
"bytesInOutput": 2443 "bytesInOutput": 2443
@ -2437,16 +2437,16 @@
"bytesInOutput": 0 "bytesInOutput": 0
}, },
"src/faceLandmarkNet/FaceLandmark68NetBase.ts": { "src/faceLandmarkNet/FaceLandmark68NetBase.ts": {
"bytesInOutput": 2029 "bytesInOutput": 2035
}, },
"src/faceLandmarkNet/FaceLandmark68Net.ts": { "src/faceLandmarkNet/FaceLandmark68Net.ts": {
"bytesInOutput": 253 "bytesInOutput": 257
}, },
"src/faceLandmarkNet/index.ts": { "src/faceLandmarkNet/index.ts": {
"bytesInOutput": 50 "bytesInOutput": 54
}, },
"src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts": { "src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts": {
"bytesInOutput": 888 "bytesInOutput": 889
}, },
"src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts": { "src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts": {
"bytesInOutput": 362 "bytesInOutput": 362
@ -2455,16 +2455,16 @@
"bytesInOutput": 517 "bytesInOutput": 517
}, },
"src/faceLandmarkNet/FaceLandmark68TinyNet.ts": { "src/faceLandmarkNet/FaceLandmark68TinyNet.ts": {
"bytesInOutput": 269 "bytesInOutput": 274
}, },
"src/faceRecognitionNet/FaceRecognitionNet.ts": { "src/faceRecognitionNet/FaceRecognitionNet.ts": {
"bytesInOutput": 1705 "bytesInOutput": 1706
}, },
"src/faceRecognitionNet/convLayer.ts": { "src/faceRecognitionNet/convLayer.ts": {
"bytesInOutput": 458 "bytesInOutput": 463
}, },
"src/faceRecognitionNet/scaleLayer.ts": { "src/faceRecognitionNet/scaleLayer.ts": {
"bytesInOutput": 119 "bytesInOutput": 123
}, },
"src/faceRecognitionNet/extractParams.ts": { "src/faceRecognitionNet/extractParams.ts": {
"bytesInOutput": 3405 "bytesInOutput": 3405
@ -2491,52 +2491,52 @@
"bytesInOutput": 244 "bytesInOutput": 244
}, },
"src/ssdMobilenetv1/SsdMobilenetv1.ts": { "src/ssdMobilenetv1/SsdMobilenetv1.ts": {
"bytesInOutput": 1900 "bytesInOutput": 1905
}, },
"src/ssdMobilenetv1/extractParams.ts": { "src/ssdMobilenetv1/extractParams.ts": {
"bytesInOutput": 5963 "bytesInOutput": 5967
}, },
"src/ssdMobilenetv1/extractParamsFromWeigthMap.ts": { "src/ssdMobilenetv1/extractParamsFromWeigthMap.ts": {
"bytesInOutput": 4319 "bytesInOutput": 4319
}, },
"src/ssdMobilenetv1/mobileNetV1.ts": { "src/ssdMobilenetv1/mobileNetV1.ts": {
"bytesInOutput": 1110 "bytesInOutput": 1111
}, },
"src/ssdMobilenetv1/pointwiseConvLayer.ts": { "src/ssdMobilenetv1/pointwiseConvLayer.ts": {
"bytesInOutput": 235 "bytesInOutput": 239
}, },
"src/ssdMobilenetv1/nonMaxSuppression.ts": { "src/ssdMobilenetv1/nonMaxSuppression.ts": {
"bytesInOutput": 1502 "bytesInOutput": 1504
}, },
"src/ssdMobilenetv1/outputLayer.ts": { "src/ssdMobilenetv1/outputLayer.ts": {
"bytesInOutput": 1590 "bytesInOutput": 1590
}, },
"src/ssdMobilenetv1/predictionLayer.ts": { "src/ssdMobilenetv1/predictionLayer.ts": {
"bytesInOutput": 1418 "bytesInOutput": 1419
}, },
"src/ssdMobilenetv1/boxPredictionLayer.ts": { "src/ssdMobilenetv1/boxPredictionLayer.ts": {
"bytesInOutput": 350 "bytesInOutput": 354
}, },
"src/ssdMobilenetv1/SsdMobilenetv1Options.ts": { "src/ssdMobilenetv1/SsdMobilenetv1Options.ts": {
"bytesInOutput": 554 "bytesInOutput": 555
}, },
"src/ssdMobilenetv1/index.ts": { "src/ssdMobilenetv1/index.ts": {
"bytesInOutput": 234 "bytesInOutput": 235
}, },
"src/tinyYolov2/const.ts": { "src/tinyYolov2/const.ts": {
"bytesInOutput": 485 "bytesInOutput": 490
}, },
"src/tinyYolov2/TinyYolov2Base.ts": { "src/tinyYolov2/TinyYolov2Base.ts": {
"bytesInOutput": 5885 "bytesInOutput": 5894
}, },
"src/tinyYolov2/config.ts": { "src/tinyYolov2/config.ts": {
"bytesInOutput": 1164 "bytesInOutput": 1168
}, },
"src/tinyYolov2/convWithBatchNorm.ts": { "src/tinyYolov2/convWithBatchNorm.ts": {
"bytesInOutput": 322 "bytesInOutput": 323
}, },
"src/tinyYolov2/leaky.ts": { "src/tinyYolov2/leaky.ts": {
"bytesInOutput": 178 "bytesInOutput": 182
}, },
"src/tinyYolov2/depthwiseSeparableConv.ts": { "src/tinyYolov2/depthwiseSeparableConv.ts": {
"bytesInOutput": 293 "bytesInOutput": 293
@ -2557,37 +2557,37 @@
"bytesInOutput": 139 "bytesInOutput": 139
}, },
"src/tinyFaceDetector/TinyFaceDetectorOptions.ts": { "src/tinyFaceDetector/TinyFaceDetectorOptions.ts": {
"bytesInOutput": 132 "bytesInOutput": 133
}, },
"src/globalApi/ComposableTask.ts": { "src/globalApi/ComposableTask.ts": {
"bytesInOutput": 154 "bytesInOutput": 159
}, },
"src/globalApi/DetectFaceLandmarksTasks.ts": { "src/globalApi/DetectFaceLandmarksTasks.ts": {
"bytesInOutput": 1912 "bytesInOutput": 1926
}, },
"src/globalApi/extractFacesAndComputeResults.ts": { "src/globalApi/extractFacesAndComputeResults.ts": {
"bytesInOutput": 812 "bytesInOutput": 816
}, },
"src/tinyFaceDetector/const.ts": { "src/tinyFaceDetector/const.ts": {
"bytesInOutput": 215 "bytesInOutput": 216
}, },
"src/tinyFaceDetector/TinyFaceDetector.ts": { "src/tinyFaceDetector/TinyFaceDetector.ts": {
"bytesInOutput": 624 "bytesInOutput": 629
}, },
"src/globalApi/nets.ts": { "src/globalApi/nets.ts": {
"bytesInOutput": 1515 "bytesInOutput": 1520
}, },
"src/globalApi/PredictFaceExpressionsTask.ts": { "src/globalApi/PredictFaceExpressionsTask.ts": {
"bytesInOutput": 1691 "bytesInOutput": 1700
}, },
"src/globalApi/PredictAgeAndGenderTask.ts": { "src/globalApi/PredictAgeAndGenderTask.ts": {
"bytesInOutput": 1785 "bytesInOutput": 1794
}, },
"src/globalApi/ComputeFaceDescriptorsTasks.ts": { "src/globalApi/ComputeFaceDescriptorsTasks.ts": {
"bytesInOutput": 1390 "bytesInOutput": 1399
}, },
"src/globalApi/DetectFacesTasks.ts": { "src/globalApi/DetectFacesTasks.ts": {
"bytesInOutput": 2221 "bytesInOutput": 2225
}, },
"src/globalApi/detectFaces.ts": { "src/globalApi/detectFaces.ts": {
"bytesInOutput": 224 "bytesInOutput": 224
@ -2611,7 +2611,7 @@
"bytesInOutput": 824 "bytesInOutput": 824
} }
}, },
"bytes": 132266 "bytes": 132469
} }
} }
} }

82
dist/tfjs.esm.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

279
dist/tfjs.esm.json vendored
View File

@ -109,7 +109,7 @@
] ]
}, },
"node_modules/@tensorflow/tfjs-core/dist/engine.js": { "node_modules/@tensorflow/tfjs-core/dist/engine.js": {
"bytes": 41114, "bytes": 41541,
"imports": [ "imports": [
{ {
"path": "node_modules/@tensorflow/tfjs-core/dist/backends/backend.js" "path": "node_modules/@tensorflow/tfjs-core/dist/backends/backend.js"
@ -633,7 +633,7 @@
] ]
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/browser.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/browser.js": {
"bytes": 8776, "bytes": 8954,
"imports": [ "imports": [
{ {
"path": "node_modules/@tensorflow/tfjs-core/dist/engine.js" "path": "node_modules/@tensorflow/tfjs-core/dist/engine.js"
@ -16969,7 +16969,7 @@
] ]
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Bincount.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Bincount.js": {
"bytes": 1386, "bytes": 1366,
"imports": [ "imports": [
{ {
"path": "node_modules/@tensorflow/tfjs-core/dist/index.js" "path": "node_modules/@tensorflow/tfjs-core/dist/index.js"
@ -17120,7 +17120,7 @@
] ]
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat_impl.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat_impl.js": {
"bytes": 5072, "bytes": 5062,
"imports": [ "imports": [
{ {
"path": "node_modules/@tensorflow/tfjs-core/dist/index.js" "path": "node_modules/@tensorflow/tfjs-core/dist/index.js"
@ -17342,7 +17342,7 @@
] ]
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DenseBincount.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DenseBincount.js": {
"bytes": 1939, "bytes": 1919,
"imports": [ "imports": [
{ {
"path": "node_modules/@tensorflow/tfjs-core/dist/index.js" "path": "node_modules/@tensorflow/tfjs-core/dist/index.js"
@ -17645,7 +17645,7 @@
] ]
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels.js": {
"bytes": 2748, "bytes": 2870,
"imports": [ "imports": [
{ {
"path": "node_modules/@tensorflow/tfjs-core/dist/index.js" "path": "node_modules/@tensorflow/tfjs-core/dist/index.js"
@ -18787,7 +18787,7 @@
] ]
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SplitV.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SplitV.js": {
"bytes": 1592, "bytes": 1594,
"imports": [ "imports": [
{ {
"path": "node_modules/@tensorflow/tfjs-core/dist/index.js" "path": "node_modules/@tensorflow/tfjs-core/dist/index.js"
@ -18900,7 +18900,7 @@
] ]
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tile.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tile.js": {
"bytes": 1615, "bytes": 1724,
"imports": [ "imports": [
{ {
"path": "node_modules/@tensorflow/tfjs-core/dist/index.js" "path": "node_modules/@tensorflow/tfjs-core/dist/index.js"
@ -18914,7 +18914,7 @@
] ]
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/TopK.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/TopK.js": {
"bytes": 1425, "bytes": 1415,
"imports": [ "imports": [
{ {
"path": "node_modules/@tensorflow/tfjs-core/dist/index.js" "path": "node_modules/@tensorflow/tfjs-core/dist/index.js"
@ -20251,6 +20251,17 @@
} }
] ]
}, },
"node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Round.js": {
"bytes": 900,
"imports": [
{
"path": "node_modules/@tensorflow/tfjs-core/dist/index.js"
},
{
"path": "node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/unary_kernel.js"
}
]
},
"node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Rsqrt.js": { "node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Rsqrt.js": {
"bytes": 900, "bytes": 900,
"imports": [ "imports": [
@ -20320,7 +20331,7 @@
] ]
}, },
"node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SplitV.js": { "node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SplitV.js": {
"bytes": 1610, "bytes": 1611,
"imports": [ "imports": [
{ {
"path": "node_modules/@tensorflow/tfjs-core/dist/index.js" "path": "node_modules/@tensorflow/tfjs-core/dist/index.js"
@ -20455,7 +20466,7 @@
] ]
}, },
"node_modules/@tensorflow/tfjs-backend-wasm/dist/register_all_kernels.js": { "node_modules/@tensorflow/tfjs-backend-wasm/dist/register_all_kernels.js": {
"bytes": 7247, "bytes": 7311,
"imports": [ "imports": [
{ {
"path": "node_modules/@tensorflow/tfjs-core/dist/index.js" "path": "node_modules/@tensorflow/tfjs-core/dist/index.js"
@ -20652,6 +20663,9 @@
{ {
"path": "node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/RotateWithOffset.js" "path": "node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/RotateWithOffset.js"
}, },
{
"path": "node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Round.js"
},
{ {
"path": "node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Rsqrt.js" "path": "node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Rsqrt.js"
}, },
@ -20735,7 +20749,7 @@
"imports": [] "imports": []
}, },
"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-threaded-simd.js": {
"bytes": 73950, "bytes": 74064,
"imports": [ "imports": [
{ {
"path": "empty:path" "path": "empty:path"
@ -20759,7 +20773,7 @@
"imports": [] "imports": []
}, },
"node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm.js": { "node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm.js": {
"bytes": 28294, "bytes": 28411,
"imports": [ "imports": [
{ {
"path": "empty:path" "path": "empty:path"
@ -20840,7 +20854,7 @@
"dist/tfjs.esm.js.map": { "dist/tfjs.esm.js.map": {
"imports": [], "imports": [],
"inputs": {}, "inputs": {},
"bytes": 1062433 "bytes": 1146818
}, },
"dist/tfjs.esm.js": { "dist/tfjs.esm.js": {
"imports": [], "imports": [],
@ -21325,61 +21339,61 @@
], ],
"inputs": { "inputs": {
"empty:/home/vlado/dev/face-api/node_modules/node-fetch/browser.js": { "empty:/home/vlado/dev/face-api/node_modules/node-fetch/browser.js": {
"bytesInOutput": 34 "bytesInOutput": 39
}, },
"node_modules/seedrandom/lib/alea.js": { "node_modules/seedrandom/lib/alea.js": {
"bytesInOutput": 1260 "bytesInOutput": 1265
}, },
"node_modules/seedrandom/lib/xor128.js": { "node_modules/seedrandom/lib/xor128.js": {
"bytesInOutput": 1022 "bytesInOutput": 1027
}, },
"node_modules/seedrandom/lib/xorwow.js": { "node_modules/seedrandom/lib/xorwow.js": {
"bytesInOutput": 1127 "bytesInOutput": 1132
}, },
"node_modules/seedrandom/lib/xorshift7.js": { "node_modules/seedrandom/lib/xorshift7.js": {
"bytesInOutput": 1279 "bytesInOutput": 1284
}, },
"node_modules/seedrandom/lib/xor4096.js": { "node_modules/seedrandom/lib/xor4096.js": {
"bytesInOutput": 1478 "bytesInOutput": 1483
}, },
"node_modules/seedrandom/lib/tychei.js": { "node_modules/seedrandom/lib/tychei.js": {
"bytesInOutput": 1149 "bytesInOutput": 1154
}, },
"empty:crypto": { "empty:crypto": {
"bytesInOutput": 33 "bytesInOutput": 38
}, },
"node_modules/seedrandom/seedrandom.js": { "node_modules/seedrandom/seedrandom.js": {
"bytesInOutput": 2539 "bytesInOutput": 2544
}, },
"node_modules/seedrandom/index.js": { "node_modules/seedrandom/index.js": {
"bytesInOutput": 353 "bytesInOutput": 358
}, },
"empty:/home/vlado/dev/face-api/node_modules/string_decoder/lib/string_decoder.js": { "empty:/home/vlado/dev/face-api/node_modules/string_decoder/lib/string_decoder.js": {
"bytesInOutput": 41 "bytesInOutput": 46
}, },
"empty:path": { "empty:path": {
"bytesInOutput": 31 "bytesInOutput": 36
}, },
"empty:worker_threads": { "empty:worker_threads": {
"bytesInOutput": 41 "bytesInOutput": 46
}, },
"empty:perf_hooks": { "empty:perf_hooks": {
"bytesInOutput": 37 "bytesInOutput": 42
}, },
"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-threaded-simd.js": {
"bytesInOutput": 70101 "bytesInOutput": 70199
}, },
"node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm.js": { "node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm.js": {
"bytesInOutput": 26003 "bytesInOutput": 26105
}, },
"node_modules/@tensorflow/tfjs-core/dist/backends/backend.js": { "node_modules/@tensorflow/tfjs-core/dist/backends/backend.js": {
"bytesInOutput": 9449 "bytesInOutput": 9449
}, },
"node_modules/@tensorflow/tfjs-core/dist/util_base.js": { "node_modules/@tensorflow/tfjs-core/dist/util_base.js": {
"bytesInOutput": 8567 "bytesInOutput": 8547
}, },
"node_modules/@tensorflow/tfjs-core/dist/environment.js": { "node_modules/@tensorflow/tfjs-core/dist/environment.js": {
"bytesInOutput": 2834 "bytesInOutput": 2836
}, },
"node_modules/@tensorflow/tfjs-core/dist/global_util.js": { "node_modules/@tensorflow/tfjs-core/dist/global_util.js": {
"bytesInOutput": 657 "bytesInOutput": 657
@ -21388,7 +21402,7 @@
"bytesInOutput": 3328 "bytesInOutput": 3328
}, },
"node_modules/@tensorflow/tfjs-core/dist/kernel_registry.js": { "node_modules/@tensorflow/tfjs-core/dist/kernel_registry.js": {
"bytesInOutput": 1743 "bytesInOutput": 1741
}, },
"node_modules/@tensorflow/tfjs-core/dist/util.js": { "node_modules/@tensorflow/tfjs-core/dist/util.js": {
"bytesInOutput": 2856 "bytesInOutput": 2856
@ -21406,13 +21420,13 @@
"bytesInOutput": 4847 "bytesInOutput": 4847
}, },
"node_modules/@tensorflow/tfjs-core/dist/tensor_util.js": { "node_modules/@tensorflow/tfjs-core/dist/tensor_util.js": {
"bytesInOutput": 1057 "bytesInOutput": 1066
}, },
"node_modules/@tensorflow/tfjs-core/dist/types.js": { "node_modules/@tensorflow/tfjs-core/dist/types.js": {
"bytesInOutput": 1557 "bytesInOutput": 1557
}, },
"node_modules/@tensorflow/tfjs-core/dist/engine.js": { "node_modules/@tensorflow/tfjs-core/dist/engine.js": {
"bytesInOutput": 19459 "bytesInOutput": 19509
}, },
"node_modules/@tensorflow/tfjs-core/dist/device_util.js": { "node_modules/@tensorflow/tfjs-core/dist/device_util.js": {
"bytesInOutput": 2380 "bytesInOutput": 2380
@ -21439,16 +21453,16 @@
"bytesInOutput": 91 "bytesInOutput": 91
}, },
"node_modules/@tensorflow/tfjs-core/dist/io/io_utils.js": { "node_modules/@tensorflow/tfjs-core/dist/io/io_utils.js": {
"bytesInOutput": 8137 "bytesInOutput": 8136
}, },
"node_modules/@tensorflow/tfjs-core/dist/io/router_registry.js": { "node_modules/@tensorflow/tfjs-core/dist/io/router_registry.js": {
"bytesInOutput": 1190 "bytesInOutput": 1190
}, },
"node_modules/@tensorflow/tfjs-core/dist/io/indexed_db.js": { "node_modules/@tensorflow/tfjs-core/dist/io/indexed_db.js": {
"bytesInOutput": 5551 "bytesInOutput": 5549
}, },
"node_modules/@tensorflow/tfjs-core/dist/io/local_storage.js": { "node_modules/@tensorflow/tfjs-core/dist/io/local_storage.js": {
"bytesInOutput": 5867 "bytesInOutput": 5865
}, },
"node_modules/@tensorflow/tfjs-core/dist/io/model_management.js": { "node_modules/@tensorflow/tfjs-core/dist/io/model_management.js": {
"bytesInOutput": 3226 "bytesInOutput": 3226
@ -21457,7 +21471,7 @@
"bytesInOutput": 723 "bytesInOutput": 723
}, },
"node_modules/@tensorflow/tfjs-core/dist/platforms/platform_node.js": { "node_modules/@tensorflow/tfjs-core/dist/platforms/platform_node.js": {
"bytesInOutput": 769 "bytesInOutput": 774
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/buffer.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/buffer.js": {
"bytesInOutput": 155 "bytesInOutput": 155
@ -21478,7 +21492,7 @@
"bytesInOutput": 729 "bytesInOutput": 729
}, },
"node_modules/@tensorflow/tfjs-core/dist/io/browser_files.js": { "node_modules/@tensorflow/tfjs-core/dist/io/browser_files.js": {
"bytesInOutput": 5984 "bytesInOutput": 5982
}, },
"node_modules/@tensorflow/tfjs-core/dist/io/progress.js": { "node_modules/@tensorflow/tfjs-core/dist/io/progress.js": {
"bytesInOutput": 1114 "bytesInOutput": 1114
@ -21508,13 +21522,13 @@
"bytesInOutput": 1155 "bytesInOutput": 1155
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/browser.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/browser.js": {
"bytesInOutput": 3978 "bytesInOutput": 4099
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/tensor3d.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/tensor3d.js": {
"bytesInOutput": 525 "bytesInOutput": 525
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/gather_nd_util.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/gather_nd_util.js": {
"bytesInOutput": 1398 "bytesInOutput": 1402
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/scatter_nd_util.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/scatter_nd_util.js": {
"bytesInOutput": 2589 "bytesInOutput": 2589
@ -21613,7 +21627,7 @@
"bytesInOutput": 889 "bytesInOutput": 889
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/batch_to_space_nd.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/batch_to_space_nd.js": {
"bytesInOutput": 713 "bytesInOutput": 712
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm_util.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm_util.js": {
"bytesInOutput": 213 "bytesInOutput": 213
@ -21634,7 +21648,7 @@
"bytesInOutput": 617 "bytesInOutput": 617
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_to.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_to.js": {
"bytesInOutput": 895 "bytesInOutput": 894
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/ceil.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/ceil.js": {
"bytesInOutput": 121 "bytesInOutput": 121
@ -21688,7 +21702,7 @@
"bytesInOutput": 784 "bytesInOutput": 784
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/depth_to_space.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/depth_to_space.js": {
"bytesInOutput": 957 "bytesInOutput": 956
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d.js": {
"bytesInOutput": 1149 "bytesInOutput": 1149
@ -21898,7 +21912,7 @@
"bytesInOutput": 288 "bytesInOutput": 288
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/space_to_batch_nd.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/space_to_batch_nd.js": {
"bytesInOutput": 762 "bytesInOutput": 761
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/pool.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/pool.js": {
"bytesInOutput": 2100 "bytesInOutput": 2100
@ -21913,10 +21927,10 @@
"bytesInOutput": 222 "bytesInOutput": 222
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/rand.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/rand.js": {
"bytesInOutput": 414 "bytesInOutput": 415
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/rand_util.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/rand_util.js": {
"bytesInOutput": 2341 "bytesInOutput": 2345
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/random_gamma.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/random_gamma.js": {
"bytesInOutput": 401 "bytesInOutput": 401
@ -22195,7 +22209,7 @@
"bytesInOutput": 1078 "bytesInOutput": 1078
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/linalg/band_part.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/linalg/band_part.js": {
"bytesInOutput": 1006 "bytesInOutput": 1004
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/linalg/gram_schmidt.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/linalg/gram_schmidt.js": {
"bytesInOutput": 854 "bytesInOutput": 854
@ -22237,25 +22251,25 @@
"bytesInOutput": 1246 "bytesInOutput": 1246
}, },
"node_modules/@tensorflow/tfjs-core/dist/optimizers/adadelta_optimizer.js": { "node_modules/@tensorflow/tfjs-core/dist/optimizers/adadelta_optimizer.js": {
"bytesInOutput": 2521 "bytesInOutput": 2526
}, },
"node_modules/@tensorflow/tfjs-core/dist/optimizers/adagrad_optimizer.js": { "node_modules/@tensorflow/tfjs-core/dist/optimizers/adagrad_optimizer.js": {
"bytesInOutput": 1781 "bytesInOutput": 1786
}, },
"node_modules/@tensorflow/tfjs-core/dist/optimizers/adam_optimizer.js": { "node_modules/@tensorflow/tfjs-core/dist/optimizers/adam_optimizer.js": {
"bytesInOutput": 3170 "bytesInOutput": 3175
}, },
"node_modules/@tensorflow/tfjs-core/dist/optimizers/adamax_optimizer.js": { "node_modules/@tensorflow/tfjs-core/dist/optimizers/adamax_optimizer.js": {
"bytesInOutput": 2570 "bytesInOutput": 2575
}, },
"node_modules/@tensorflow/tfjs-core/dist/optimizers/sgd_optimizer.js": { "node_modules/@tensorflow/tfjs-core/dist/optimizers/sgd_optimizer.js": {
"bytesInOutput": 1128 "bytesInOutput": 1133
}, },
"node_modules/@tensorflow/tfjs-core/dist/optimizers/momentum_optimizer.js": { "node_modules/@tensorflow/tfjs-core/dist/optimizers/momentum_optimizer.js": {
"bytesInOutput": 1846 "bytesInOutput": 1846
}, },
"node_modules/@tensorflow/tfjs-core/dist/optimizers/rmsprop_optimizer.js": { "node_modules/@tensorflow/tfjs-core/dist/optimizers/rmsprop_optimizer.js": {
"bytesInOutput": 4110 "bytesInOutput": 4115
}, },
"node_modules/@tensorflow/tfjs-core/dist/optimizers/optimizer_constructors.js": { "node_modules/@tensorflow/tfjs-core/dist/optimizers/optimizer_constructors.js": {
"bytesInOutput": 868 "bytesInOutput": 868
@ -22279,7 +22293,7 @@
"bytesInOutput": 208 "bytesInOutput": 208
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/array_ops_util.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/array_ops_util.js": {
"bytesInOutput": 1827 "bytesInOutput": 1826
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/selu_util.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/selu_util.js": {
"bytesInOutput": 69 "bytesInOutput": 69
@ -22294,7 +22308,7 @@
"bytesInOutput": 1700 "bytesInOutput": 1700
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/split_util.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/split_util.js": {
"bytesInOutput": 777 "bytesInOutput": 776
}, },
"node_modules/@tensorflow/tfjs-core/dist/ops/segment_util.js": { "node_modules/@tensorflow/tfjs-core/dist/ops/segment_util.js": {
"bytesInOutput": 1851 "bytesInOutput": 1851
@ -23140,13 +23154,13 @@
"bytesInOutput": 1408 "bytesInOutput": 1408
}, },
"node_modules/@tensorflow/tfjs-layers/dist/engine/topology.js": { "node_modules/@tensorflow/tfjs-layers/dist/engine/topology.js": {
"bytesInOutput": 15358 "bytesInOutput": 15371
}, },
"node_modules/@tensorflow/tfjs-layers/dist/engine/input_layer.js": { "node_modules/@tensorflow/tfjs-layers/dist/engine/input_layer.js": {
"bytesInOutput": 2399 "bytesInOutput": 2399
}, },
"node_modules/@tensorflow/tfjs-layers/dist/logs.js": { "node_modules/@tensorflow/tfjs-layers/dist/logs.js": {
"bytesInOutput": 556 "bytesInOutput": 561
}, },
"node_modules/@tensorflow/tfjs-layers/dist/base_callbacks.js": { "node_modules/@tensorflow/tfjs-layers/dist/base_callbacks.js": {
"bytesInOutput": 7230 "bytesInOutput": 7230
@ -23164,7 +23178,7 @@
"bytesInOutput": 651 "bytesInOutput": 651
}, },
"node_modules/@tensorflow/tfjs-layers/dist/user_defined_metadata.js": { "node_modules/@tensorflow/tfjs-layers/dist/user_defined_metadata.js": {
"bytesInOutput": 1235 "bytesInOutput": 1223
}, },
"node_modules/@tensorflow/tfjs-layers/dist/utils/layer_utils.js": { "node_modules/@tensorflow/tfjs-layers/dist/utils/layer_utils.js": {
"bytesInOutput": 3552 "bytesInOutput": 3552
@ -23176,10 +23190,10 @@
"bytesInOutput": 21 "bytesInOutput": 21
}, },
"node_modules/@tensorflow/tfjs-layers/dist/engine/executor.js": { "node_modules/@tensorflow/tfjs-layers/dist/engine/executor.js": {
"bytesInOutput": 6455 "bytesInOutput": 6457
}, },
"node_modules/@tensorflow/tfjs-layers/dist/engine/container.js": { "node_modules/@tensorflow/tfjs-layers/dist/engine/container.js": {
"bytesInOutput": 19972 "bytesInOutput": 19995
}, },
"node_modules/@tensorflow/tfjs-layers/dist/engine/training_utils.js": { "node_modules/@tensorflow/tfjs-layers/dist/engine/training_utils.js": {
"bytesInOutput": 2452 "bytesInOutput": 2452
@ -23188,10 +23202,10 @@
"bytesInOutput": 8826 "bytesInOutput": 8826
}, },
"node_modules/@tensorflow/tfjs-layers/dist/engine/training_tensors.js": { "node_modules/@tensorflow/tfjs-layers/dist/engine/training_tensors.js": {
"bytesInOutput": 6985 "bytesInOutput": 6990
}, },
"node_modules/@tensorflow/tfjs-layers/dist/engine/training.js": { "node_modules/@tensorflow/tfjs-layers/dist/engine/training.js": {
"bytesInOutput": 25174 "bytesInOutput": 25215
}, },
"node_modules/@tensorflow/tfjs-layers/dist/models.js": { "node_modules/@tensorflow/tfjs-layers/dist/models.js": {
"bytesInOutput": 10187 "bytesInOutput": 10187
@ -23221,16 +23235,16 @@
"bytesInOutput": 29664 "bytesInOutput": 29664
}, },
"node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional_recurrent.js": { "node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional_recurrent.js": {
"bytesInOutput": 9078 "bytesInOutput": 9083
}, },
"node_modules/@tensorflow/tfjs-layers/dist/layers/core.js": { "node_modules/@tensorflow/tfjs-layers/dist/layers/core.js": {
"bytesInOutput": 9931 "bytesInOutput": 9930
}, },
"node_modules/@tensorflow/tfjs-layers/dist/layers/embeddings.js": { "node_modules/@tensorflow/tfjs-layers/dist/layers/embeddings.js": {
"bytesInOutput": 2792 "bytesInOutput": 2792
}, },
"node_modules/@tensorflow/tfjs-layers/dist/layers/merge.js": { "node_modules/@tensorflow/tfjs-layers/dist/layers/merge.js": {
"bytesInOutput": 11966 "bytesInOutput": 11970
}, },
"node_modules/@tensorflow/tfjs-layers/dist/layers/noise.js": { "node_modules/@tensorflow/tfjs-layers/dist/layers/noise.js": {
"bytesInOutput": 2316 "bytesInOutput": 2316
@ -23272,55 +23286,55 @@
"bytesInOutput": 2242 "bytesInOutput": 2242
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/arithmetic.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/arithmetic.js": {
"bytesInOutput": 2949 "bytesInOutput": 2950
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/basic_math.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/basic_math.js": {
"bytesInOutput": 6693 "bytesInOutput": 6698
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/control.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/control.js": {
"bytesInOutput": 7192 "bytesInOutput": 7197
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/convolution.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/convolution.js": {
"bytesInOutput": 6630 "bytesInOutput": 6635
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/creation.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/creation.js": {
"bytesInOutput": 2790 "bytesInOutput": 2795
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/dynamic.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/dynamic.js": {
"bytesInOutput": 1689 "bytesInOutput": 1694
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/evaluation.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/evaluation.js": {
"bytesInOutput": 454 "bytesInOutput": 459
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/graph.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/graph.js": {
"bytesInOutput": 1620 "bytesInOutput": 1625
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/hash_table.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/hash_table.js": {
"bytesInOutput": 1875 "bytesInOutput": 1880
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/image.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/image.js": {
"bytesInOutput": 1042 "bytesInOutput": 1047
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/logical.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/logical.js": {
"bytesInOutput": 2093 "bytesInOutput": 2098
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/matrices.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/matrices.js": {
"bytesInOutput": 1748 "bytesInOutput": 1753
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/normalization.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/normalization.js": {
"bytesInOutput": 2118 "bytesInOutput": 2123
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/reduction.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/reduction.js": {
"bytesInOutput": 2157 "bytesInOutput": 2162
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/slice_join.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/slice_join.js": {
"bytesInOutput": 3448 "bytesInOutput": 3453
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/spectral.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/spectral.js": {
"bytesInOutput": 513 "bytesInOutput": 518
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/transformation.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/transformation.js": {
"bytesInOutput": 2006 "bytesInOutput": 2010
}, },
"node_modules/@tensorflow/tfjs-converter/dist/operations/operation_mapper.js": { "node_modules/@tensorflow/tfjs-converter/dist/operations/operation_mapper.js": {
"bytesInOutput": 9568 "bytesInOutput": 9568
@ -23398,16 +23412,16 @@
"bytesInOutput": 2405 "bytesInOutput": 2405
}, },
"node_modules/@tensorflow/tfjs-converter/dist/executor/model_analysis.js": { "node_modules/@tensorflow/tfjs-converter/dist/executor/model_analysis.js": {
"bytesInOutput": 2326 "bytesInOutput": 2320
}, },
"node_modules/@tensorflow/tfjs-converter/dist/executor/graph_executor.js": { "node_modules/@tensorflow/tfjs-converter/dist/executor/graph_executor.js": {
"bytesInOutput": 11934 "bytesInOutput": 11935
}, },
"node_modules/@tensorflow/tfjs-converter/dist/executor/resource_manager.js": { "node_modules/@tensorflow/tfjs-converter/dist/executor/resource_manager.js": {
"bytesInOutput": 642 "bytesInOutput": 646
}, },
"node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.js": { "node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.js": {
"bytesInOutput": 4680 "bytesInOutput": 4678
}, },
"node_modules/@tensorflow/tfjs-converter/dist/index.js": { "node_modules/@tensorflow/tfjs-converter/dist/index.js": {
"bytesInOutput": 0 "bytesInOutput": 0
@ -23419,10 +23433,10 @@
"bytesInOutput": 341 "bytesInOutput": 341
}, },
"node_modules/@tensorflow/tfjs-data/dist/dataset.js": { "node_modules/@tensorflow/tfjs-data/dist/dataset.js": {
"bytesInOutput": 4804 "bytesInOutput": 4805
}, },
"node_modules/@tensorflow/tfjs-data/dist/iterators/lazy_iterator.js": { "node_modules/@tensorflow/tfjs-data/dist/iterators/lazy_iterator.js": {
"bytesInOutput": 10878 "bytesInOutput": 10882
}, },
"node_modules/@tensorflow/tfjs-data/dist/util/deep_map.js": { "node_modules/@tensorflow/tfjs-data/dist/util/deep_map.js": {
"bytesInOutput": 2452 "bytesInOutput": 2452
@ -23482,10 +23496,10 @@
"bytesInOutput": 231 "bytesInOutput": 231
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/backend_cpu.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/backend_cpu.js": {
"bytesInOutput": 3142 "bytesInOutput": 3143
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/shared.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/shared.js": {
"bytesInOutput": 873 "bytesInOutput": 877
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Abs.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Abs.js": {
"bytesInOutput": 518 "bytesInOutput": 518
@ -23689,10 +23703,10 @@
"bytesInOutput": 654 "bytesInOutput": 654
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPool3DGrad.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPool3DGrad.js": {
"bytesInOutput": 2223 "bytesInOutput": 2232
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPoolGrad.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPoolGrad.js": {
"bytesInOutput": 1586 "bytesInOutput": 1595
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BatchNorm.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BatchNorm.js": {
"bytesInOutput": 1556 "bytesInOutput": 1556
@ -23716,7 +23730,7 @@
"bytesInOutput": 1951 "bytesInOutput": 1951
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv2D.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv2D.js": {
"bytesInOutput": 2242 "bytesInOutput": 2250
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv2DBackpropFilter.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv2DBackpropFilter.js": {
"bytesInOutput": 1722 "bytesInOutput": 1722
@ -23725,7 +23739,7 @@
"bytesInOutput": 2394 "bytesInOutput": 2394
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv3D.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv3D.js": {
"bytesInOutput": 1993 "bytesInOutput": 2005
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv3DBackpropFilterV2.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv3DBackpropFilterV2.js": {
"bytesInOutput": 2291 "bytesInOutput": 2291
@ -23740,7 +23754,7 @@
"bytesInOutput": 114 "bytesInOutput": 114
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/CropAndResize.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/CropAndResize.js": {
"bytesInOutput": 2909 "bytesInOutput": 2913
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cumsum.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cumsum.js": {
"bytesInOutput": 1543 "bytesInOutput": 1543
@ -23752,7 +23766,7 @@
"bytesInOutput": 1238 "bytesInOutput": 1238
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthwiseConv2dNative.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthwiseConv2dNative.js": {
"bytesInOutput": 2073 "bytesInOutput": 2081
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthwiseConv2dNativeBackpropFilter.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthwiseConv2dNativeBackpropFilter.js": {
"bytesInOutput": 1646 "bytesInOutput": 1646
@ -23788,7 +23802,7 @@
"bytesInOutput": 169 "bytesInOutput": 169
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/fft_utils.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/fft_utils.js": {
"bytesInOutput": 7749 "bytesInOutput": 7748
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FFT.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FFT.js": {
"bytesInOutput": 621 "bytesInOutput": 621
@ -23863,10 +23877,10 @@
"bytesInOutput": 654 "bytesInOutput": 654
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPool3DGrad.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPool3DGrad.js": {
"bytesInOutput": 2399 "bytesInOutput": 2412
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolGrad.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolGrad.js": {
"bytesInOutput": 1813 "bytesInOutput": 1826
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolWithArgmax_impl.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolWithArgmax_impl.js": {
"bytesInOutput": 318 "bytesInOutput": 318
@ -23887,10 +23901,10 @@
"bytesInOutput": 1144 "bytesInOutput": 1144
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Mod.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Mod.js": {
"bytesInOutput": 250 "bytesInOutput": 251
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Multinomial.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Multinomial.js": {
"bytesInOutput": 1224 "bytesInOutput": 1228
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Softmax.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Softmax.js": {
"bytesInOutput": 1336 "bytesInOutput": 1336
@ -23938,7 +23952,7 @@
"bytesInOutput": 1868 "bytesInOutput": 1868
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeNearestNeighborGrad.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeNearestNeighborGrad.js": {
"bytesInOutput": 2137 "bytesInOutput": 2145
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Reverse.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Reverse.js": {
"bytesInOutput": 648 "bytesInOutput": 648
@ -23947,7 +23961,7 @@
"bytesInOutput": 1663 "bytesInOutput": 1663
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Round.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Round.js": {
"bytesInOutput": 218 "bytesInOutput": 217
}, },
"node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Scatter_impl.js": { "node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Scatter_impl.js": {
"bytesInOutput": 877 "bytesInOutput": 877
@ -24028,7 +24042,7 @@
"bytesInOutput": 2847 "bytesInOutput": 2847
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/webgl_util.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/webgl_util.js": {
"bytesInOutput": 14129 "bytesInOutput": 14084
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/flags_webgl.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/flags_webgl.js": {
"bytesInOutput": 2601 "bytesInOutput": 2601
@ -24061,7 +24075,7 @@
"bytesInOutput": 6616 "bytesInOutput": 6616
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_context.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_context.js": {
"bytesInOutput": 12214 "bytesInOutput": 12216
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/shader_compiler.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/shader_compiler.js": {
"bytesInOutput": 33777 "bytesInOutput": 33777
@ -24079,13 +24093,13 @@
"bytesInOutput": 1943 "bytesInOutput": 1943
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/reshape_packed_gpu.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/reshape_packed_gpu.js": {
"bytesInOutput": 1280 "bytesInOutput": 1279
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/texture_manager.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/texture_manager.js": {
"bytesInOutput": 6035 "bytesInOutput": 6044
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/unaryop_gpu.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/unaryop_gpu.js": {
"bytesInOutput": 594 "bytesInOutput": 599
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/unaryop_packed_gpu.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/unaryop_packed_gpu.js": {
"bytesInOutput": 1190 "bytesInOutput": 1190
@ -24094,7 +24108,7 @@
"bytesInOutput": 560 "bytesInOutput": 560
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/backend_webgl.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/backend_webgl.js": {
"bytesInOutput": 20033 "bytesInOutput": 20045
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/version.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/version.js": {
"bytesInOutput": 21 "bytesInOutput": 21
@ -24106,10 +24120,10 @@
"bytesInOutput": 0 "bytesInOutput": 0
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/binaryop_gpu.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/binaryop_gpu.js": {
"bytesInOutput": 480 "bytesInOutput": 485
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/binaryop_packed_gpu.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/binaryop_packed_gpu.js": {
"bytesInOutput": 1803 "bytesInOutput": 1808
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Identity.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Identity.js": {
"bytesInOutput": 232 "bytesInOutput": 232
@ -24274,7 +24288,7 @@
"bytesInOutput": 1379 "bytesInOutput": 1379
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Bincount.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Bincount.js": {
"bytesInOutput": 417 "bytesInOutput": 397
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NotEqual.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NotEqual.js": {
"bytesInOutput": 181 "bytesInOutput": 181
@ -24316,7 +24330,7 @@
"bytesInOutput": 276 "bytesInOutput": 276
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat_impl.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat_impl.js": {
"bytesInOutput": 2435 "bytesInOutput": 2425
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat.js": {
"bytesInOutput": 677 "bytesInOutput": 677
@ -24328,7 +24342,7 @@
"bytesInOutput": 2022 "bytesInOutput": 2022
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2D_impl.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2D_impl.js": {
"bytesInOutput": 4688 "bytesInOutput": 4687
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2D.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2D.js": {
"bytesInOutput": 1083 "bytesInOutput": 1083
@ -24361,16 +24375,16 @@
"bytesInOutput": 3046 "bytesInOutput": 3046
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/CropAndResize.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/CropAndResize.js": {
"bytesInOutput": 405 "bytesInOutput": 406
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/cumsum_gpu.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/cumsum_gpu.js": {
"bytesInOutput": 1581 "bytesInOutput": 1585
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cumsum.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cumsum.js": {
"bytesInOutput": 1532 "bytesInOutput": 1532
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DenseBincount.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DenseBincount.js": {
"bytesInOutput": 818 "bytesInOutput": 798
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/depth_to_space_gpu.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/depth_to_space_gpu.js": {
"bytesInOutput": 1259 "bytesInOutput": 1259
@ -24382,10 +24396,10 @@
"bytesInOutput": 2765 "bytesInOutput": 2765
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_packed_gpu_depthwise.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_packed_gpu_depthwise.js": {
"bytesInOutput": 7679 "bytesInOutput": 7672
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNative.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNative.js": {
"bytesInOutput": 940 "bytesInOutput": 939
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_backprop_gpu_depthwise.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_backprop_gpu_depthwise.js": {
"bytesInOutput": 3142 "bytesInOutput": 3142
@ -24463,7 +24477,7 @@
"bytesInOutput": 1174 "bytesInOutput": 1174
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels.js": {
"bytesInOutput": 1276 "bytesInOutput": 1368
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FusedConv2D.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FusedConv2D.js": {
"bytesInOutput": 1933 "bytesInOutput": 1933
@ -24472,7 +24486,7 @@
"bytesInOutput": 1850 "bytesInOutput": 1850
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/gather_nd_gpu.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/gather_nd_gpu.js": {
"bytesInOutput": 733 "bytesInOutput": 737
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GatherNd.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GatherNd.js": {
"bytesInOutput": 960 "bytesInOutput": 960
@ -24748,7 +24762,7 @@
"bytesInOutput": 752 "bytesInOutput": 752
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SplitV.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SplitV.js": {
"bytesInOutput": 555 "bytesInOutput": 557
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sqrt.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sqrt.js": {
"bytesInOutput": 135 "bytesInOutput": 135
@ -24778,10 +24792,10 @@
"bytesInOutput": 833 "bytesInOutput": 833
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tile.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tile.js": {
"bytesInOutput": 510 "bytesInOutput": 500
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/TopK.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/TopK.js": {
"bytesInOutput": 454 "bytesInOutput": 444
}, },
"node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Unique.js": { "node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Unique.js": {
"bytesInOutput": 522 "bytesInOutput": 522
@ -25014,6 +25028,9 @@
"node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/RotateWithOffset.js": { "node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/RotateWithOffset.js": {
"bytesInOutput": 1106 "bytesInOutput": 1106
}, },
"node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Round.js": {
"bytesInOutput": 48
},
"node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Rsqrt.js": { "node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Rsqrt.js": {
"bytesInOutput": 48 "bytesInOutput": 48
}, },
@ -25036,7 +25053,7 @@
"bytesInOutput": 612 "bytesInOutput": 612
}, },
"node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SplitV.js": { "node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SplitV.js": {
"bytesInOutput": 546 "bytesInOutput": 547
}, },
"node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sqrt.js": { "node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sqrt.js": {
"bytesInOutput": 46 "bytesInOutput": 46
@ -25072,16 +25089,16 @@
"bytesInOutput": 242 "bytesInOutput": 242
}, },
"node_modules/@tensorflow/tfjs-backend-wasm/dist/register_all_kernels.js": { "node_modules/@tensorflow/tfjs-backend-wasm/dist/register_all_kernels.js": {
"bytesInOutput": 1412 "bytesInOutput": 1425
}, },
"node_modules/@tensorflow/tfjs-backend-wasm/dist/flags_wasm.js": { "node_modules/@tensorflow/tfjs-backend-wasm/dist/flags_wasm.js": {
"bytesInOutput": 494 "bytesInOutput": 494
}, },
"node_modules/@tensorflow/tfjs-backend-wasm/dist/backend_wasm.js": { "node_modules/@tensorflow/tfjs-backend-wasm/dist/backend_wasm.js": {
"bytesInOutput": 6440 "bytesInOutput": 6450
}, },
"node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.worker.js": { "node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.worker.js": {
"bytesInOutput": 3425 "bytesInOutput": 3430
}, },
"node_modules/@tensorflow/tfjs-backend-wasm/dist/version.js": { "node_modules/@tensorflow/tfjs-backend-wasm/dist/version.js": {
"bytesInOutput": 21 "bytesInOutput": 21
@ -25093,7 +25110,7 @@
"bytesInOutput": 0 "bytesInOutput": 0
} }
}, },
"bytes": 1565414 "bytes": 1566890
} }
} }
} }

View File

@ -9,6 +9,5 @@
</head> </head>
<body style="font-family: monospace; background: black; color: white; font-size: 16px; line-height: 22px; margin: 0;"> <body style="font-family: monospace; background: black; color: white; font-size: 16px; line-height: 22px; margin: 0;">
<div id="log"></div> <div id="log"></div>
</script>
</body> </body>
</html> </html>

View File

@ -110,7 +110,7 @@ async function main() {
log('FaceAPI Test'); log('FaceAPI Test');
// if you want to use wasm backend location for wasm binaries must be specified // if you want to use wasm backend location for wasm binaries must be specified
// await faceapi.tf.setWasmPaths('../node_modules/@tensorflow/tfjs-backend-wasm/dist/') // await faceapi.tf.setWasmPaths('../node_modules/@tensorflow/tfjs-backend-wasm/dist/');
// await faceapi.tf.setBackend('wasm'); // await faceapi.tf.setBackend('wasm');
// default is webgl backend // default is webgl backend

15
example/webcam.html Normal file
View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>OpenImages Test</title>
<meta http-equiv="content-type">
<meta content="text/html">
<meta charset="UTF-8">
<script src="./webcam.js" type="module"></script>
</head>
<body style="font-family: monospace; background: black; color: white; font-size: 16px; line-height: 22px; margin: 0;">
<video id="video" playsinline class="video"></video>
<canvas id="canvas" class="canvas" style="position: fixed; top: 0; left: 0; z-index: 10"></canvas>
<div id="log"></div>
</body>
</html>

173
example/webcam.js Normal file
View File

@ -0,0 +1,173 @@
import * as faceapi from '../dist/face-api.esm.js';
// configuration options
const modelPath = 'https://vladmandic.github.io/face-api/model/'; // path to model folder that will be loaded using http
const minScore = 0.1; // minimum score
const maxResults = 5; // maximum number of results to return
let optionsSSDMobileNet;
// helper function to pretty-print json object to string
function str(json) {
let text = '<font color="lightblue">';
text += json ? JSON.stringify(json).replace(/{|}|"|\[|\]/g, '').replace(/,/g, ', ') : '';
text += '</font>';
return text;
}
// helper function to print strings to html document as a log
function log(...txt) {
// eslint-disable-next-line no-console
console.log(...txt);
// @ts-ignore
document.getElementById('log').innerHTML += `<br>${txt}`;
}
// helper function to draw detected faces
function drawFaces(canvas, data, fps) {
const ctx = canvas.getContext('2d');
if (!ctx) return;
ctx.clearRect(0, 0, canvas.width, canvas.height);
// draw title
ctx.font = '1.4rem sans-serif';
ctx.fillStyle = 'white';
ctx.fillText(`FPS: ${fps}`, 10, 25);
for (const person of data) {
// draw box around each face
ctx.lineWidth = 3;
ctx.strokeStyle = 'deepskyblue';
ctx.fillStyle = 'deepskyblue';
ctx.globalAlpha = 0.4;
ctx.beginPath();
ctx.rect(person.detection.box.x, person.detection.box.y, person.detection.box.width, person.detection.box.height);
ctx.stroke();
ctx.globalAlpha = 1;
// const expression = person.expressions.sort((a, b) => Object.values(a)[0] - Object.values(b)[0]);
const expression = Object.entries(person.expressions).sort((a, b) => b[1] - a[1]);
ctx.fillText(`gender ${Math.round(100 * person.genderProbability)}% ${person.gender}`, person.detection.box.x, person.detection.box.y - 45);
ctx.fillText(`expression ${Math.round(100 * expression[0][1])}% ${expression[0][0]}`, person.detection.box.x, person.detection.box.y - 25);
ctx.fillText(`age ${Math.round(person.age)} years`, person.detection.box.x, person.detection.box.y - 5);
// draw face points for each face
ctx.fillStyle = 'lightblue';
ctx.globalAlpha = 0.5;
const pointSize = 2;
for (const pt of person.landmarks.positions) {
ctx.beginPath();
ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI);
ctx.fill();
}
}
}
async function detectVideo(video, canvas) {
const t0 = performance.now();
faceapi
.detectAllFaces(video, optionsSSDMobileNet)
.withFaceLandmarks()
.withFaceExpressions()
// .withFaceDescriptors()
.withAgeAndGender()
.then((result) => {
const fps = 1000 / (performance.now() - t0);
drawFaces(canvas, result, fps.toLocaleString());
requestAnimationFrame(() => detectVideo(video, canvas));
return true;
})
.catch((err) => {
log(`Detect Error: ${str(err)}`);
return false;
});
}
// just initialize everything and call main function
async function setupCamera() {
const video = document.getElementById('video');
const canvas = document.getElementById('canvas');
if (!video || !canvas) return null;
let msg = '';
log('Setting up camera');
// setup webcam. note that navigator.mediaDevices requires that page is accessed via https
if (!navigator.mediaDevices) {
log('Camera Error: access not supported');
return null;
}
let stream;
const constraints = {
audio: false,
video: { facingMode: 'user', resizeMode: 'crop-and-scale' },
};
if (window.innerWidth > window.innerHeight) constraints.video.width = { ideal: window.innerWidth };
else constraints.video.height = { ideal: window.innerHeight };
try {
stream = await navigator.mediaDevices.getUserMedia(constraints);
} catch (err) {
if (err.name === 'PermissionDeniedError' || err.name === 'NotAllowedError') msg = 'camera permission denied';
else if (err.name === 'SourceUnavailableError') msg = 'camera not available';
log(`Camera Error: ${msg}: ${err.message || err}`);
return null;
}
// @ts-ignore
if (stream) video.srcObject = stream;
else {
log('Camera Error: stream empty');
return null;
}
const track = stream.getVideoTracks()[0];
const settings = track.getSettings();
log(`Camera active: ${track.label} ${str(constraints)}`);
log(`Camera settings: ${str(settings)}`);
return new Promise((resolve) => {
video.onloadeddata = async () => {
// @ts-ignore
canvas.width = video.videoWidth;
// @ts-ignore
canvas.height = video.videoHeight;
// @ts-ignore
video.play();
detectVideo(video, canvas);
resolve(true);
};
});
}
async function setupFaceAPI() {
// load face-api models
log('Models loading');
await faceapi.nets.tinyFaceDetector.load(modelPath);
await faceapi.nets.ssdMobilenetv1.load(modelPath);
await faceapi.nets.ageGenderNet.load(modelPath);
await faceapi.nets.faceLandmark68Net.load(modelPath);
await faceapi.nets.faceRecognitionNet.load(modelPath);
await faceapi.nets.faceExpressionNet.load(modelPath);
optionsSSDMobileNet = new faceapi.SsdMobilenetv1Options({ minConfidence: minScore, maxResults });
// check tf engine state
const engine = await faceapi.tf.engine();
log(`Models loaded: ${str(engine.state)}`);
}
async function main() {
// initialize tfjs
log('FaceAPI WebCam Test');
// if you want to use wasm backend location for wasm binaries must be specified
// await faceapi.tf.setWasmPaths('../node_modules/@tensorflow/tfjs-backend-wasm/dist/');
// await faceapi.tf.setBackend('wasm');
// default is webgl backend
await faceapi.tf.setBackend('webgl');
await faceapi.tf.enableProdMode();
await faceapi.tf.ENV.set('DEBUG', false);
await faceapi.tf.ready();
// check version
log(`Version: TensorFlow/JS ${str(faceapi.tf?.version_core || '(not loaded)')} FaceAPI ${str(faceapi?.version || '(not loaded)')} Backend: ${str(faceapi.tf?.getBackend() || '(not loaded)')}`);
log(`Flags: ${str(faceapi.tf.ENV.flags)}`);
setupFaceAPI();
setupCamera();
}
// start processing as soon as page is loaded
window.onload = main;

BIN
favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

265
package-lock.json generated
View File

@ -156,17 +156,17 @@
} }
}, },
"@tensorflow/tfjs": { "@tensorflow/tfjs": {
"version": "2.8.2", "version": "2.8.3",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-2.8.2.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-2.8.3.tgz",
"integrity": "sha512-tn1OE/totTuLl2dl7girxwNik2D2O9ZknghjgJvRZegqE/8FO/ix7mo4ICzMq9cHpW/bVCFKCwqu1PjAx3lkzw==", "integrity": "sha512-wJYOaEW9V2woCvTs2vqOtYdb1fr6koVO9YiMXroeRP4BQS3o7x17HtguSVQyQt1mROORbJ1Ji6n63Bc1mZa4rQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@tensorflow/tfjs-backend-cpu": "2.8.2", "@tensorflow/tfjs-backend-cpu": "2.8.3",
"@tensorflow/tfjs-backend-webgl": "2.8.2", "@tensorflow/tfjs-backend-webgl": "2.8.3",
"@tensorflow/tfjs-converter": "2.8.2", "@tensorflow/tfjs-converter": "2.8.3",
"@tensorflow/tfjs-core": "2.8.2", "@tensorflow/tfjs-core": "2.8.3",
"@tensorflow/tfjs-data": "2.8.2", "@tensorflow/tfjs-data": "2.8.3",
"@tensorflow/tfjs-layers": "2.8.2", "@tensorflow/tfjs-layers": "2.8.3",
"argparse": "^1.0.10", "argparse": "^1.0.10",
"chalk": "^4.1.0", "chalk": "^4.1.0",
"core-js": "3", "core-js": "3",
@ -175,9 +175,9 @@
} }
}, },
"@tensorflow/tfjs-backend-cpu": { "@tensorflow/tfjs-backend-cpu": {
"version": "2.8.2", "version": "2.8.3",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-2.8.2.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-2.8.3.tgz",
"integrity": "sha512-/puqtocadSmwW+ntiuW6UMhcYk1laMTr1hoWqyvMinaVwxSZwOyfRqDyF9snxHLfCW3uS8HX02LRqh9B4AzD0A==", "integrity": "sha512-kMUONKdIknwacUZPR1hIKVba1F8gyiYr7NpzNOf/L7y5li87iRVBcMtYoNn/dEfJ8R/wO6SDeYlDRuDcXXNFlA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/seedrandom": "2.4.27", "@types/seedrandom": "2.4.27",
@ -185,22 +185,22 @@
} }
}, },
"@tensorflow/tfjs-backend-wasm": { "@tensorflow/tfjs-backend-wasm": {
"version": "2.8.2", "version": "2.8.3",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-wasm/-/tfjs-backend-wasm-2.8.2.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-wasm/-/tfjs-backend-wasm-2.8.3.tgz",
"integrity": "sha512-smt06cLHJMmiOu0laNhS1xOug9EtWz0Orm/MBELFwYfmJC5u95wAX83Ix9zBEu/wsyP0PFAdX4zEN8BCaez7kA==", "integrity": "sha512-YPTyHmQuOQM8j1WsICbo78Y/yFUYKj05ZF6yaQWBaTg2YSHLjrkoI1a37P0M1ELoHU7CV6hKigQJG3zhM5SJvg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@tensorflow/tfjs-backend-cpu": "2.8.2", "@tensorflow/tfjs-backend-cpu": "2.8.3",
"@types/emscripten": "~0.0.34" "@types/emscripten": "~0.0.34"
} }
}, },
"@tensorflow/tfjs-backend-webgl": { "@tensorflow/tfjs-backend-webgl": {
"version": "2.8.2", "version": "2.8.3",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-2.8.2.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-2.8.3.tgz",
"integrity": "sha512-jfc2mjfwqMvjXDCYvrXwGY1i9MK+1P4COiCnT1r5rMl6IssSNH2WqvaqJFtRWGtgp/QiBY69B6wM6qSJIkOSeg==", "integrity": "sha512-II+g0LOcudD2NA4X1990EfrCQhkPyJcgoCjRbV8Y4JBJn5kv6SyOGiE15exyQBqTMBxNTwjXukUf9N4x89Lgag==",
"dev": true, "dev": true,
"requires": { "requires": {
"@tensorflow/tfjs-backend-cpu": "2.8.2", "@tensorflow/tfjs-backend-cpu": "2.8.3",
"@types/offscreencanvas": "~2019.3.0", "@types/offscreencanvas": "~2019.3.0",
"@types/seedrandom": "2.4.27", "@types/seedrandom": "2.4.27",
"@types/webgl-ext": "0.0.30", "@types/webgl-ext": "0.0.30",
@ -209,15 +209,15 @@
} }
}, },
"@tensorflow/tfjs-converter": { "@tensorflow/tfjs-converter": {
"version": "2.8.2", "version": "2.8.3",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-2.8.2.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-2.8.3.tgz",
"integrity": "sha512-JJPrS2SClMEnvoC/vBOUlWa03UBl6ZZRIeddjgTo+V1CJyvtYr+njySz9lX5HoCBtrcrLkMcd+1IYFKtgFH1Cg==", "integrity": "sha512-Z107Q8/aNyhBd9E1lN6+aZg/uBWvmFSV8AmZrt7MfvDeAPOSyNTj0L9xYF5fxjlWb9ligLlOIbPkTRJ37vsXYw==",
"dev": true "dev": true
}, },
"@tensorflow/tfjs-core": { "@tensorflow/tfjs-core": {
"version": "2.8.2", "version": "2.8.3",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-2.8.2.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-2.8.3.tgz",
"integrity": "sha512-r3Df7phzNa80uoTtlcBGJ/rf+kweSKgN1/VmBT7b53womzoYlw3fQHlZ1WKUbHL9kOf2Zt4y2PPcBiKUQYQC+Q==", "integrity": "sha512-wbVuT7clJZIvtYcJPtIX4M49xCC/ccWpHIN+jRWoSBZxR3PJJ9pkh36nBq65aaBsdr5SL6v02oQ2vc7jfjdI3Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/offscreencanvas": "~2019.3.0", "@types/offscreencanvas": "~2019.3.0",
@ -228,9 +228,9 @@
} }
}, },
"@tensorflow/tfjs-data": { "@tensorflow/tfjs-data": {
"version": "2.8.2", "version": "2.8.3",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-2.8.2.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-2.8.3.tgz",
"integrity": "sha512-hC/lQe65YCGx0GVWDR/Wf4/B2E9HfWwegWmQ0RzVzcmakF3Y4tOdLRo5vTaar80Un374Uu3ARG/h7YBvneKFCQ==", "integrity": "sha512-Rxd4NfKvFQODf0+pMAoCuYWFf8XbaxUbr2gC/06uFnRXrWiTCuKWCSOqAg0lx7V6FLkscmKZNTD7iz0kAr32Og==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/node-fetch": "^2.1.2", "@types/node-fetch": "^2.1.2",
@ -238,19 +238,19 @@
} }
}, },
"@tensorflow/tfjs-layers": { "@tensorflow/tfjs-layers": {
"version": "2.8.2", "version": "2.8.3",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-2.8.2.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-2.8.3.tgz",
"integrity": "sha512-bEYwMeBuiWl+fB5fBmhqwxjjbwBme7KgTDCquOyHoP1P01HZNBAmyJIDCtpqGHBJuGHBOpFga/DBl+9yF7gR6g==", "integrity": "sha512-nl3GnLCqofFnswcPjXV+u5P7GLUCQh0xFKVXnjIGPFIemttQNG0BYSVL18EIV53fnMEv9RZ9mC4DF2LgvWg3yg==",
"dev": true "dev": true
}, },
"@tensorflow/tfjs-node": { "@tensorflow/tfjs-node": {
"version": "2.8.2", "version": "2.8.3",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-2.8.2.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-2.8.3.tgz",
"integrity": "sha512-y6b2kv/esRJmeQuucOGYlBVqHH+e/w6O5aD5n0jmK355wxCsulsqCLGnKTK0i1jWYLYL64Osl7VXfq+IaKxS7w==", "integrity": "sha512-CLsFew+kAvfQsgbHVhYz7NKztFtWHkHS9A7iYELMfY4tMkKQ4T+l0jkKcwouvDrUxJMVYnFeOGUQCRHKflxrbw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@tensorflow/tfjs": "2.8.2", "@tensorflow/tfjs": "2.8.3",
"@tensorflow/tfjs-core": "2.8.2", "@tensorflow/tfjs-core": "2.8.3",
"adm-zip": "^0.4.11", "adm-zip": "^0.4.11",
"google-protobuf": "^3.9.2", "google-protobuf": "^3.9.2",
"https-proxy-agent": "^2.2.1", "https-proxy-agent": "^2.2.1",
@ -272,13 +272,13 @@
} }
}, },
"@tensorflow/tfjs-node-gpu": { "@tensorflow/tfjs-node-gpu": {
"version": "2.8.2", "version": "2.8.3",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node-gpu/-/tfjs-node-gpu-2.8.2.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node-gpu/-/tfjs-node-gpu-2.8.3.tgz",
"integrity": "sha512-HqoUAD5Dd7fc9TyCPjfSzE8AmMXKgZPTr/ESM29sCR/SqD6VNG4x3kzb9XM/IH5Yi2UiX1cL/AhX0f/nP2OMqQ==", "integrity": "sha512-/JVBQ54bIh/okr8jAsRpumxjT7W0q65rEVBJKhzsvDceGRn4VMauyxpho2s8fmwNX+0Rgr3CRID9j+fLYRRsBQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@tensorflow/tfjs": "2.8.2", "@tensorflow/tfjs": "2.8.3",
"@tensorflow/tfjs-core": "2.8.2", "@tensorflow/tfjs-core": "2.8.3",
"adm-zip": "^0.4.11", "adm-zip": "^0.4.11",
"google-protobuf": "^3.9.2", "google-protobuf": "^3.9.2",
"https-proxy-agent": "^2.2.1", "https-proxy-agent": "^2.2.1",
@ -318,9 +318,9 @@
"dev": true "dev": true
}, },
"@types/node": { "@types/node": {
"version": "14.14.19", "version": "14.14.20",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.19.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz",
"integrity": "sha512-4nhBPStMK04rruRVtVc6cDqhu7S9GZai0fpXgPXrFpcPX6Xul8xnrjSdGB4KPBVYG/R5+fXWdCM8qBoiULWGPQ==", "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==",
"dev": true "dev": true
}, },
"@types/node-fetch": { "@types/node-fetch": {
@ -358,13 +358,13 @@
"dev": true "dev": true
}, },
"@typescript-eslint/eslint-plugin": { "@typescript-eslint/eslint-plugin": {
"version": "4.11.1", "version": "4.12.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.11.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.12.0.tgz",
"integrity": "sha512-fABclAX2QIEDmTMk6Yd7Muv1CzFLwWM4505nETzRHpP3br6jfahD9UUJkhnJ/g2m7lwfz8IlswcwGGPGiq9exw==", "integrity": "sha512-wHKj6q8s70sO5i39H2g1gtpCXCvjVszzj6FFygneNFyIAxRvNSVz9GML7XpqrB9t7hNutXw+MHnLN/Ih6uyB8Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"@typescript-eslint/experimental-utils": "4.11.1", "@typescript-eslint/experimental-utils": "4.12.0",
"@typescript-eslint/scope-manager": "4.11.1", "@typescript-eslint/scope-manager": "4.12.0",
"debug": "^4.1.1", "debug": "^4.1.1",
"functional-red-black-tree": "^1.0.1", "functional-red-black-tree": "^1.0.1",
"regexpp": "^3.0.0", "regexpp": "^3.0.0",
@ -399,28 +399,28 @@
} }
}, },
"@typescript-eslint/experimental-utils": { "@typescript-eslint/experimental-utils": {
"version": "4.11.1", "version": "4.12.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.11.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.12.0.tgz",
"integrity": "sha512-mAlWowT4A6h0TC9F+J5pdbEhjNiEMO+kqPKQ4sc3fVieKL71dEqfkKgtcFVSX3cjSBwYwhImaQ/mXQF0oaI38g==", "integrity": "sha512-MpXZXUAvHt99c9ScXijx7i061o5HEjXltO+sbYfZAAHxv3XankQkPaNi5myy0Yh0Tyea3Hdq1pi7Vsh0GJb0fA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/json-schema": "^7.0.3", "@types/json-schema": "^7.0.3",
"@typescript-eslint/scope-manager": "4.11.1", "@typescript-eslint/scope-manager": "4.12.0",
"@typescript-eslint/types": "4.11.1", "@typescript-eslint/types": "4.12.0",
"@typescript-eslint/typescript-estree": "4.11.1", "@typescript-eslint/typescript-estree": "4.12.0",
"eslint-scope": "^5.0.0", "eslint-scope": "^5.0.0",
"eslint-utils": "^2.0.0" "eslint-utils": "^2.0.0"
} }
}, },
"@typescript-eslint/parser": { "@typescript-eslint/parser": {
"version": "4.11.1", "version": "4.12.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.11.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.12.0.tgz",
"integrity": "sha512-BJ3jwPQu1jeynJ5BrjLuGfK/UJu6uwHxJ/di7sanqmUmxzmyIcd3vz58PMR7wpi8k3iWq2Q11KMYgZbUpRoIPw==", "integrity": "sha512-9XxVADAo9vlfjfoxnjboBTxYOiNY93/QuvcPgsiKvHxW6tOZx1W4TvkIQ2jB3k5M0pbFP5FlXihLK49TjZXhuQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@typescript-eslint/scope-manager": "4.11.1", "@typescript-eslint/scope-manager": "4.12.0",
"@typescript-eslint/types": "4.11.1", "@typescript-eslint/types": "4.12.0",
"@typescript-eslint/typescript-estree": "4.11.1", "@typescript-eslint/typescript-estree": "4.12.0",
"debug": "^4.1.1" "debug": "^4.1.1"
}, },
"dependencies": { "dependencies": {
@ -442,29 +442,29 @@
} }
}, },
"@typescript-eslint/scope-manager": { "@typescript-eslint/scope-manager": {
"version": "4.11.1", "version": "4.12.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.11.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.12.0.tgz",
"integrity": "sha512-Al2P394dx+kXCl61fhrrZ1FTI7qsRDIUiVSuN6rTwss6lUn8uVO2+nnF4AvO0ug8vMsy3ShkbxLu/uWZdTtJMQ==", "integrity": "sha512-QVf9oCSVLte/8jvOsxmgBdOaoe2J0wtEmBr13Yz0rkBNkl5D8bfnf6G4Vhox9qqMIoG7QQoVwd2eG9DM/ge4Qg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@typescript-eslint/types": "4.11.1", "@typescript-eslint/types": "4.12.0",
"@typescript-eslint/visitor-keys": "4.11.1" "@typescript-eslint/visitor-keys": "4.12.0"
} }
}, },
"@typescript-eslint/types": { "@typescript-eslint/types": {
"version": "4.11.1", "version": "4.12.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.11.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.12.0.tgz",
"integrity": "sha512-5kvd38wZpqGY4yP/6W3qhYX6Hz0NwUbijVsX2rxczpY6OXaMxh0+5E5uLJKVFwaBM7PJe1wnMym85NfKYIh6CA==", "integrity": "sha512-N2RhGeheVLGtyy+CxRmxdsniB7sMSCfsnbh8K/+RUIXYYq3Ub5+sukRCjVE80QerrUBvuEvs4fDhz5AW/pcL6g==",
"dev": true "dev": true
}, },
"@typescript-eslint/typescript-estree": { "@typescript-eslint/typescript-estree": {
"version": "4.11.1", "version": "4.12.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.11.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.12.0.tgz",
"integrity": "sha512-tC7MKZIMRTYxQhrVAFoJq/DlRwv1bnqA4/S2r3+HuHibqvbrPcyf858lNzU7bFmy4mLeIHFYr34ar/1KumwyRw==", "integrity": "sha512-gZkFcmmp/CnzqD2RKMich2/FjBTsYopjiwJCroxqHZIY11IIoN0l5lKqcgoAPKHt33H2mAkSfvzj8i44Jm7F4w==",
"dev": true, "dev": true,
"requires": { "requires": {
"@typescript-eslint/types": "4.11.1", "@typescript-eslint/types": "4.12.0",
"@typescript-eslint/visitor-keys": "4.11.1", "@typescript-eslint/visitor-keys": "4.12.0",
"debug": "^4.1.1", "debug": "^4.1.1",
"globby": "^11.0.1", "globby": "^11.0.1",
"is-glob": "^4.0.1", "is-glob": "^4.0.1",
@ -500,12 +500,12 @@
} }
}, },
"@typescript-eslint/visitor-keys": { "@typescript-eslint/visitor-keys": {
"version": "4.11.1", "version": "4.12.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.11.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.12.0.tgz",
"integrity": "sha512-IrlBhD9bm4bdYcS8xpWarazkKXlE7iYb1HzRuyBP114mIaj5DJPo11Us1HgH60dTt41TCZXMaTCAW+OILIYPOg==", "integrity": "sha512-hVpsLARbDh4B9TKYz5cLbcdMIOAoBYgFPCSP9FFS/liSF+b33gVNq8JHY3QGhHNVz85hObvL7BEYLlgx553WCw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@typescript-eslint/types": "4.11.1", "@typescript-eslint/types": "4.12.0",
"eslint-visitor-keys": "^2.0.0" "eslint-visitor-keys": "^2.0.0"
} }
}, },
@ -580,6 +580,16 @@
"color-convert": "^2.0.1" "color-convert": "^2.0.1"
} }
}, },
"anymatch": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
"integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
"dev": true,
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
}
},
"aproba": { "aproba": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
@ -653,6 +663,12 @@
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true "dev": true
}, },
"binary-extensions": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
"integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
"dev": true
},
"brace-expansion": { "brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@ -673,13 +689,13 @@
} }
}, },
"call-bind": { "call-bind": {
"version": "1.0.0", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.1.tgz",
"integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", "integrity": "sha512-tvAvUwNcRikl3RVF20X9lsYmmepsovzTWeJiXjO0PkJp15uy/6xKFZOQtuiSULwYW+6ToZBprphCgWXC2dSgcQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"function-bind": "^1.1.1", "function-bind": "^1.1.1",
"get-intrinsic": "^1.0.0" "get-intrinsic": "^1.0.2"
} }
}, },
"callsites": { "callsites": {
@ -698,6 +714,22 @@
"supports-color": "^7.1.0" "supports-color": "^7.1.0"
} }
}, },
"chokidar": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.0.tgz",
"integrity": "sha512-JgQM9JS92ZbFR4P90EvmzNpSGhpPBGBSj10PILeDyYFwp4h2/D9OM03wsJ4zW1fEp4ka2DGrnUeD7FuvQ2aZ2Q==",
"dev": true,
"requires": {
"anymatch": "~3.1.1",
"braces": "~3.0.2",
"fsevents": "~2.3.1",
"glob-parent": "~5.1.0",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.5.0"
}
},
"chownr": { "chownr": {
"version": "1.1.4", "version": "1.1.4",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
@ -929,9 +961,9 @@
} }
}, },
"esbuild": { "esbuild": {
"version": "0.8.29", "version": "0.8.31",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.29.tgz", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.31.tgz",
"integrity": "sha512-UDsEoeXuctVgG2hEts1Hwq2jYDGqV7nksEHEZaiCy2v+lXF5ButX4ErPAJAFi5ZNKKW+6Pom93pArV7hki6HnQ==", "integrity": "sha512-7EIU0VdUxltwivjVezX3HgeNzeIVR1snkrAo57WdUnuBMykdzin5rTrxwCDM6xQqj0RL/HjOEm3wFr2ijHKeaA==",
"dev": true "dev": true
}, },
"escalade": { "escalade": {
@ -1404,6 +1436,13 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true "dev": true
}, },
"fsevents": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz",
"integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==",
"dev": true,
"optional": true
},
"function-bind": { "function-bind": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@ -1519,9 +1558,9 @@
} }
}, },
"globby": { "globby": {
"version": "11.0.1", "version": "11.0.2",
"resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz",
"integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==",
"dev": true, "dev": true,
"requires": { "requires": {
"array-union": "^2.1.0", "array-union": "^2.1.0",
@ -1655,6 +1694,15 @@
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
"dev": true "dev": true
}, },
"is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"requires": {
"binary-extensions": "^2.0.0"
}
},
"is-callable": { "is-callable": {
"version": "1.2.2", "version": "1.2.2",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
@ -1930,9 +1978,9 @@
"dev": true "dev": true
}, },
"needle": { "needle": {
"version": "2.5.2", "version": "2.6.0",
"resolved": "https://registry.npmjs.org/needle/-/needle-2.5.2.tgz", "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz",
"integrity": "sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==", "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==",
"dev": true, "dev": true,
"requires": { "requires": {
"debug": "^3.2.6", "debug": "^3.2.6",
@ -1997,6 +2045,12 @@
"validate-npm-package-license": "^3.0.1" "validate-npm-package-license": "^3.0.1"
} }
}, },
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
},
"npm-bundled": { "npm-bundled": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz",
@ -2316,6 +2370,15 @@
"util-deprecate": "~1.0.1" "util-deprecate": "~1.0.1"
} }
}, },
"readdirp": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
"integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
"dev": true,
"requires": {
"picomatch": "^2.2.1"
}
},
"regenerator-runtime": { "regenerator-runtime": {
"version": "0.13.7", "version": "0.13.7",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
@ -2560,9 +2623,9 @@
} }
}, },
"table": { "table": {
"version": "6.0.6", "version": "6.0.7",
"resolved": "https://registry.npmjs.org/table/-/table-6.0.6.tgz", "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz",
"integrity": "sha512-OInCtPmDNieVBkVFi6C8RwU2S2H0h8mF3e3TQK4nreaUNCpooQUkI+A/KuEkm5FawfhWIfNqG+qfelVVR+V00g==", "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==",
"dev": true, "dev": true,
"requires": { "requires": {
"ajv": "^7.0.2", "ajv": "^7.0.2",
@ -2634,15 +2697,15 @@
} }
}, },
"tslib": { "tslib": {
"version": "2.0.3", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
"integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
"dev": true "dev": true
}, },
"tsutils": { "tsutils": {
"version": "3.17.1", "version": "3.19.1",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.19.1.tgz",
"integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", "integrity": "sha512-GEdoBf5XI324lu7ycad7s6laADfnAqCw6wLGI+knxvw9vsIYBaJfYdmeCEG3FMMUiSm3OGgNb+m6utsWf5h9Vw==",
"dev": true, "dev": true,
"requires": { "requires": {
"tslib": "^1.8.1" "tslib": "^1.8.1"

View File

@ -11,7 +11,8 @@
}, },
"scripts": { "scripts": {
"start": "node --trace-warnings example/node-singleprocess.js", "start": "node --trace-warnings example/node-singleprocess.js",
"build": "rimraf dist/* types/* && node ./build.js", "dev": "npm install && node server/dev.js",
"build": "rimraf dist/* types/* && node server/build.js",
"lint": "eslint src/**/*" "lint": "eslint src/**/*"
}, },
"keywords": [ "keywords": [
@ -40,14 +41,15 @@
"@vladmandic/pilogger": "^0.2.11" "@vladmandic/pilogger": "^0.2.11"
}, },
"devDependencies": { "devDependencies": {
"@tensorflow/tfjs": "^2.8.2", "@tensorflow/tfjs": "^2.8.3",
"@tensorflow/tfjs-backend-wasm": "^2.8.2", "@tensorflow/tfjs-backend-wasm": "^2.8.3",
"@tensorflow/tfjs-node": "^2.8.2", "@tensorflow/tfjs-node": "^2.8.3",
"@tensorflow/tfjs-node-gpu": "^2.8.2", "@tensorflow/tfjs-node-gpu": "^2.8.3",
"@types/node": "^14.14.19", "@types/node": "^14.14.20",
"@typescript-eslint/eslint-plugin": "^4.11.1", "@typescript-eslint/eslint-plugin": "^4.12.0",
"@typescript-eslint/parser": "^4.11.1", "@typescript-eslint/parser": "^4.12.0",
"esbuild": "^0.8.29", "chokidar": "^3.5.0",
"esbuild": "^0.8.31",
"eslint": "^7.17.0", "eslint": "^7.17.0",
"eslint-config-airbnb-base": "^14.2.1", "eslint-config-airbnb-base": "^14.2.1",
"eslint-plugin-import": "^2.22.1", "eslint-plugin-import": "^2.22.1",
@ -55,7 +57,7 @@
"eslint-plugin-node": "^11.1.0", "eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1", "eslint-plugin-promise": "^4.2.1",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"tslib": "^2.0.3", "tslib": "^2.1.0",
"typescript": "^4.1.3" "typescript": "^4.1.3"
} }
} }

147
server/dev.js Executable file
View File

@ -0,0 +1,147 @@
/*
micro http2 server with file monitoring and automatic app rebuild
- can process concurrent http requests
- monitors specified filed and folders for changes
- triggers library and application rebuild
- any build errors are immediately displayed and can be corrected without need for restart
- passthrough data compression
*/
const process = require('process');
const fs = require('fs');
const zlib = require('zlib');
const http = require('http');
const http2 = require('http2');
const path = require('path');
// eslint-disable-next-line node/no-unpublished-require, import/no-extraneous-dependencies
const chokidar = require('chokidar');
const log = require('@vladmandic/pilogger');
const build = require('./build.js');
// app configuration
// you can provide your server key and certificate or use provided self-signed ones
// self-signed certificate generated using:
// openssl req -x509 -newkey rsa:4096 -nodes -keyout https.key -out https.crt -days 365 -subj "/C=US/ST=Florida/L=Miami/O=@vladmandic"
// client app does not work without secure server since browsers enforce https for webcam access
const options = {
key: fs.readFileSync('server/https.key'),
cert: fs.readFileSync('server/https.crt'),
root: '..',
default: 'example/index.html',
httpPort: 8000,
httpsPort: 8001,
monitor: ['package.json', 'example', 'src'],
};
// just some predefined mime types
const mime = {
'.html': 'text/html',
'.js': 'text/javascript',
'.css': 'text/css',
'.json': 'application/json',
'.png': 'image/png',
'.jpg': 'image/jpg',
'.gif': 'image/gif',
'.ico': 'image/x-icon',
'.svg': 'image/svg+xml',
'.wav': 'audio/wav',
'.mp4': 'video/mp4',
'.woff': 'application/font-woff',
'.ttf': 'application/font-ttf',
'.wasm': 'application/wasm',
};
// watch filesystem for any changes and notify build when needed
async function watch() {
const watcher = chokidar.watch(options.monitor, {
persistent: true,
ignorePermissionErrors: false,
alwaysStat: false,
ignoreInitial: true,
followSymlinks: true,
usePolling: false,
useFsEvents: false,
atomic: true,
});
// single event handler for file add/change/delete
watcher
.on('add', (evt) => build.build(evt, 'add'))
.on('change', (evt) => build.build(evt, 'modify'))
.on('unlink', (evt) => build.build(evt, 'remove'))
.on('error', (err) => log.error(`Client watcher error: ${err}`))
.on('ready', () => log.state('Monitoring:', options.monitor));
}
// get file content for a valid url request
function handle(url) {
return new Promise((resolve) => {
let obj = { ok: false };
obj.file = url;
if (!fs.existsSync(obj.file)) resolve(null);
obj.stat = fs.statSync(obj.file);
if (obj.stat.isFile()) obj.ok = true;
if (!obj.ok && obj.stat.isDirectory()) {
obj.file = path.join(obj.file, options.default);
// @ts-ignore
obj = handle(obj.file);
}
resolve(obj);
});
}
// process http requests
async function httpRequest(req, res) {
handle(path.join(__dirname, options.root, decodeURI(req.url)))
.then((result) => {
// get original ip of requestor, regardless if it's behind proxy or not
// eslint-disable-next-line dot-notation
const forwarded = (req.headers['forwarded'] || '').match(/for="\[(.*)\]:/);
const ip = (Array.isArray(forwarded) ? forwarded[1] : null) || req.headers['x-forwarded-for'] || req.ip || req.socket.remoteAddress;
if (!result || !result.ok) {
res.writeHead(404, { 'Content-Type': 'text/html' });
res.end('Error 404: Not Found\n', 'utf-8');
log.warn(`${req.method}/${req.httpVersion}`, res.statusCode, req.url, ip);
} else {
const ext = String(path.extname(result.file)).toLowerCase();
const contentType = mime[ext] || 'application/octet-stream';
const accept = req.headers['accept-encoding'] ? req.headers['accept-encoding'].includes('br') : false; // does target accept brotli compressed data
res.writeHead(200, {
// 'Content-Length': result.stat.size, // not using as it's misleading for compressed streams
'Content-Language': 'en', 'Content-Type': contentType, 'Content-Encoding': accept ? 'br' : '', 'Last-Modified': result.stat.mtime, 'Cache-Control': 'no-cache', 'X-Powered-By': `NodeJS/${process.version}`,
});
const compress = zlib.createBrotliCompress({ params: { [zlib.constants.BROTLI_PARAM_QUALITY]: 5 } }); // instance of brotli compression with level 5
const stream = fs.createReadStream(result.file);
if (!accept) stream.pipe(res); // don't compress data
else stream.pipe(compress).pipe(res); // compress data
// alternative methods of sending data
/// 2. read stream and send by chunk
// const stream = fs.createReadStream(result.file);
// stream.on('data', (chunk) => res.write(chunk));
// stream.on('end', () => res.end());
// 3. read entire file and send it as blob
// const data = fs.readFileSync(result.file);
// res.write(data);
log.data(`${req.method}/${req.httpVersion}`, res.statusCode, contentType, result.stat.size, req.url, ip);
}
return null;
})
.catch((err) => log.error('handle error:', err));
}
// app main entry point
async function main() {
log.header();
await watch();
// @ts-ignore
const server1 = http.createServer(options, httpRequest);
server1.on('listening', () => log.state('HTTP server listening:', options.httpPort));
server1.listen(options.httpPort);
const server2 = http2.createSecureServer(options, httpRequest);
server2.on('listening', () => log.state('HTTP2 server listening:', options.httpsPort));
server2.listen(options.httpsPort);
await build.build('all', 'startup');
}
main();

31
server/https.crt Normal file
View File

@ -0,0 +1,31 @@
-----BEGIN CERTIFICATE-----
MIIFazCCA1OgAwIBAgIUKQKodDBJnuweJs5IcTyL4NIp3vgwDQYJKoZIhvcNAQEL
BQAwRTELMAkGA1UEBhMCVVMxEDAOBgNVBAgMB0Zsb3JpZGExDjAMBgNVBAcMBU1p
YW1pMRQwEgYDVQQKDAtAdmxhZG1hbmRpYzAeFw0yMDExMDcxNTE3NDNaFw0yMTEx
MDcxNTE3NDNaMEUxCzAJBgNVBAYTAlVTMRAwDgYDVQQIDAdGbG9yaWRhMQ4wDAYD
VQQHDAVNaWFtaTEUMBIGA1UECgwLQHZsYWRtYW5kaWMwggIiMA0GCSqGSIb3DQEB
AQUAA4ICDwAwggIKAoICAQDSC88PF8NyLkagK5mAZ/d739SOU16l2Cx3zE35zZQh
O29+1L4L+oMksLYipo+FMgtGO+MSzFsvGgKCs2sDSdfyoNSTZ3QaN4BAZ0sbq+wL
cke7yRBTM/XIGOQfhqq8yC2q8/zXwUbZg0UsCAxDGNwUr0Qlm829laIU/UN1KcYS
57Nebl1z05wMEvYmyl4JBAl9ozne7KS9DyW7jbrAXE8TaEy3+pY66kx5GG6v2+up
ScITGm4YPmPPlpOF1UjQloosgxdVa+fVp8aNCa/rf0JNO0Uhb3OKOZ+4kYmpfPn/
trwoKWAa6CV1uAJ+3zDkLMq1JNlrV4OMp1QvX0wzA47a/n466JMN9SFb0Ng5wf19
VOtT5Zu7chDStBudVjxlMDfUixvhvn4sjbaLNYR1fyWPoNXwr0KX2lpTP1QOzp9/
Sd0iiJ8RPfXn8Xo26MStu4I52CZjS7yEMgJGCLH/mgPuSbrHHYYrrrCPJgmQOZG2
TNMI+EqOwQvHh2ghdv7t7EEk4IslBk0QzufMXQ2WFXQ20nvj74mrmmiMuBcmonpR
0egA5/M18ZPLQxYu0Q86NUr4XHtAG1fq+n8pseQ7Avy6Gk6HRiezCbB7TJ9rnNeu
jie1TDajC6W7rx0VF7hcxkIrDgNgnYcjXUV2hMx1lo4fIoWkL3nJJVEthMVIcJOX
EwIDAQABo1MwUTAdBgNVHQ4EFgQUHawIRAo1bW8Xy7l4oKfM+ESjhs0wHwYDVR0j
BBgwFoAUHawIRAo1bW8Xy7l4oKfM+ESjhs0wDwYDVR0TAQH/BAUwAwEB/zANBgkq
hkiG9w0BAQsFAAOCAgEAozQJk5Ahx7rDn/aMXLdZFxR81VfkmHDm7NhlJsdVKUx5
o/iegXnvwc1PoeKsz2S504QiuL8l7jqZoU2WPIm7Vlr+oxBgiKqjo1EqBsUgNCZ7
qxMD84TVp/KBGjKUh1TXhjJwGGfNNr+R/fJGw+36UeuY3fSckjaYTuNuVElp+DoZ
/pGyu1qpcybLfiR8mpQkCeU/iBq5gIjWddbVjlYoTKfqULZrpsAF2AeqELEgyshl
p3PNhW/54TJSn4mWK+39BibYHPkvx8orEuWKyjjRk82hEXi7J3hsGKX29qC3oO40
67DKDWmZdMCz+E1ERf10V0bSp6iJnnlwknHJloZUETV1NY/DdoSC6e8CN0+0cQqL
aJefJ483O3sXyN3v3+DaEFBLPFgRFGZB7eaBwR2xAv/KfjT5dSyi+wA4LZAxsQMC
Q7UYGNAfHLNHJo/bsj12+JDhJaFZ/KoBKzyMUuEXmvjxXNDMCfm+gVQFoLyXkGq3
491W/O7LjR6pkD+ce0qeTFMu3nfUubyfbONVDEfuH4GC1e+FAggCRaBnFsVzCzXj
jxOOLoQ9nwLk8v17mx0BSwX4iuqvXFntfJbzfcnzQfx/qqPFheIbGnmKw1lrRML8
87ZbN6t01+v2YyYe6Mc7p80s1R3jc8aVX8ca2KcYwsJAkg/xz0q5RJwsE1is5UY=
-----END CERTIFICATE-----

52
server/https.key Normal file
View File

@ -0,0 +1,52 @@
-----BEGIN PRIVATE KEY-----
MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDSC88PF8NyLkag
K5mAZ/d739SOU16l2Cx3zE35zZQhO29+1L4L+oMksLYipo+FMgtGO+MSzFsvGgKC
s2sDSdfyoNSTZ3QaN4BAZ0sbq+wLcke7yRBTM/XIGOQfhqq8yC2q8/zXwUbZg0Us
CAxDGNwUr0Qlm829laIU/UN1KcYS57Nebl1z05wMEvYmyl4JBAl9ozne7KS9DyW7
jbrAXE8TaEy3+pY66kx5GG6v2+upScITGm4YPmPPlpOF1UjQloosgxdVa+fVp8aN
Ca/rf0JNO0Uhb3OKOZ+4kYmpfPn/trwoKWAa6CV1uAJ+3zDkLMq1JNlrV4OMp1Qv
X0wzA47a/n466JMN9SFb0Ng5wf19VOtT5Zu7chDStBudVjxlMDfUixvhvn4sjbaL
NYR1fyWPoNXwr0KX2lpTP1QOzp9/Sd0iiJ8RPfXn8Xo26MStu4I52CZjS7yEMgJG
CLH/mgPuSbrHHYYrrrCPJgmQOZG2TNMI+EqOwQvHh2ghdv7t7EEk4IslBk0QzufM
XQ2WFXQ20nvj74mrmmiMuBcmonpR0egA5/M18ZPLQxYu0Q86NUr4XHtAG1fq+n8p
seQ7Avy6Gk6HRiezCbB7TJ9rnNeujie1TDajC6W7rx0VF7hcxkIrDgNgnYcjXUV2
hMx1lo4fIoWkL3nJJVEthMVIcJOXEwIDAQABAoICAF45S+ZSW6uh1K7PQCnY+a0J
CJncDk5JPhFzhds0fGm39tknaCWJeEECQIIkw6cVfvc/sCpjn9fuTAgDolK0UnoV
6aZCN1P3Z8H8VDYSlm3AEyvLE1avrWbYu6TkzTyoc8wHbXn/yt+SQnpxFccXpMpm
oSRZ0x5jvHS79AHf/mnGpLEMw0FNQOgtrVxTVYGn3PYOPcyhzXi+Dcgn2QmnnxVu
qVOyxqehKTL9YdHjzsB/RN868P5RJocd3gmgVuyzS0KSf+oi4Ln4bFoiaVc0HDL3
DpjkHSl5lgu+xclRNfifKaK+hM0tLHi1VfFB//WrnjdKU3oSpQF4oowprM4Jn5AP
jhRI54JWZlWnvbiAOx7D49xFga3EnqjVH6So2gxi+q3Dv25luXGAnueaBPDpVC6c
nkJm2aCl7T3xlVpW8O5Fs+rsP8Xr9RTyEQJauM01uOi3N2zEeO8ERxTYEW5Sy2U7
OFKRXtLj7Jnejib/SxWGcIX4Wid5QFAygbXz4APfFN22QU0fqmhm4/c2OB/xM8qr
VVFx4xlG2wnuq5CZdZjmK3MTbmSM+pWW8mly/+++p694cf5oXGenYus/JWFNwxj/
fPyA7zQmaTOidu6clDHzkPCOE7TBv9TkQ7lL6ClgE7B39JR65ZQtjCYqRsADKsGI
dFMg+HDmGbVEfWg2V0GBAoIBAQDupImrJ0JXHA/0SEC2Tbz7pE60fRwmBFdhvk4Z
rzZiaOl+M2HXQU6b5DYhKcgdiFah5IuAnsRPo6X5Ug+Q1DV3OFTuEGAkXgqZliNa
aXsJcc0++DYlXX3BrTb66gylVLQRs5tZzsXps5iXWclziDC2go8RKnCwxsxwbzVq
FP4hoBP4dp83WoLF4NznnGFGw3/KLlMivtRxDE5OegpxTuWGlA/bVtT187Ksuuz3
dFUayLfpg0ABS/E7wwAJjSUpPPEi3J/G255H3lZXgS1gWcAf3rGDQYlJKF8UHdja
yWQcAOF+b/bYEpa4lHw+UtKNNkPTiCV4Y7CNQd8a2Gcl7VFTAoIBAQDhUs9r1dhm
rUlNAunVZZZVZ91XhXeqVTa/9xUDEvDh91nB5c7CcuNXxwcX4oTsMF4Bc7CHlvOv
pybp+QLjK310VjxxkFYJT0TKWuYqLjtNkQ93sp8wF3gVCf8m8bMOX/gPfQzNZWKp
un+ZWnzXNU5d2A+63xbZmFzT0Zo6H/h9YEO5Xxw32HCKFzEhl5JD34muZTEXSpdD
p7LUUr5LvnoUqEzonhXx2qRnTLP87d1o0GlkVex9HeeeBgrvm57QYoJnABxw9UFM
/ocLeYsjkmqJQRBDWgiwQlos1pdZyX2Yj20b7Wm5Pxd4aM9gh5EZZMXeQHhbHlWz
UY1IPxfAkytBAoIBAHmYavFDisD58oMlAZwiViXeXaAHk30nfyK1pfPeXBaeoEKG
idb1VsmF6bLSKD4sBwBshExgGWT+3IYCMx43kpqRoGzA+UvugvYpExBxaJiyXMM2
E9jMH1S9HqOQ+CqR00KlwoVrH1rqANk1jbkJbtDAC4fSmSLp2Kd9crj/w1F80FAs
mQnKW5HZ9pUpEEPPP2DUY9XzaCnF/GxuML31VmxRKxc20kIUDzmF8VJQ+0Avf85C
6yz99gfeXzl+qq2teKyrv9nCc47pEhN6JZXPhV53yPk5PmuBX5jPcHxiW1kNddhH
0n3cUuHv/rJ+3vvG555z46vJF9+R7c0u8LfZiTMCggEBAMQd4a/IN0xXM1+2U3SL
sSew+XR+FMPK25aGJmHAkKz9L8CWlzmj6cCy2LevT2aMSqYU3eeGOZ//at1nAV5c
shsaHA30RQ5hUkyWhZLdHnzK752NeQTQyJH3W3+4C9NNMIm6m/QCdLeqPflqSxK9
sPH5ZueN2UOXW+R5oTVKMmxd51RnNhZdasamnPrSBFrTK/EA3pOZNsOKKRqo0jz3
Eyb7vcUSI6OYXFQU7OwO1RGvpKvSJb5Y0wo11DrtRnO16i5gaGDg9u9e8ofISJSz
kcrZOKCGst1HQ1mXhbB+sbSh0aPnJog4I+OHxkgMdvyVO6vQjXExnAIxzzi8wZ25
+oECggEBAIT6q/sn8xFt5Jwc/0Z7YUjd415Nknam09tnbB+UPRR6lt6JFoILx8by
5Y1sN30HWDv27v9G32oZhUDii3Rt3PkbYLqlHy7XBMEXA9WIUo+3Be7mtdL8Wfrj
0zn0b7Hks9a9KsElG1dXUopwjMRL3M22UamaN7e/gl5jz2I7pyc5oaqz9GRDV5yG
slb6gGZ5naMycJD3p8vutXbmgKRr9beRp55UICAbEMdr5p3ks8bfR33Z6t+a97u1
IxI5x5Lb0fdfvL8JK3nRWn7Uzbmm5Ni/OaODNKP+fIm9m2yDAs8LM8RGpPtk6i0d
qIRta3H9KNw2Mhpkm77TtUSV/W5aOmY=
-----END PRIVATE KEY-----