diff --git a/.gitignore b/.gitignore index a2e55c3f..3a9ad0b8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,11 @@ node_modules .rpt2_cache .env* + tmp proto weights_uncompressed weights_unused docs -out \ No newline at end of file +out +build \ No newline at end of file diff --git a/.npmignore b/.npmignore index f0284d72..48c03f67 100644 --- a/.npmignore +++ b/.npmignore @@ -6,6 +6,7 @@ proto weights weights_uncompressed weights_unused +src test tools docs \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 317e775f..70b26bae 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,15 @@ sudo: required language: node_js node_js: - - "node" + #- "node" + - "12" + - "11" - "10" - "8" # node 6 is not compatible with tfjs-node # - "6" +services: + - xvfb env: global: - BACKEND_CPU=true EXCLUDE_UNCOMPRESSED=true @@ -15,9 +19,6 @@ env: addons: chrome: stable install: npm install -before_install: - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start script: - if [ $ENV == 'browser' ]; then npm run test-browser; fi - if [ $ENV == 'node' ]; then npm run test-node; fi diff --git a/README.md b/README.md index 7d84e0d2..df98850e 100644 --- a/README.md +++ b/README.md @@ -3,86 +3,63 @@ [![Build Status](https://travis-ci.org/justadudewhohacks/face-api.js.svg?branch=master)](https://travis-ci.org/justadudewhohacks/face-api.js) [![Slack](https://slack.bri.im/badge.svg)](https://slack.bri.im) -**JavaScript API for face detection and face recognition in the browser implemented on top of the tensorflow.js core API ([tensorflow/tfjs-core](https://github.com/tensorflow/tfjs-core))** +**JavaScript face recognition API for the browser and nodejs implemented on top of tensorflow.js core ([tensorflow/tfjs-core](https://github.com/tensorflow/tfjs))** -Table of Contents: +![faceapi](https://user-images.githubusercontent.com/31125521/57224752-ad3dc080-700a-11e9-85b9-1357b9f9bca4.gif) -* **[Resources](#resources)** - * **[Live Demos](#live-demos)** - * **[Tutorials](#tutorials)** -* **[Examples](#examples)** - * **[Running the Examples](#running-the-examples)** -* **[Available Models](#models)** - * **[Face Detection Models](#models-face-detection)** - * **[68 Point Face Landmark Detection Models](#models-face-landmark-detection)** - * **[Face Recognition Model](#models-face-recognition)** - * **[Face Expression Recognition Model](#models-face-expression-recognition)** -* **[Getting Started](#getting-started)** - * **[face-api.js for the Browser](#getting-started-browser)** - * **[face-api.js for Nodejs](#getting-started-nodejs)** -* **[Usage](#usage)** - * **[Loading the Models](#usage-loading-models)** - * **[High Level API](#usage-high-level-api)** - * **[Displaying Detection Results](#usage-displaying-detection-results)** - * **[Face Detection Options](#usage-face-detection-options)** - * **[Utility Classes](#usage-utility-classes)** - * **[Other Useful Utility](#other-useful-utility)** -* **[API Documentation](https://justadudewhohacks.github.io/face-api.js/docs/globals.html)** - - - -# Resources - - - -## Live Demos - -**[Check out the live demos!](https://justadudewhohacks.github.io/face-api.js/)** - - +## **[Click me for Live Demos!](https://justadudewhohacks.github.io/face-api.js/)** ## Tutorials -Check out my face-api.js tutorials: - * **[face-api.js — JavaScript API for Face Recognition in the Browser with tensorflow.js](https://itnext.io/face-api-js-javascript-api-for-face-recognition-in-the-browser-with-tensorflow-js-bcc2a6c4cf07)** * **[Realtime JavaScript Face Tracking and Face Recognition using face-api.js’ MTCNN Face Detector](https://itnext.io/realtime-javascript-face-tracking-and-face-recognition-using-face-api-js-mtcnn-face-detector-d924dd8b5740)** +* **[Realtime Webcam Face Detection And Emotion Recognition - Video](https://youtu.be/CVClHLwv-4I)** +* **[Easy Face Recognition Tutorial With JavaScript - Video](https://youtu.be/AZ4PdALMqx0)** +* **[Using face-api.js with Vue.js and Electron](https://medium.com/@andreas.schallwig/do-not-laugh-a-simple-ai-powered-game-3e22ad0f8166)** +* **[Add Masks to People - Gant Laborde on Learn with Jason](https://www.learnwithjason.dev/fun-with-machine-learning-pt-2)** + +## Table of Contents + +* **[Features](#features)** +* **[Running the Examples](#running-the-examples)** +* **[face-api.js for the Browser](#face-api.js-for-the-browser)** +* **[face-api.js for Nodejs](#face-api.js-for-nodejs)** +* **[Usage](#getting-started)** + * **[Loading the Models](#getting-started-loading-models)** + * **[High Level API](#high-level-api)** + * **[Displaying Detection Results](#getting-started-displaying-detection-results)** + * **[Face Detection Options](#getting-started-face-detection-options)** + * **[Utility Classes](#getting-started-utility-classes)** + * **[Other Useful Utility](#other-useful-utility)** +* **[Available Models](#models)** + * **[Face Detection](#models-face-detection)** + * **[Face Landmark Detection](#models-face-landmark-detection)** + * **[Face Recognition](#models-face-recognition)** + * **[Face Expression Recognition](#models-face-expression-recognition)** + * **[Age Estimation and Gender Recognition](#models-age-and-gender-recognition)** +* **[API Documentation](https://justadudewhohacks.github.io/face-api.js/docs/globals.html)** - - -# Examples +# Features ## Face Recognition -![preview_face-detection-and-recognition](https://user-images.githubusercontent.com/31125521/41526995-1a90e4e6-72e6-11e8-96d4-8b2ccdee5f79.gif) +![face-recognition](https://user-images.githubusercontent.com/31125521/57297377-bfcdfd80-70cf-11e9-8afa-2044cb167bff.gif) -![face-recognition-preview](https://user-images.githubusercontent.com/31125521/47384002-41e36f80-d706-11e8-8cd9-b3102c1bee67.png) - -## Face Similarity +## Face Landmark Detection -![preview_face-similarity](https://user-images.githubusercontent.com/31125521/40316573-0a1190c0-5d1f-11e8-8797-f6deaa344523.gif) +![face_landmark_detection](https://user-images.githubusercontent.com/31125521/57297731-b1ccac80-70d0-11e9-9bd7-59d77f180322.jpg) ## Face Expression Recognition ![preview_face-expression-recognition](https://user-images.githubusercontent.com/31125521/50575270-f501d080-0dfb-11e9-9676-8f419efdade4.png) -## Face Landmark Detection - -![face_landmarks_boxes_2](https://user-images.githubusercontent.com/31125521/46063404-00928b00-c16d-11e8-8f29-e9c50afd2bc8.jpg) - -![preview_face_landmarks](https://user-images.githubusercontent.com/31125521/41507950-e121b05e-723c-11e8-89f2-d8f9348a8e86.png) - -## Realtime Face Tracking - -![output](https://user-images.githubusercontent.com/31125521/47383860-ea450400-d705-11e8-9880-d5d15d952661.gif) +## Age Estimation & Gender Recognition -## MTCNN - -![mtcnn-preview](https://user-images.githubusercontent.com/31125521/42756818-0a41edaa-88fe-11e8-9033-8cd141b0fa09.gif) +![age_gender_recognition](https://user-images.githubusercontent.com/31125521/57297736-b5603380-70d0-11e9-873d-8b6c7243eb64.jpg) -## Running the Examples +# Running the Examples Clone the repository: @@ -90,7 +67,7 @@ Clone the repository: git clone https://github.com/justadudewhohacks/face-api.js.git ``` -### Running the Browser Examples +## Running the Browser Examples ``` bash cd face-api.js/examples/examples-browser @@ -100,7 +77,7 @@ npm start Browse to http://localhost:3000/. -### Running the Nodejs Examples +## Running the Nodejs Examples ``` bash cd face-api.js/examples/examples-nodejs @@ -120,65 +97,9 @@ tsc faceDetection.ts node faceDetection.js ``` - - -# Available Models - - - -## Face Detection Models - -### SSD Mobilenet V1 - -For face detection, this project implements a SSD (Single Shot Multibox Detector) based on MobileNetV1. The neural net will compute the locations of each face in an image and will return the bounding boxes together with it's probability for each face. This face detector is aiming towards obtaining high accuracy in detecting face bounding boxes instead of low inference time. The size of the quantized model is about 5.4 MB (**ssd_mobilenetv1_model**). - -The face detection model has been trained on the [WIDERFACE dataset](http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/) and the weights are provided by [yeephycho](https://github.com/yeephycho) in [this](https://github.com/yeephycho/tensorflow-face-detection) repo. - -### Tiny Face Detector - -The Tiny Face Detector is a very performant, realtime face detector, which is much faster, smaller and less resource consuming compared to the SSD Mobilenet V1 face detector, in return it performs slightly less well on detecting small faces. This model is extremely mobile and web friendly, thus it should be your GO-TO face detector on mobile devices and resource limited clients. The size of the quantized model is only 190 KB (**tiny_face_detector_model**). - -The face detector has been trained on a custom dataset of ~14K images labeled with bounding boxes. Furthermore the model has been trained to predict bounding boxes, which entirely cover facial feature points, thus it in general produces better results in combination with subsequent face landmark detection than SSD Mobilenet V1. - -This model is basically an even tinier version of Tiny Yolo V2, replacing the regular convolutions of Yolo with depthwise separable convolutions. Yolo is fully convolutional, thus can easily adapt to different input image sizes to trade off accuracy for performance (inference time). - -### MTCNN - -**Note, this model is mostly kept in this repo for experimental reasons. In general the other face detectors should perform better, but of course you are free to play around with MTCNN.** - -MTCNN (Multi-task Cascaded Convolutional Neural Networks) represents an alternative face detector to SSD Mobilenet v1 and Tiny Yolo v2, which offers much more room for configuration. By tuning the input parameters, MTCNN should be able to detect a wide range of face bounding box sizes. MTCNN is a 3 stage cascaded CNN, which simultaneously returns 5 face landmark points along with the bounding boxes and scores for each face. Additionally the model size is only 2MB. - -MTCNN has been presented in the paper [Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks](https://kpzhang93.github.io/MTCNN_face_detection_alignment/paper/spl.pdf) by Zhang et al. and the model weights are provided in the official [repo](https://github.com/kpzhang93/MTCNN_face_detection_alignment) of the MTCNN implementation. - - - -## 68 Point Face Landmark Detection Models - -This package implements a very lightweight and fast, yet accurate 68 point face landmark detector. The default model has a size of only 350kb (**face_landmark_68_model**) and the tiny model is only 80kb (**face_landmark_68_tiny_model**). Both models employ the ideas of depthwise separable convolutions as well as densely connected blocks. The models have been trained on a dataset of ~35k face images labeled with 68 face landmark points. - - - -## Face Recognition Model - -For face recognition, a ResNet-34 like architecture is implemented to compute a face descriptor (a feature vector with 128 values) from any given face image, which is used to describe the characteristics of a persons face. The model is **not** limited to the set of faces used for training, meaning you can use it for face recognition of any person, for example yourself. You can determine the similarity of two arbitrary faces by comparing their face descriptors, for example by computing the euclidean distance or using any other classifier of your choice. - -The neural net is equivalent to the **FaceRecognizerNet** used in [face-recognition.js](https://github.com/justadudewhohacks/face-recognition.js) and the net used in the [dlib](https://github.com/davisking/dlib/blob/master/examples/dnn_face_recognition_ex.cpp) face recognition example. The weights have been trained by [davisking](https://github.com/davisking) and the model achieves a prediction accuracy of 99.38% on the LFW (Labeled Faces in the Wild) benchmark for face recognition. - -The size of the quantized model is roughly 6.2 MB (**face_recognition_model**). - - - -## Face Expression Recognition Model - -The face expression recognition model is lightweight, fast and provides reasonable accuracy. The model has a size of roughly 310kb and it employs depthwise separable convolutions and densely connected blocks. It has been trained on a variety of images from publicly available datasets as well as images scraped from the web. Note, that wearing glasses might decrease the accuracy of the prediction results. - - - -# Getting Started - - + -## face-api.js for the Browser +# face-api.js for the Browser Simply include the latest script from [dist/face-api.js](https://github.com/justadudewhohacks/face-api.js/tree/master/dist). @@ -188,9 +109,9 @@ Or install it via npm: npm i face-api.js ``` - + -## face-api.js for Nodejs +# face-api.js for Nodejs We can use the equivalent API in a nodejs environment by polyfilling some browser specifics, such as HTMLImageElement, HTMLCanvasElement and ImageData. The easiest way to do so is by installing the node-canvas package. @@ -215,43 +136,43 @@ import * as canvas from 'canvas'; import * as faceapi from 'face-api.js'; // patch nodejs environment, we need to provide an implementation of -// HTMLCanvasElement and HTMLImageElement, additionally an implementation -// of ImageData is required, in case you want to use the MTCNN +// HTMLCanvasElement and HTMLImageElement const { Canvas, Image, ImageData } = canvas faceapi.env.monkeyPatch({ Canvas, Image, ImageData }) ``` -# Usage - - - -## Loading the Models + -To load a model, you have provide the corresponding manifest.json file as well as the model weight files (shards) as assets. Simply copy them to your public or assets folder. The manifest.json and shard files of a model have to be located in the same directory / accessible under the same route. +# Getting Started -Assuming the models reside in **public/models**: + -``` javascript -await faceapi.loadSsdMobilenetv1Model('/models') -// accordingly for the other models: -// await faceapi.loadTinyFaceDetectorModel('/models') -// await faceapi.loadMtcnnModel('/models') -// await faceapi.loadFaceLandmarkModel('/models') -// await faceapi.loadFaceLandmarkTinyModel('/models') -// await faceapi.loadFaceRecognitionModel('/models') -// await faceapi.loadFaceExpressionModel('/models') -``` +## Loading the Models All global neural network instances are exported via faceapi.nets: ``` javascript console.log(faceapi.nets) +// ageGenderNet +// faceExpressionNet +// faceLandmark68Net +// faceLandmark68TinyNet +// faceRecognitionNet +// ssdMobilenetv1 +// tinyFaceDetector +// tinyYolov2 ``` -The following is equivalent to `await faceapi.loadSsdMobilenetv1Model('/models')`: +To load a model, you have to provide the corresponding manifest.json file as well as the model weight files (shards) as assets. Simply copy them to your public or assets folder. The manifest.json and shard files of a model have to be located in the same directory / accessible under the same route. + +Assuming the models reside in **public/models**: ``` javascript await faceapi.nets.ssdMobilenetv1.loadFromUri('/models') +// accordingly for the other models: +// await faceapi.nets.faceLandmark68Net.loadFromUri('/models') +// await faceapi.nets.faceRecognitionNet.loadFromUri('/models') +// ... ``` In a nodejs environment you can furthermore load the models directly from disk: @@ -270,7 +191,7 @@ Alternatively, you can also create own instances of the neural nets: ``` javascript const net = new faceapi.SsdMobilenetv1() -await net.load('/models') +await net.loadFromUri('/models') ``` You can also load the weights as a Float32Array (in case you want to use the uncompressed models): @@ -285,6 +206,8 @@ const weights = new Float32Array(res.data) net.load(weights) ``` + + ## High Level API In the following **input** can be an HTML img, video or canvas element or the id of that element. @@ -322,22 +245,21 @@ By default **detectAllFaces** and **detectSingleFace** utilize the SSD Mobilenet ``` javascript const detections1 = await faceapi.detectAllFaces(input, new faceapi.SsdMobilenetv1Options()) const detections2 = await faceapi.detectAllFaces(input, new faceapi.TinyFaceDetectorOptions()) -const detections3 = await faceapi.detectAllFaces(input, new faceapi.MtcnnOptions()) ``` -You can tune the options of each face detector as shown [here](#usage-face-detection-options). +You can tune the options of each face detector as shown [here](#getting-started-face-detection-options). ### Detecting 68 Face Landmark Points **After face detection, we can furthermore predict the facial landmarks for each detected face as follows:** -Detect all faces in an image + computes 68 Point Face Landmarks for each detected face. Returns **Array<[WithFaceLandmarks>](#usage-utility-classes)>**: +Detect all faces in an image + computes 68 Point Face Landmarks for each detected face. Returns **Array<[WithFaceLandmarks>](#getting-started-utility-classes)>**: ``` javascript const detectionsWithLandmarks = await faceapi.detectAllFaces(input).withFaceLandmarks() ``` -Detect the face with the highest confidence score in an image + computes 68 Point Face Landmarks for that face. Returns **[WithFaceLandmarks>](#usage-utility-classes) | undefined**: +Detect the face with the highest confidence score in an image + computes 68 Point Face Landmarks for that face. Returns **[WithFaceLandmarks>](#getting-started-utility-classes) | undefined**: ``` javascript const detectionWithLandmarks = await faceapi.detectSingleFace(input).withFaceLandmarks() @@ -354,13 +276,13 @@ const detectionsWithLandmarks = await faceapi.detectAllFaces(input).withFaceLand **After face detection and facial landmark prediction the face descriptors for each face can be computed as follows:** -Detect all faces in an image + computes 68 Point Face Landmarks for each detected face. Returns **Array<[WithFaceDescriptor>>](#usage-utility-classes)>**: +Detect all faces in an image + compute 68 Point Face Landmarks for each detected face. Returns **Array<[WithFaceDescriptor>>](#getting-started-utility-classes)>**: ``` javascript const results = await faceapi.detectAllFaces(input).withFaceLandmarks().withFaceDescriptors() ``` -Detect the face with the highest confidence score in an image + computes 68 Point Face Landmarks and face descriptor for that face. Returns **[WithFaceDescriptor>>](#usage-utility-classes) | undefined**: +Detect the face with the highest confidence score in an image + compute 68 Point Face Landmarks and face descriptor for that face. Returns **[WithFaceDescriptor>>](#getting-started-utility-classes) | undefined**: ``` javascript const result = await faceapi.detectSingleFace(input).withFaceLandmarks().withFaceDescriptor() @@ -370,18 +292,62 @@ const result = await faceapi.detectSingleFace(input).withFaceLandmarks().withFac **Face expression recognition can be performed for detected faces as follows:** -Detect all faces in an image + recognize face expressions. Returns **Array<[WithFaceExpressions>](#usage-utility-classes)>**: +Detect all faces in an image + recognize face expressions of each face. Returns **Array<[WithFaceExpressions>>](#getting-started-utility-classes)>**: + +``` javascript +const detectionsWithExpressions = await faceapi.detectAllFaces(input).withFaceLandmarks().withFaceExpressions() +``` + +Detect the face with the highest confidence score in an image + recognize the face expressions for that face. Returns **[WithFaceExpressions>>](#getting-started-utility-classes) | undefined**: + +``` javascript +const detectionWithExpressions = await faceapi.detectSingleFace(input).withFaceLandmarks().withFaceExpressions() +``` + +**You can also skip .withFaceLandmarks(), which will skip the face alignment step (less stable accuracy):** + +Detect all faces without face alignment + recognize face expressions of each face. Returns **Array<[WithFaceExpressions>](#getting-started-utility-classes)>**: ``` javascript const detectionsWithExpressions = await faceapi.detectAllFaces(input).withFaceExpressions() ``` -Detect the face with the highest confidence score in an image + recognize the face expression for that face. Returns **[WithFaceExpressions>](#usage-utility-classes) | undefined**: +Detect the face with the highest confidence score without face alignment + recognize the face expression for that face. Returns **[WithFaceExpressions>](#getting-started-utility-classes) | undefined**: ``` javascript const detectionWithExpressions = await faceapi.detectSingleFace(input).withFaceExpressions() ``` +### Age Estimation and Gender Recognition + +**Age estimation and gender recognition from detected faces can be done as follows:** + +Detect all faces in an image + estimate age and recognize gender of each face. Returns **Array<[WithAge>>>](#getting-started-utility-classes)>**: + +``` javascript +const detectionsWithAgeAndGender = await faceapi.detectAllFaces(input).withFaceLandmarks().withAgeAndGender() +``` + +Detect the face with the highest confidence score in an image + estimate age and recognize gender for that face. Returns **[WithAge>>>](#getting-started-utility-classes) | undefined**: + +``` javascript +const detectionWithAgeAndGender = await faceapi.detectSingleFace(input).withFaceLandmarks().withAgeAndGender() +``` + +**You can also skip .withFaceLandmarks(), which will skip the face alignment step (less stable accuracy):** + +Detect all faces without face alignment + estimate age and recognize gender of each face. Returns **Array<[WithAge>>](#getting-started-utility-classes)>**: + +``` javascript +const detectionsWithAgeAndGender = await faceapi.detectAllFaces(input).withAgeAndGender() +``` + +Detect the face with the highest confidence score without face alignment + estimate age and recognize gender for that face. Returns **[WithAge>>](#getting-started-utility-classes) | undefined**: + +``` javascript +const detectionWithAgeAndGender = await faceapi.detectSingleFace(input).withAgeAndGender() +``` + ### Composition of Tasks **Tasks can be composed as follows:** @@ -391,22 +357,26 @@ const detectionWithExpressions = await faceapi.detectSingleFace(input).withFaceE await faceapi.detectAllFaces(input) await faceapi.detectAllFaces(input).withFaceExpressions() await faceapi.detectAllFaces(input).withFaceLandmarks() -await faceapi.detectAllFaces(input).withFaceExpressions().withFaceLandmarks() -await faceapi.detectAllFaces(input).withFaceExpressions().withFaceLandmarks().withFaceDescriptors() +await faceapi.detectAllFaces(input).withFaceLandmarks().withFaceExpressions() +await faceapi.detectAllFaces(input).withFaceLandmarks().withFaceExpressions().withFaceDescriptors() +await faceapi.detectAllFaces(input).withFaceLandmarks().withAgeAndGender().withFaceDescriptors() +await faceapi.detectAllFaces(input).withFaceLandmarks().withFaceExpressions().withAgeAndGender().withFaceDescriptors() // single face await faceapi.detectSingleFace(input) await faceapi.detectSingleFace(input).withFaceExpressions() await faceapi.detectSingleFace(input).withFaceLandmarks() -await faceapi.detectSingleFace(input).withFaceExpressions().withFaceLandmarks() -await faceapi.detectSingleFace(input).withFaceExpressions().withFaceLandmarks().withFaceDescriptor() +await faceapi.detectSingleFace(input).withFaceLandmarks().withFaceExpressions() +await faceapi.detectSingleFace(input).withFaceLandmarks().withFaceExpressions().withFaceDescriptor() +await faceapi.detectSingleFace(input).withFaceLandmarks().withAgeAndGender().withFaceDescriptor() +await faceapi.detectSingleFace(input).withFaceLandmarks().withFaceExpressions().withAgeAndGender().withFaceDescriptor() ``` ### Face Recognition by Matching Descriptors To perform face recognition, one can use faceapi.FaceMatcher to compare reference face descriptors to query face descriptors. -First, we initialize the FaceMatcher with the reference data, for example we can simply detect faces in a **referenceImage** and match the descriptors of the detected faces to faces of subsquent images: +First, we initialize the FaceMatcher with the reference data, for example we can simply detect faces in a **referenceImage** and match the descriptors of the detected faces to faces of subsequent images: ``` javascript const results = await faceapi @@ -468,53 +438,117 @@ const labeledDescriptors = [ const faceMatcher = new faceapi.FaceMatcher(labeledDescriptors) ``` - + ## Displaying Detection Results -Drawing the detected faces into a canvas: +Preparing the overlay canvas: ``` javascript -const detections = await faceapi.detectAllFaces(input) - -// resize the detected boxes in case your displayed image has a different size then the original -const detectionsForSize = faceapi.resizeResults(detections, { width: input.width, height: input.height }) -// draw them into a canvas +const displaySize = { width: input.width, height: input.height } +// resize the overlay canvas to the input dimensions const canvas = document.getElementById('overlay') -canvas.width = input.width -canvas.height = input.height -faceapi.drawDetection(canvas, detectionsForSize, { withScore: true }) +faceapi.matchDimensions(canvas, displaySize) ``` -Drawing face landmarks into a canvas: +face-api.js predefines some highlevel drawing functions, which you can utilize: ``` javascript +/* Display detected face bounding boxes */ +const detections = await faceapi.detectAllFaces(input) +// resize the detected boxes in case your displayed image has a different size than the original +const resizedDetections = faceapi.resizeResults(detections, displaySize) +// draw detections into the canvas +faceapi.draw.drawDetections(canvas, resizedDetections) + +/* Display face landmarks */ const detectionsWithLandmarks = await faceapi .detectAllFaces(input) .withFaceLandmarks() +// resize the detected boxes and landmarks in case your displayed image has a different size than the original +const resizedResults = faceapi.resizeResults(detectionsWithLandmarks, displaySize) +// draw detections into the canvas +faceapi.draw.drawDetections(canvas, resizedResults) +// draw the landmarks into the canvas +faceapi.draw.drawFaceLandmarks(canvas, resizedResults) -// resize the detected boxes and landmarks in case your displayed image has a different size then the original -const detectionsWithLandmarksForSize = faceapi.resizeResults(detectionsWithLandmarks, { width: input.width, height: input.height }) -// draw them into a canvas -const canvas = document.getElementById('overlay') -canvas.width = input.width -canvas.height = input.height -faceapi.drawLandmarks(canvas, detectionsWithLandmarks, { drawLines: true }) + +/* Display face expression results */ +const detectionsWithExpressions = await faceapi + .detectAllFaces(input) + .withFaceLandmarks() + .withFaceExpressions() +// resize the detected boxes and landmarks in case your displayed image has a different size than the original +const resizedResults = faceapi.resizeResults(detectionsWithExpressions, displaySize) +// draw detections into the canvas +faceapi.draw.drawDetections(canvas, resizedResults) +// draw a textbox displaying the face expressions with minimum probability into the canvas +const minProbability = 0.05 +faceapi.draw.drawFaceExpressions(canvas, resizedResults, minProbability) +``` + +You can also draw boxes with custom text ([DrawBox](https://github.com/justadudewhohacks/tfjs-image-recognition-base/blob/master/src/draw/DrawBox.ts)): + +``` javascript +const box = { x: 50, y: 50, width: 100, height: 100 } +// see DrawBoxOptions below +const drawOptions = { + label: 'Hello I am a box!', + lineWidth: 2 +} +const drawBox = new faceapi.draw.DrawBox(box, drawOptions) +drawBox.draw(document.getElementById('myCanvas')) +``` + +DrawBox drawing options: + +``` javascript +export interface IDrawBoxOptions { + boxColor?: string + lineWidth?: number + drawLabelOptions?: IDrawTextFieldOptions + label?: string +} ``` -Finally you can also draw boxes with custom text: +Finally you can draw custom text fields ([DrawTextField](https://github.com/justadudewhohacks/tfjs-image-recognition-base/blob/master/src/draw/DrawTextField.ts)): ``` javascript -const boxesWithText = [ - new faceapi.BoxWithText(new faceapi.Rect(x, y, width, height), text)) - new faceapi.BoxWithText(new faceapi.Rect(0, 0, 50, 50), 'some text')) +const text = [ + 'This is a textline!', + 'This is another textline!' ] +const anchor = { x: 200, y: 200 } +// see DrawTextField below +const drawOptions = { + anchorPosition: 'TOP_LEFT', + backgroundColor: 'rgba(0, 0, 0, 0.5)' +} +const drawBox = new faceapi.draw.DrawTextField(text, anchor, drawOptions) +drawBox.draw(document.getElementById('myCanvas')) +``` -const canvas = document.getElementById('overlay') -faceapi.drawDetection(canvas, boxesWithText) +DrawTextField drawing options: + +``` javascript +export interface IDrawTextFieldOptions { + anchorPosition?: AnchorPosition + backgroundColor?: string + fontColor?: string + fontSize?: number + fontStyle?: string + padding?: number +} + +export enum AnchorPosition { + TOP_LEFT = 'TOP_LEFT', + TOP_RIGHT = 'TOP_RIGHT', + BOTTOM_LEFT = 'BOTTOM_LEFT', + BOTTOM_RIGHT = 'BOTTOM_RIGHT' +} ``` - + ## Face Detection Options @@ -556,41 +590,7 @@ export interface ITinyFaceDetectorOptions { const options = new faceapi.TinyFaceDetectorOptions({ inputSize: 320 }) ``` -### MtcnnOptions - -``` javascript -export interface IMtcnnOptions { - // minimum face size to expect, the higher the faster processing will be, - // but smaller faces won't be detected - // default: 20 - minFaceSize?: number - - // the score threshold values used to filter the bounding - // boxes of stage 1, 2 and 3 - // default: [0.6, 0.7, 0.7] - scoreThresholds?: number[] - - // scale factor used to calculate the scale steps of the image - // pyramid used in stage 1 - // default: 0.709 - scaleFactor?: number - - // number of scaled versions of the input image passed through the CNN - // of the first stage, lower numbers will result in lower inference time, - // but will also be less accurate - // default: 10 - maxNumScales?: number - - // instead of specifying scaleFactor and maxNumScales you can also - // set the scaleSteps manually - scaleSteps?: number[] -} - -// example -const options = new faceapi.MtcnnOptions({ minFaceSize: 100, scaleFactor: 0.8 }) -``` - - + ## Utility Classes @@ -605,8 +605,6 @@ export interface IBox { } ``` - - ### IFaceDetection ``` javascript @@ -616,8 +614,6 @@ export interface IFaceDetection { } ``` - - ### IFaceLandmarks ``` javascript @@ -627,56 +623,63 @@ export interface IFaceLandmarks { } ``` - - ### WithFaceDetection ``` javascript -export type WithFaceDetection TSource & { +export type WithFaceDetection = TSource & { detection: FaceDetection } ``` - - ### WithFaceLandmarks ``` javascript -export type WithFaceLandmarks TSource & { +export type WithFaceLandmarks = TSource & { unshiftedLandmarks: FaceLandmarks landmarks: FaceLandmarks alignedRect: FaceDetection } ``` - - ### WithFaceDescriptor ``` javascript -export type WithFaceDescriptor TSource & { +export type WithFaceDescriptor = TSource & { descriptor: Float32Array } ``` - - ### WithFaceExpressions ``` javascript -export type FaceExpression = 'neutral' | 'happy' | 'sad' | 'angry' | 'fearful' | 'disgusted' | 'surprised' +export type WithFaceExpressions = TSource & { + expressions: FaceExpressions +} +``` + +### WithAge + +``` javascript +export type WithAge = TSource & { + age: number +} +``` + +### WithGender -export type FaceExpressionPrediction = { - expression: FaceExpression, - probability: number +``` javascript +export type WithGender = TSource & { + gender: Gender + genderProbability: number } -export type WithFaceExpressions TSource & { - expressions: FaceExpressionPrediction[] +export enum Gender { + FEMALE = 'female', + MALE = 'male' } ``` - + ## Other Useful Utility @@ -687,7 +690,6 @@ Instead of using the high level API, you can directly use the forward methods of ``` javascript const detections1 = await faceapi.ssdMobilenetv1(input, options) const detections2 = await faceapi.tinyFaceDetector(input, options) -const detections3 = await faceapi.mtcnn(input, options) const landmarks1 = await faceapi.detectFaceLandmarks(faceImage) const landmarks2 = await faceapi.detectFaceLandmarksTiny(faceImage) const descriptor = await faceapi.computeFaceDescriptor(alignedFaceImage) @@ -777,3 +779,77 @@ async function uploadImage() { const canvas1 = faceapi.createCanvasFromMedia(document.getElementById('myImg')) const canvas2 = faceapi.createCanvasFromMedia(document.getElementById('myVideo')) ``` + + + +# Available Models + + + +## Face Detection Models + +### SSD Mobilenet V1 + +For face detection, this project implements a SSD (Single Shot Multibox Detector) based on MobileNetV1. The neural net will compute the locations of each face in an image and will return the bounding boxes together with it's probability for each face. This face detector is aiming towards obtaining high accuracy in detecting face bounding boxes instead of low inference time. The size of the quantized model is about 5.4 MB (**ssd_mobilenetv1_model**). + +The face detection model has been trained on the [WIDERFACE dataset](http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/) and the weights are provided by [yeephycho](https://github.com/yeephycho) in [this](https://github.com/yeephycho/tensorflow-face-detection) repo. + +### Tiny Face Detector + +The Tiny Face Detector is a very performant, realtime face detector, which is much faster, smaller and less resource consuming compared to the SSD Mobilenet V1 face detector, in return it performs slightly less well on detecting small faces. This model is extremely mobile and web friendly, thus it should be your GO-TO face detector on mobile devices and resource limited clients. The size of the quantized model is only 190 KB (**tiny_face_detector_model**). + +The face detector has been trained on a custom dataset of ~14K images labeled with bounding boxes. Furthermore the model has been trained to predict bounding boxes, which entirely cover facial feature points, thus it in general produces better results in combination with subsequent face landmark detection than SSD Mobilenet V1. + +This model is basically an even tinier version of Tiny Yolo V2, replacing the regular convolutions of Yolo with depthwise separable convolutions. Yolo is fully convolutional, thus can easily adapt to different input image sizes to trade off accuracy for performance (inference time). + + + +## 68 Point Face Landmark Detection Models + +This package implements a very lightweight and fast, yet accurate 68 point face landmark detector. The default model has a size of only 350kb (**face_landmark_68_model**) and the tiny model is only 80kb (**face_landmark_68_tiny_model**). Both models employ the ideas of depthwise separable convolutions as well as densely connected blocks. The models have been trained on a dataset of ~35k face images labeled with 68 face landmark points. + + + +## Face Recognition Model + +For face recognition, a ResNet-34 like architecture is implemented to compute a face descriptor (a feature vector with 128 values) from any given face image, which is used to describe the characteristics of a persons face. The model is **not** limited to the set of faces used for training, meaning you can use it for face recognition of any person, for example yourself. You can determine the similarity of two arbitrary faces by comparing their face descriptors, for example by computing the euclidean distance or using any other classifier of your choice. + +The neural net is equivalent to the **FaceRecognizerNet** used in [face-recognition.js](https://github.com/justadudewhohacks/face-recognition.js) and the net used in the [dlib](https://github.com/davisking/dlib/blob/master/examples/dnn_face_recognition_ex.cpp) face recognition example. The weights have been trained by [davisking](https://github.com/davisking) and the model achieves a prediction accuracy of 99.38% on the LFW (Labeled Faces in the Wild) benchmark for face recognition. + +The size of the quantized model is roughly 6.2 MB (**face_recognition_model**). + + + +## Face Expression Recognition Model + +The face expression recognition model is lightweight, fast and provides reasonable accuracy. The model has a size of roughly 310kb and it employs depthwise separable convolutions and densely connected blocks. It has been trained on a variety of images from publicly available datasets as well as images scraped from the web. Note, that wearing glasses might decrease the accuracy of the prediction results. + + + +## Age and Gender Recognition Model + +The age and gender recognition model is a multitask network, which employs a feature extraction layer, an age regression layer and a gender classifier. The model has a size of roughly 420kb and the feature extractor employs a tinier but very similar architecture to Xception. + +This model has been trained and tested on the following databases with an 80/20 train/test split each: UTK, FGNET, Chalearn, Wiki, IMDB*, CACD*, MegaAge, MegaAge-Asian. The `*` indicates, that these databases have been algorithmically cleaned up, since the initial databases are very noisy. + +### Total Test Results + +Total MAE (Mean Age Error): **4.54** + +Total Gender Accuracy: **95%** + +### Test results for each database + +The `-` indicates, that there are no gender labels available for these databases. + +Database | UTK | FGNET | Chalearn | Wiki | IMDB* | CACD* | MegaAge | MegaAge-Asian | +----------------|-------:|------:|---------:|-----:|------:|------:|--------:|--------------:| +MAE | 5.25 | 4.23 | 6.24 | 6.54 | 3.63 | 3.20 | 6.23 | 4.21 | +Gender Accuracy | 0.93 | - | 0.94 | 0.95 | - | 0.97 | - | - | + +### Test results for different age category groups + +Age Range | 0 - 3 | 4 - 8 | 9 - 18 | 19 - 28 | 29 - 40 | 41 - 60 | 60 - 80 | 80+ | +----------------|-------:|------:|-------:|--------:|--------:|--------:|--------:|--------:| +MAE | 1.52 | 3.06 | 4.82 | 4.99 | 5.43 | 4.94 | 6.17 | 9.91 | +Gender Accuracy | 0.69 | 0.80 | 0.88 | 0.96 | 0.97 | 0.97 | 0.96 | 0.9 | diff --git a/build/commonjs/classes/FaceDetection.d.ts b/build/commonjs/classes/FaceDetection.d.ts deleted file mode 100644 index 0fed6f3f..00000000 --- a/build/commonjs/classes/FaceDetection.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Box, IDimensions, ObjectDetection, Rect } from 'tfjs-image-recognition-base'; -export interface IFaceDetecion { - score: number; - box: Box; -} -export declare class FaceDetection extends ObjectDetection implements IFaceDetecion { - constructor(score: number, relativeBox: Rect, imageDims: IDimensions); - forSize(width: number, height: number): FaceDetection; -} diff --git a/build/commonjs/classes/FaceDetection.js b/build/commonjs/classes/FaceDetection.js deleted file mode 100644 index 100615a3..00000000 --- a/build/commonjs/classes/FaceDetection.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var FaceDetection = /** @class */ (function (_super) { - tslib_1.__extends(FaceDetection, _super); - function FaceDetection(score, relativeBox, imageDims) { - return _super.call(this, score, score, '', relativeBox, imageDims) || this; - } - FaceDetection.prototype.forSize = function (width, height) { - return _super.prototype.forSize.call(this, width, height); - }; - return FaceDetection; -}(tfjs_image_recognition_base_1.ObjectDetection)); -exports.FaceDetection = FaceDetection; -//# sourceMappingURL=FaceDetection.js.map \ No newline at end of file diff --git a/build/commonjs/classes/FaceDetection.js.map b/build/commonjs/classes/FaceDetection.js.map deleted file mode 100644 index 168a0f88..00000000 --- a/build/commonjs/classes/FaceDetection.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceDetection.js","sourceRoot":"","sources":["../../../src/classes/FaceDetection.ts"],"names":[],"mappings":";;;AAAA,2EAAsF;AAOtF;IAAmC,yCAAe;IAChD,uBACE,KAAa,EACb,WAAiB,EACjB,SAAsB;eAEtB,kBAAM,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC;IACjD,CAAC;IAEM,+BAAO,GAAd,UAAe,KAAa,EAAE,MAAc;QAC1C,OAAO,iBAAM,OAAO,YAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACrC,CAAC;IACH,oBAAC;AAAD,CAAC,AAZD,CAAmC,6CAAe,GAYjD;AAZY,sCAAa"} \ No newline at end of file diff --git a/build/commonjs/classes/FaceLandmarks.d.ts b/build/commonjs/classes/FaceLandmarks.d.ts deleted file mode 100644 index 48ea7c81..00000000 --- a/build/commonjs/classes/FaceLandmarks.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Dimensions, IDimensions, Point, Rect } from 'tfjs-image-recognition-base'; -import { FaceDetection } from './FaceDetection'; -export interface IFaceLandmarks { - positions: Point[]; - shift: Point; -} -export declare class FaceLandmarks implements IFaceLandmarks { - protected _shift: Point; - protected _positions: Point[]; - protected _imgDims: Dimensions; - constructor(relativeFaceLandmarkPositions: Point[], imgDims: IDimensions, shift?: Point); - readonly shift: Point; - readonly imageWidth: number; - readonly imageHeight: number; - readonly positions: Point[]; - readonly relativePositions: Point[]; - forSize(width: number, height: number): T; - shiftBy(x: number, y: number): T; - shiftByPoint(pt: Point): T; - /** - * Aligns the face landmarks after face detection from the relative positions of the faces - * bounding box, or it's current shift. This function should be used to align the face images - * after face detection has been performed, before they are passed to the face recognition net. - * This will make the computed face descriptor more accurate. - * - * @param detection (optional) The bounding box of the face or the face detection result. If - * no argument was passed the position of the face landmarks are assumed to be relative to - * it's current shift. - * @returns The bounding box of the aligned face. - */ - align(detection?: FaceDetection | Rect): Rect; - protected getRefPointsForAlignment(): Point[]; -} diff --git a/build/commonjs/classes/FaceLandmarks.js b/build/commonjs/classes/FaceLandmarks.js deleted file mode 100644 index 0b1ffa1e..00000000 --- a/build/commonjs/classes/FaceLandmarks.js +++ /dev/null @@ -1,89 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var FaceDetection_1 = require("./FaceDetection"); -// face alignment constants -var relX = 0.5; -var relY = 0.43; -var relScale = 0.45; -var FaceLandmarks = /** @class */ (function () { - function FaceLandmarks(relativeFaceLandmarkPositions, imgDims, shift) { - if (shift === void 0) { shift = new tfjs_image_recognition_base_1.Point(0, 0); } - var width = imgDims.width, height = imgDims.height; - this._imgDims = new tfjs_image_recognition_base_1.Dimensions(width, height); - this._shift = shift; - this._positions = relativeFaceLandmarkPositions.map(function (pt) { return pt.mul(new tfjs_image_recognition_base_1.Point(width, height)).add(shift); }); - } - Object.defineProperty(FaceLandmarks.prototype, "shift", { - get: function () { return new tfjs_image_recognition_base_1.Point(this._shift.x, this._shift.y); }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceLandmarks.prototype, "imageWidth", { - get: function () { return this._imgDims.width; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceLandmarks.prototype, "imageHeight", { - get: function () { return this._imgDims.height; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceLandmarks.prototype, "positions", { - get: function () { return this._positions; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceLandmarks.prototype, "relativePositions", { - get: function () { - var _this = this; - return this._positions.map(function (pt) { return pt.sub(_this._shift).div(new tfjs_image_recognition_base_1.Point(_this.imageWidth, _this.imageHeight)); }); - }, - enumerable: true, - configurable: true - }); - FaceLandmarks.prototype.forSize = function (width, height) { - return new this.constructor(this.relativePositions, { width: width, height: height }); - }; - FaceLandmarks.prototype.shiftBy = function (x, y) { - return new this.constructor(this.relativePositions, this._imgDims, new tfjs_image_recognition_base_1.Point(x, y)); - }; - FaceLandmarks.prototype.shiftByPoint = function (pt) { - return this.shiftBy(pt.x, pt.y); - }; - /** - * Aligns the face landmarks after face detection from the relative positions of the faces - * bounding box, or it's current shift. This function should be used to align the face images - * after face detection has been performed, before they are passed to the face recognition net. - * This will make the computed face descriptor more accurate. - * - * @param detection (optional) The bounding box of the face or the face detection result. If - * no argument was passed the position of the face landmarks are assumed to be relative to - * it's current shift. - * @returns The bounding box of the aligned face. - */ - FaceLandmarks.prototype.align = function (detection) { - if (detection) { - var box = detection instanceof FaceDetection_1.FaceDetection - ? detection.box.floor() - : detection; - return this.shiftBy(box.x, box.y).align(); - } - var centers = this.getRefPointsForAlignment(); - var leftEyeCenter = centers[0], rightEyeCenter = centers[1], mouthCenter = centers[2]; - var distToMouth = function (pt) { return mouthCenter.sub(pt).magnitude(); }; - var eyeToMouthDist = (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2; - var size = Math.floor(eyeToMouthDist / relScale); - var refPoint = tfjs_image_recognition_base_1.getCenterPoint(centers); - // TODO: pad in case rectangle is out of image bounds - var x = Math.floor(Math.max(0, refPoint.x - (relX * size))); - var y = Math.floor(Math.max(0, refPoint.y - (relY * size))); - return new tfjs_image_recognition_base_1.Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y)); - }; - FaceLandmarks.prototype.getRefPointsForAlignment = function () { - throw new Error('getRefPointsForAlignment not implemented by base class'); - }; - return FaceLandmarks; -}()); -exports.FaceLandmarks = FaceLandmarks; -//# sourceMappingURL=FaceLandmarks.js.map \ No newline at end of file diff --git a/build/commonjs/classes/FaceLandmarks.js.map b/build/commonjs/classes/FaceLandmarks.js.map deleted file mode 100644 index 1dd9f20f..00000000 --- a/build/commonjs/classes/FaceLandmarks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceLandmarks.js","sourceRoot":"","sources":["../../../src/classes/FaceLandmarks.ts"],"names":[],"mappings":";;AAAA,2EAAmG;AAEnG,iDAAgD;AAEhD,2BAA2B;AAC3B,IAAM,IAAI,GAAG,GAAG,CAAA;AAChB,IAAM,IAAI,GAAG,IAAI,CAAA;AACjB,IAAM,QAAQ,GAAG,IAAI,CAAA;AAOrB;IAKE,uBACE,6BAAsC,EACtC,OAAoB,EACpB,KAA8B;QAA9B,sBAAA,EAAA,YAAmB,mCAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAEtB,IAAA,qBAAK,EAAE,uBAAM,CAAY;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,wCAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAC7C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,UAAU,GAAG,6BAA6B,CAAC,GAAG,CACjD,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,GAAG,CAAC,IAAI,mCAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAA3C,CAA2C,CAClD,CAAA;IACH,CAAC;IAED,sBAAW,gCAAK;aAAhB,cAA4B,OAAO,IAAI,mCAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;;;OAAA;IAC5E,sBAAW,qCAAU;aAArB,cAAkC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAA,CAAC,CAAC;;;OAAA;IAC9D,sBAAW,sCAAW;aAAtB,cAAmC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAA,CAAC,CAAC;;;OAAA;IAChE,sBAAW,oCAAS;aAApB,cAAkC,OAAO,IAAI,CAAC,UAAU,CAAA,CAAC,CAAC;;;OAAA;IAC1D,sBAAW,4CAAiB;aAA5B;YAAA,iBAIC;YAHC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CACxB,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,GAAG,CAAC,KAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,mCAAK,CAAC,KAAI,CAAC,UAAU,EAAE,KAAI,CAAC,WAAW,CAAC,CAAC,EAArE,CAAqE,CAC5E,CAAA;QACH,CAAC;;;OAAA;IAEM,+BAAO,GAAd,UAAwC,KAAa,EAAE,MAAc;QACnE,OAAO,IAAK,IAAI,CAAC,WAAmB,CAClC,IAAI,CAAC,iBAAiB,EACtB,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAClB,CAAA;IACH,CAAC;IAEM,+BAAO,GAAd,UAAwC,CAAS,EAAE,CAAS;QAC1D,OAAO,IAAK,IAAI,CAAC,WAAmB,CAClC,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,QAAQ,EACb,IAAI,mCAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAChB,CAAA;IACH,CAAC;IAEM,oCAAY,GAAnB,UAA6C,EAAS;QACpD,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACjC,CAAC;IAED;;;;;;;;;;OAUG;IACI,6BAAK,GAAZ,UACE,SAAgC;QAEhC,IAAI,SAAS,EAAE;YACb,IAAM,GAAG,GAAG,SAAS,YAAY,6BAAa;gBAC5C,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE;gBACvB,CAAC,CAAC,SAAS,CAAA;YAEb,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;SAC1C;QAED,IAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAA;QAExC,IAAA,0BAAa,EAAE,2BAAc,EAAE,wBAAW,CAAW;QAC5D,IAAM,WAAW,GAAG,UAAC,EAAS,IAAK,OAAA,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAA/B,CAA+B,CAAA;QAClE,IAAM,cAAc,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAA;QAErF,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC,CAAA;QAElD,IAAM,QAAQ,GAAG,4CAAc,CAAC,OAAO,CAAC,CAAA;QACxC,qDAAqD;QACrD,IAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAC7D,IAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAE7D,OAAO,IAAI,kCAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAA;IAClG,CAAC;IAES,gDAAwB,GAAlC;QACE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;IAC3E,CAAC;IACH,oBAAC;AAAD,CAAC,AAxFD,IAwFC;AAxFY,sCAAa"} \ No newline at end of file diff --git a/build/commonjs/classes/FaceLandmarks5.d.ts b/build/commonjs/classes/FaceLandmarks5.d.ts deleted file mode 100644 index 554ce2f1..00000000 --- a/build/commonjs/classes/FaceLandmarks5.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Point } from 'tfjs-image-recognition-base'; -import { FaceLandmarks } from './FaceLandmarks'; -export declare class FaceLandmarks5 extends FaceLandmarks { - protected getRefPointsForAlignment(): Point[]; -} diff --git a/build/commonjs/classes/FaceLandmarks5.js b/build/commonjs/classes/FaceLandmarks5.js deleted file mode 100644 index c62a0991..00000000 --- a/build/commonjs/classes/FaceLandmarks5.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var FaceLandmarks_1 = require("./FaceLandmarks"); -var FaceLandmarks5 = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmarks5, _super); - function FaceLandmarks5() { - return _super !== null && _super.apply(this, arguments) || this; - } - FaceLandmarks5.prototype.getRefPointsForAlignment = function () { - var pts = this.positions; - return [ - pts[0], - pts[1], - tfjs_image_recognition_base_1.getCenterPoint([pts[3], pts[4]]) - ]; - }; - return FaceLandmarks5; -}(FaceLandmarks_1.FaceLandmarks)); -exports.FaceLandmarks5 = FaceLandmarks5; -//# sourceMappingURL=FaceLandmarks5.js.map \ No newline at end of file diff --git a/build/commonjs/classes/FaceLandmarks5.js.map b/build/commonjs/classes/FaceLandmarks5.js.map deleted file mode 100644 index a4303925..00000000 --- a/build/commonjs/classes/FaceLandmarks5.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceLandmarks5.js","sourceRoot":"","sources":["../../../src/classes/FaceLandmarks5.ts"],"names":[],"mappings":";;;AAAA,2EAAoE;AAEpE,iDAAgD;AAEhD;IAAoC,0CAAa;IAAjD;;IAUA,CAAC;IARW,iDAAwB,GAAlC;QACE,IAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAA;QAC1B,OAAO;YACL,GAAG,CAAC,CAAC,CAAC;YACN,GAAG,CAAC,CAAC,CAAC;YACN,4CAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACjC,CAAA;IACH,CAAC;IACH,qBAAC;AAAD,CAAC,AAVD,CAAoC,6BAAa,GAUhD;AAVY,wCAAc"} \ No newline at end of file diff --git a/build/commonjs/classes/FaceLandmarks68.d.ts b/build/commonjs/classes/FaceLandmarks68.d.ts deleted file mode 100644 index 5ac3974e..00000000 --- a/build/commonjs/classes/FaceLandmarks68.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Point } from 'tfjs-image-recognition-base'; -import { FaceLandmarks } from '../classes/FaceLandmarks'; -export declare class FaceLandmarks68 extends FaceLandmarks { - getJawOutline(): Point[]; - getLeftEyeBrow(): Point[]; - getRightEyeBrow(): Point[]; - getNose(): Point[]; - getLeftEye(): Point[]; - getRightEye(): Point[]; - getMouth(): Point[]; - protected getRefPointsForAlignment(): Point[]; -} diff --git a/build/commonjs/classes/FaceLandmarks68.js b/build/commonjs/classes/FaceLandmarks68.js deleted file mode 100644 index 8128068c..00000000 --- a/build/commonjs/classes/FaceLandmarks68.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var FaceLandmarks_1 = require("../classes/FaceLandmarks"); -var FaceLandmarks68 = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmarks68, _super); - function FaceLandmarks68() { - return _super !== null && _super.apply(this, arguments) || this; - } - FaceLandmarks68.prototype.getJawOutline = function () { - return this.positions.slice(0, 17); - }; - FaceLandmarks68.prototype.getLeftEyeBrow = function () { - return this.positions.slice(17, 22); - }; - FaceLandmarks68.prototype.getRightEyeBrow = function () { - return this.positions.slice(22, 27); - }; - FaceLandmarks68.prototype.getNose = function () { - return this.positions.slice(27, 36); - }; - FaceLandmarks68.prototype.getLeftEye = function () { - return this.positions.slice(36, 42); - }; - FaceLandmarks68.prototype.getRightEye = function () { - return this.positions.slice(42, 48); - }; - FaceLandmarks68.prototype.getMouth = function () { - return this.positions.slice(48, 68); - }; - FaceLandmarks68.prototype.getRefPointsForAlignment = function () { - return [ - this.getLeftEye(), - this.getRightEye(), - this.getMouth() - ].map(tfjs_image_recognition_base_1.getCenterPoint); - }; - return FaceLandmarks68; -}(FaceLandmarks_1.FaceLandmarks)); -exports.FaceLandmarks68 = FaceLandmarks68; -//# sourceMappingURL=FaceLandmarks68.js.map \ No newline at end of file diff --git a/build/commonjs/classes/FaceLandmarks68.js.map b/build/commonjs/classes/FaceLandmarks68.js.map deleted file mode 100644 index a83cfd49..00000000 --- a/build/commonjs/classes/FaceLandmarks68.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceLandmarks68.js","sourceRoot":"","sources":["../../../src/classes/FaceLandmarks68.ts"],"names":[],"mappings":";;;AAAA,2EAAoE;AAEpE,0DAAyD;AAEzD;IAAqC,2CAAa;IAAlD;;IAoCA,CAAC;IAnCQ,uCAAa,GAApB;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACpC,CAAC;IAEM,wCAAc,GAArB;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACrC,CAAC;IAEM,yCAAe,GAAtB;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACrC,CAAC;IAEM,iCAAO,GAAd;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACrC,CAAC;IAEM,oCAAU,GAAjB;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACrC,CAAC;IAEM,qCAAW,GAAlB;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACrC,CAAC;IAEM,kCAAQ,GAAf;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACrC,CAAC;IAES,kDAAwB,GAAlC;QACE,OAAO;YACL,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,QAAQ,EAAE;SAChB,CAAC,GAAG,CAAC,4CAAc,CAAC,CAAA;IACvB,CAAC;IACH,sBAAC;AAAD,CAAC,AApCD,CAAqC,6BAAa,GAoCjD;AApCY,0CAAe"} \ No newline at end of file diff --git a/build/commonjs/classes/FaceMatch.d.ts b/build/commonjs/classes/FaceMatch.d.ts deleted file mode 100644 index 3c0befef..00000000 --- a/build/commonjs/classes/FaceMatch.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export interface IFaceMatch { - label: string; - distance: number; -} -export declare class FaceMatch implements IFaceMatch { - private _label; - private _distance; - constructor(label: string, distance: number); - readonly label: string; - readonly distance: number; - toString(withDistance?: boolean): string; -} diff --git a/build/commonjs/classes/FaceMatch.js b/build/commonjs/classes/FaceMatch.js deleted file mode 100644 index 0dbbe68e..00000000 --- a/build/commonjs/classes/FaceMatch.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var FaceMatch = /** @class */ (function () { - function FaceMatch(label, distance) { - this._label = label; - this._distance = distance; - } - Object.defineProperty(FaceMatch.prototype, "label", { - get: function () { return this._label; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceMatch.prototype, "distance", { - get: function () { return this._distance; }, - enumerable: true, - configurable: true - }); - FaceMatch.prototype.toString = function (withDistance) { - if (withDistance === void 0) { withDistance = true; } - return "" + this.label + (withDistance ? " (" + tfjs_image_recognition_base_1.round(this.distance) + ")" : ''); - }; - return FaceMatch; -}()); -exports.FaceMatch = FaceMatch; -//# sourceMappingURL=FaceMatch.js.map \ No newline at end of file diff --git a/build/commonjs/classes/FaceMatch.js.map b/build/commonjs/classes/FaceMatch.js.map deleted file mode 100644 index f7016c12..00000000 --- a/build/commonjs/classes/FaceMatch.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceMatch.js","sourceRoot":"","sources":["../../../src/classes/FaceMatch.ts"],"names":[],"mappings":";;AAAA,2EAAoD;AAOpD;IAIE,mBAAY,KAAa,EAAE,QAAgB;QACzC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;IAC3B,CAAC;IAED,sBAAW,4BAAK;aAAhB,cAA6B,OAAO,IAAI,CAAC,MAAM,CAAA,CAAC,CAAC;;;OAAA;IACjD,sBAAW,+BAAQ;aAAnB,cAAgC,OAAO,IAAI,CAAC,SAAS,CAAA,CAAC,CAAC;;;OAAA;IAEhD,4BAAQ,GAAf,UAAgB,YAA4B;QAA5B,6BAAA,EAAA,mBAA4B;QAC1C,OAAO,KAAG,IAAI,CAAC,KAAK,IAAG,YAAY,CAAC,CAAC,CAAC,OAAK,mCAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAA;IAC3E,CAAC;IACH,gBAAC;AAAD,CAAC,AAfD,IAeC;AAfY,8BAAS"} \ No newline at end of file diff --git a/build/commonjs/classes/LabeledFaceDescriptors.d.ts b/build/commonjs/classes/LabeledFaceDescriptors.d.ts deleted file mode 100644 index feb5da06..00000000 --- a/build/commonjs/classes/LabeledFaceDescriptors.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export declare class LabeledFaceDescriptors { - private _label; - private _descriptors; - constructor(label: string, descriptors: Float32Array[]); - readonly label: string; - readonly descriptors: Float32Array[]; -} diff --git a/build/commonjs/classes/LabeledFaceDescriptors.js b/build/commonjs/classes/LabeledFaceDescriptors.js deleted file mode 100644 index 0fd67add..00000000 --- a/build/commonjs/classes/LabeledFaceDescriptors.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var LabeledFaceDescriptors = /** @class */ (function () { - function LabeledFaceDescriptors(label, descriptors) { - if (!(typeof label === 'string')) { - throw new Error('LabeledFaceDescriptors - constructor expected label to be a string'); - } - if (!Array.isArray(descriptors) || descriptors.some(function (desc) { return !(desc instanceof Float32Array); })) { - throw new Error('LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array'); - } - this._label = label; - this._descriptors = descriptors; - } - Object.defineProperty(LabeledFaceDescriptors.prototype, "label", { - get: function () { return this._label; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(LabeledFaceDescriptors.prototype, "descriptors", { - get: function () { return this._descriptors; }, - enumerable: true, - configurable: true - }); - return LabeledFaceDescriptors; -}()); -exports.LabeledFaceDescriptors = LabeledFaceDescriptors; -//# sourceMappingURL=LabeledFaceDescriptors.js.map \ No newline at end of file diff --git a/build/commonjs/classes/LabeledFaceDescriptors.js.map b/build/commonjs/classes/LabeledFaceDescriptors.js.map deleted file mode 100644 index 0981d92d..00000000 --- a/build/commonjs/classes/LabeledFaceDescriptors.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"LabeledFaceDescriptors.js","sourceRoot":"","sources":["../../../src/classes/LabeledFaceDescriptors.ts"],"names":[],"mappings":";;AAAA;IAIE,gCAAY,KAAa,EAAE,WAA2B;QACpD,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;SACtF;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,CAAC,CAAC,IAAI,YAAY,YAAY,CAAC,EAA/B,CAA+B,CAAC,EAAE;YAC5F,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAA;SAC5G;QAED,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAA;IACjC,CAAC;IAED,sBAAW,yCAAK;aAAhB,cAA6B,OAAO,IAAI,CAAC,MAAM,CAAA,CAAC,CAAC;;;OAAA;IACjD,sBAAW,+CAAW;aAAtB,cAA2C,OAAO,IAAI,CAAC,YAAY,CAAA,CAAC,CAAC;;;OAAA;IACvE,6BAAC;AAAD,CAAC,AAnBD,IAmBC;AAnBY,wDAAsB"} \ No newline at end of file diff --git a/build/commonjs/classes/index.d.ts b/build/commonjs/classes/index.d.ts deleted file mode 100644 index 8d1b8ffe..00000000 --- a/build/commonjs/classes/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './FaceDetection'; -export * from './FaceLandmarks'; -export * from './FaceLandmarks5'; -export * from './FaceLandmarks68'; -export * from './FaceMatch'; -export * from './LabeledFaceDescriptors'; diff --git a/build/commonjs/classes/index.js b/build/commonjs/classes/index.js deleted file mode 100644 index cf4fa0fa..00000000 --- a/build/commonjs/classes/index.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -tslib_1.__exportStar(require("./FaceDetection"), exports); -tslib_1.__exportStar(require("./FaceLandmarks"), exports); -tslib_1.__exportStar(require("./FaceLandmarks5"), exports); -tslib_1.__exportStar(require("./FaceLandmarks68"), exports); -tslib_1.__exportStar(require("./FaceMatch"), exports); -tslib_1.__exportStar(require("./LabeledFaceDescriptors"), exports); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/commonjs/classes/index.js.map b/build/commonjs/classes/index.js.map deleted file mode 100644 index c50e2ffd..00000000 --- a/build/commonjs/classes/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/classes/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC;AAChC,0DAAgC;AAChC,2DAAiC;AACjC,4DAAkC;AAClC,sDAA4B;AAC5B,mEAAyC"} \ No newline at end of file diff --git a/build/commonjs/common/fullyConnectedLayer.d.ts b/build/commonjs/common/fullyConnectedLayer.d.ts deleted file mode 100644 index baf23083..00000000 --- a/build/commonjs/common/fullyConnectedLayer.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export declare function fullyConnectedLayer(x: tf.Tensor2D, params: TfjsImageRecognitionBase.FCParams): tf.Tensor2D; diff --git a/build/commonjs/common/fullyConnectedLayer.js b/build/commonjs/common/fullyConnectedLayer.js deleted file mode 100644 index 624c1d5e..00000000 --- a/build/commonjs/common/fullyConnectedLayer.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -function fullyConnectedLayer(x, params) { - return tf.tidy(function () { - return tf.add(tf.matMul(x, params.weights), params.bias); - }); -} -exports.fullyConnectedLayer = fullyConnectedLayer; -//# sourceMappingURL=fullyConnectedLayer.js.map \ No newline at end of file diff --git a/build/commonjs/common/fullyConnectedLayer.js.map b/build/commonjs/common/fullyConnectedLayer.js.map deleted file mode 100644 index 9c759b6b..00000000 --- a/build/commonjs/common/fullyConnectedLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"fullyConnectedLayer.js","sourceRoot":"","sources":["../../../src/common/fullyConnectedLayer.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAG5C,SAAgB,mBAAmB,CACjC,CAAc,EACd,MAAyC;IAEzC,OAAO,EAAE,CAAC,IAAI,CAAC;QACb,OAAA,EAAE,CAAC,GAAG,CACJ,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAC5B,MAAM,CAAC,IAAI,CACZ;IAHD,CAGC,CACF,CAAA;AACH,CAAC;AAVD,kDAUC"} \ No newline at end of file diff --git a/build/commonjs/dom/drawContour.d.ts b/build/commonjs/dom/drawContour.d.ts deleted file mode 100644 index 78664e6b..00000000 --- a/build/commonjs/dom/drawContour.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Point } from 'tfjs-image-recognition-base'; -export declare function drawContour(ctx: CanvasRenderingContext2D, points: Point[], isClosed?: boolean): void; diff --git a/build/commonjs/dom/drawContour.js b/build/commonjs/dom/drawContour.js deleted file mode 100644 index 097275c3..00000000 --- a/build/commonjs/dom/drawContour.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function drawContour(ctx, points, isClosed) { - if (isClosed === void 0) { isClosed = false; } - ctx.beginPath(); - points.slice(1).forEach(function (_a, prevIdx) { - var x = _a.x, y = _a.y; - var from = points[prevIdx]; - ctx.moveTo(from.x, from.y); - ctx.lineTo(x, y); - }); - if (isClosed) { - var from = points[points.length - 1]; - var to = points[0]; - if (!from || !to) { - return; - } - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - } - ctx.stroke(); -} -exports.drawContour = drawContour; -//# sourceMappingURL=drawContour.js.map \ No newline at end of file diff --git a/build/commonjs/dom/drawContour.js.map b/build/commonjs/dom/drawContour.js.map deleted file mode 100644 index 6d7a3de8..00000000 --- a/build/commonjs/dom/drawContour.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"drawContour.js","sourceRoot":"","sources":["../../../src/dom/drawContour.ts"],"names":[],"mappings":";;AAEA,SAAgB,WAAW,CACzB,GAA6B,EAC7B,MAAe,EACf,QAAyB;IAAzB,yBAAA,EAAA,gBAAyB;IAEzB,GAAG,CAAC,SAAS,EAAE,CAAA;IAEf,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAC,EAAQ,EAAE,OAAO;YAAf,QAAC,EAAE,QAAC;QAC7B,IAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;QAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAClB,CAAC,CAAC,CAAA;IAEF,IAAI,QAAQ,EAAE;QACZ,IAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACtC,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE;YAChB,OAAM;SACP;QAED,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;KACvB;IAED,GAAG,CAAC,MAAM,EAAE,CAAA;AACd,CAAC;AAzBD,kCAyBC"} \ No newline at end of file diff --git a/build/commonjs/dom/drawFaceExpressions.d.ts b/build/commonjs/dom/drawFaceExpressions.d.ts deleted file mode 100644 index 50eaee66..00000000 --- a/build/commonjs/dom/drawFaceExpressions.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { DrawFaceExpressionsInput, DrawFaceExpressionsOptions } from './types'; -export declare function drawFaceExpressions(canvasArg: string | HTMLCanvasElement, faceExpressions: DrawFaceExpressionsInput | DrawFaceExpressionsInput[], options?: DrawFaceExpressionsOptions): void; diff --git a/build/commonjs/dom/drawFaceExpressions.js b/build/commonjs/dom/drawFaceExpressions.js deleted file mode 100644 index 6e265ff2..00000000 --- a/build/commonjs/dom/drawFaceExpressions.js +++ /dev/null @@ -1,34 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -function drawFaceExpressions(canvasArg, faceExpressions, options) { - var canvas = tfjs_image_recognition_base_1.resolveInput(canvasArg); - if (!(canvas instanceof tfjs_image_recognition_base_1.env.getEnv().Canvas)) { - throw new Error('drawFaceExpressions - expected canvas to be of type: HTMLCanvasElement'); - } - var drawOptions = Object.assign(tfjs_image_recognition_base_1.getDefaultDrawOptions(options), (options || {})); - var ctx = tfjs_image_recognition_base_1.getContext2dOrThrow(canvas); - var _a = drawOptions.primaryColor, primaryColor = _a === void 0 ? 'red' : _a, _b = drawOptions.secondaryColor, secondaryColor = _b === void 0 ? 'blue' : _b, _c = drawOptions.primaryFontSize, primaryFontSize = _c === void 0 ? 22 : _c, _d = drawOptions.secondaryFontSize, secondaryFontSize = _d === void 0 ? 16 : _d, _e = drawOptions.minConfidence, minConfidence = _e === void 0 ? 0.2 : _e; - var faceExpressionsArray = Array.isArray(faceExpressions) - ? faceExpressions - : [faceExpressions]; - faceExpressionsArray.forEach(function (_a) { - var position = _a.position, expressions = _a.expressions; - var x = position.x, y = position.y; - var height = position.height || 0; - var sorted = expressions.sort(function (a, b) { return b.probability - a.probability; }); - var resultsToDisplay = sorted.filter(function (expr) { return expr.probability > minConfidence; }); - var offset = (y + height + resultsToDisplay.length * primaryFontSize) > canvas.height - ? -(resultsToDisplay.length * primaryFontSize) - : 0; - resultsToDisplay.forEach(function (expr, i) { - var text = expr.expression + " (" + tfjs_image_recognition_base_1.round(expr.probability) + ")"; - tfjs_image_recognition_base_1.drawText(ctx, x, y + height + (i * primaryFontSize) + offset, text, { - textColor: i === 0 ? primaryColor : secondaryColor, - fontSize: i === 0 ? primaryFontSize : secondaryFontSize - }); - }); - }); -} -exports.drawFaceExpressions = drawFaceExpressions; -//# sourceMappingURL=drawFaceExpressions.js.map \ No newline at end of file diff --git a/build/commonjs/dom/drawFaceExpressions.js.map b/build/commonjs/dom/drawFaceExpressions.js.map deleted file mode 100644 index 3af202c8..00000000 --- a/build/commonjs/dom/drawFaceExpressions.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"drawFaceExpressions.js","sourceRoot":"","sources":["../../../src/dom/drawFaceExpressions.ts"],"names":[],"mappings":";;AAAA,2EAA6H;AAK7H,SAAgB,mBAAmB,CACjC,SAAqC,EACrC,eAAsE,EACtE,OAAoC;IAEpC,IAAM,MAAM,GAAG,0CAAY,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,CAAC,CAAC,MAAM,YAAY,iCAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;QAC5C,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAA;KAC1F;IAED,IAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAC/B,mDAAqB,CAAC,OAAO,CAAC,EAC9B,CAAC,OAAO,IAAI,EAAE,CAAC,CAChB,CAAA;IAED,IAAM,GAAG,GAAG,iDAAmB,CAAC,MAAM,CAAC,CAAA;IAErC,IAAA,6BAAoB,EAApB,yCAAoB,EACpB,+BAAuB,EAAvB,4CAAuB,EACvB,gCAAoB,EAApB,yCAAoB,EACpB,kCAAsB,EAAtB,2CAAsB,EACtB,8BAAmB,EAAnB,wCAAmB,CACN;IAEf,IAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;QACzD,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAA;IAErB,oBAAoB,CAAC,OAAO,CAAC,UAAC,EAAyB;YAAvB,sBAAQ,EAAE,4BAAW;QAC3C,IAAA,cAAC,EAAE,cAAC,CAAa;QACzB,IAAM,MAAM,GAAI,QAAkB,CAAC,MAAM,IAAI,CAAC,CAAA;QAC9C,IAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,EAA7B,CAA6B,CAAC,CAAA;QACxE,IAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,WAAW,GAAG,aAAa,EAAhC,CAAgC,CAAC,CAAA;QAEhF,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,gBAAgB,CAAC,MAAM,GAAG,eAAe,CAAC,GAAG,MAAM,CAAC,MAAM;YACnF,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,GAAG,eAAe,CAAC;YAC9C,CAAC,CAAC,CAAC,CAAA;QACL,gBAAgB,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,CAAC;YAC/B,IAAM,IAAI,GAAM,IAAI,CAAC,UAAU,UAAK,mCAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAG,CAAA;YAC9D,sCAAQ,CACN,GAAG,EACH,CAAC,EACD,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,GAAG,MAAM,EAC3C,IAAI,EACJ;gBACE,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc;gBAClD,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB;aACxD,CACF,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AAGJ,CAAC;AArDD,kDAqDC"} \ No newline at end of file diff --git a/build/commonjs/dom/drawLandmarks.d.ts b/build/commonjs/dom/drawLandmarks.d.ts deleted file mode 100644 index 4a372873..00000000 --- a/build/commonjs/dom/drawLandmarks.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { FaceLandmarks } from '../classes/FaceLandmarks'; -import { DrawLandmarksOptions } from './types'; -export declare function drawLandmarks(canvasArg: string | HTMLCanvasElement, faceLandmarks: FaceLandmarks | FaceLandmarks[], options?: DrawLandmarksOptions): void; diff --git a/build/commonjs/dom/drawLandmarks.js b/build/commonjs/dom/drawLandmarks.js deleted file mode 100644 index ed6c7c5c..00000000 --- a/build/commonjs/dom/drawLandmarks.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var FaceLandmarks68_1 = require("../classes/FaceLandmarks68"); -var drawContour_1 = require("./drawContour"); -function drawLandmarks(canvasArg, faceLandmarks, options) { - var canvas = tfjs_image_recognition_base_1.resolveInput(canvasArg); - if (!(canvas instanceof tfjs_image_recognition_base_1.env.getEnv().Canvas)) { - throw new Error('drawLandmarks - expected canvas to be of type: HTMLCanvasElement'); - } - var drawOptions = Object.assign(tfjs_image_recognition_base_1.getDefaultDrawOptions(options), (options || {})); - var drawLines = Object.assign({ drawLines: false }, (options || {})).drawLines; - var ctx = tfjs_image_recognition_base_1.getContext2dOrThrow(canvas); - var lineWidth = drawOptions.lineWidth, _a = drawOptions.color, color = _a === void 0 ? 'blue' : _a; - var faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks]; - faceLandmarksArray.forEach(function (landmarks) { - if (drawLines && landmarks instanceof FaceLandmarks68_1.FaceLandmarks68) { - ctx.strokeStyle = color; - ctx.lineWidth = lineWidth; - drawContour_1.drawContour(ctx, landmarks.getJawOutline()); - drawContour_1.drawContour(ctx, landmarks.getLeftEyeBrow()); - drawContour_1.drawContour(ctx, landmarks.getRightEyeBrow()); - drawContour_1.drawContour(ctx, landmarks.getNose()); - drawContour_1.drawContour(ctx, landmarks.getLeftEye(), true); - drawContour_1.drawContour(ctx, landmarks.getRightEye(), true); - drawContour_1.drawContour(ctx, landmarks.getMouth(), true); - return; - } - // else draw points - var ptOffset = lineWidth / 2; - ctx.fillStyle = color; - landmarks.positions.forEach(function (pt) { return ctx.fillRect(pt.x - ptOffset, pt.y - ptOffset, lineWidth, lineWidth); }); - }); -} -exports.drawLandmarks = drawLandmarks; -//# sourceMappingURL=drawLandmarks.js.map \ No newline at end of file diff --git a/build/commonjs/dom/drawLandmarks.js.map b/build/commonjs/dom/drawLandmarks.js.map deleted file mode 100644 index 3d15c8a8..00000000 --- a/build/commonjs/dom/drawLandmarks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"drawLandmarks.js","sourceRoot":"","sources":["../../../src/dom/drawLandmarks.ts"],"names":[],"mappings":";;AAAA,2EAA4G;AAG5G,8DAA6D;AAC7D,6CAA4C;AAG5C,SAAgB,aAAa,CAC3B,SAAqC,EACrC,aAA8C,EAC9C,OAA8B;IAE9B,IAAM,MAAM,GAAG,0CAAY,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,CAAC,CAAC,MAAM,YAAY,iCAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;QAC5C,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;KACpF;IAED,IAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAC/B,mDAAqB,CAAC,OAAO,CAAC,EAC9B,CAAC,OAAO,IAAI,EAAE,CAAC,CAChB,CAAA;IAEO,IAAA,0EAAS,CAAyD;IAE1E,IAAM,GAAG,GAAG,iDAAmB,CAAC,MAAM,CAAC,CAAA;IAC/B,IAAA,iCAAS,EAAE,sBAAc,EAAd,mCAAc,CAAgB;IAEjD,IAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;IAEzF,kBAAkB,CAAC,OAAO,CAAC,UAAA,SAAS;QAClC,IAAI,SAAS,IAAI,SAAS,YAAY,iCAAe,EAAE;YACrD,GAAG,CAAC,WAAW,GAAG,KAAK,CAAA;YACvB,GAAG,CAAC,SAAS,GAAG,SAAS,CAAA;YACzB,yBAAW,CAAC,GAAG,EAAE,SAAS,CAAC,aAAa,EAAE,CAAC,CAAA;YAC3C,yBAAW,CAAC,GAAG,EAAE,SAAS,CAAC,cAAc,EAAE,CAAC,CAAA;YAC5C,yBAAW,CAAC,GAAG,EAAE,SAAS,CAAC,eAAe,EAAE,CAAC,CAAA;YAC7C,yBAAW,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAA;YACrC,yBAAW,CAAC,GAAG,EAAE,SAAS,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,CAAA;YAC9C,yBAAW,CAAC,GAAG,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAA;YAC/C,yBAAW,CAAC,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAA;YAC5C,OAAM;SACP;QAED,mBAAmB;QACnB,IAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAA;QAC9B,GAAG,CAAC,SAAS,GAAG,KAAK,CAAA;QACrB,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,UAAA,EAAE,IAAI,OAAA,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,EAApE,CAAoE,CAAC,CAAA;IACzG,CAAC,CAAC,CAAA;AACJ,CAAC;AAzCD,sCAyCC"} \ No newline at end of file diff --git a/build/commonjs/dom/extractFaceTensors.d.ts b/build/commonjs/dom/extractFaceTensors.d.ts deleted file mode 100644 index 429ea46e..00000000 --- a/build/commonjs/dom/extractFaceTensors.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { Rect } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -/** - * Extracts the tensors of the image regions containing the detected faces. - * Useful if you want to compute the face descriptors for the face images. - * Using this method is faster then extracting a canvas for each face and - * converting them to tensors individually. - * - * @param imageTensor The image tensor that face detection has been performed on. - * @param detections The face detection results or face bounding boxes for that image. - * @returns Tensors of the corresponding image region for each detected face. - */ -export declare function extractFaceTensors(imageTensor: tf.Tensor3D | tf.Tensor4D, detections: Array): Promise; diff --git a/build/commonjs/dom/extractFaceTensors.js b/build/commonjs/dom/extractFaceTensors.js deleted file mode 100644 index 129356a6..00000000 --- a/build/commonjs/dom/extractFaceTensors.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var FaceDetection_1 = require("../classes/FaceDetection"); -/** - * Extracts the tensors of the image regions containing the detected faces. - * Useful if you want to compute the face descriptors for the face images. - * Using this method is faster then extracting a canvas for each face and - * converting them to tensors individually. - * - * @param imageTensor The image tensor that face detection has been performed on. - * @param detections The face detection results or face bounding boxes for that image. - * @returns Tensors of the corresponding image region for each detected face. - */ -function extractFaceTensors(imageTensor, detections) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - if (!tfjs_image_recognition_base_1.isTensor3D(imageTensor) && !tfjs_image_recognition_base_1.isTensor4D(imageTensor)) { - throw new Error('extractFaceTensors - expected image tensor to be 3D or 4D'); - } - if (tfjs_image_recognition_base_1.isTensor4D(imageTensor) && imageTensor.shape[0] > 1) { - throw new Error('extractFaceTensors - batchSize > 1 not supported'); - } - return [2 /*return*/, tf.tidy(function () { - var _a = imageTensor.shape.slice(tfjs_image_recognition_base_1.isTensor4D(imageTensor) ? 1 : 0), imgHeight = _a[0], imgWidth = _a[1], numChannels = _a[2]; - var boxes = detections.map(function (det) { return det instanceof FaceDetection_1.FaceDetection - ? det.forSize(imgWidth, imgHeight).box - : det; }) - .map(function (box) { return box.clipAtImageBorders(imgWidth, imgHeight); }); - var faceTensors = boxes.map(function (_a) { - var x = _a.x, y = _a.y, width = _a.width, height = _a.height; - return tf.slice3d(imageTensor.as3D(imgHeight, imgWidth, numChannels), [y, x, 0], [height, width, numChannels]); - }); - return faceTensors; - })]; - }); - }); -} -exports.extractFaceTensors = extractFaceTensors; -//# sourceMappingURL=extractFaceTensors.js.map \ No newline at end of file diff --git a/build/commonjs/dom/extractFaceTensors.js.map b/build/commonjs/dom/extractFaceTensors.js.map deleted file mode 100644 index 1ad7fb81..00000000 --- a/build/commonjs/dom/extractFaceTensors.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractFaceTensors.js","sourceRoot":"","sources":["../../../src/dom/extractFaceTensors.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAC5C,2EAA2E;AAE3E,0DAAyD;AAEzD;;;;;;;;;GASG;AACH,SAAsB,kBAAkB,CACtC,WAAsC,EACtC,UAAuC;;;YAGvC,IAAI,CAAC,wCAAU,CAAC,WAAW,CAAC,IAAI,CAAC,wCAAU,CAAC,WAAW,CAAC,EAAE;gBACxD,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;aAC7E;YAED,IAAI,wCAAU,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;gBACvD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;aACpE;YAED,sBAAO,EAAE,CAAC,IAAI,CAAC;oBACP,IAAA,2FAA6F,EAA5F,iBAAS,EAAE,gBAAQ,EAAE,mBAAuE,CAAA;oBAEnG,IAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAC1B,UAAA,GAAG,IAAI,OAAA,GAAG,YAAY,6BAAa;wBACjC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,GAAG;wBACtC,CAAC,CAAC,GAAG,EAFA,CAEA,CACR;yBACE,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,EAA3C,CAA2C,CAAC,CAAA;oBAE1D,IAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,UAAC,EAAuB;4BAArB,QAAC,EAAE,QAAC,EAAE,gBAAK,EAAE,kBAAM;wBAClD,OAAA,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;oBAAvG,CAAuG,CACxG,CAAA;oBAED,OAAO,WAAW,CAAA;gBACpB,CAAC,CAAC,EAAA;;;CACH;AA7BD,gDA6BC"} \ No newline at end of file diff --git a/build/commonjs/dom/extractFaces.d.ts b/build/commonjs/dom/extractFaces.d.ts deleted file mode 100644 index d7bf0e60..00000000 --- a/build/commonjs/dom/extractFaces.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Rect, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -/** - * Extracts the image regions containing the detected faces. - * - * @param input The image that face detection has been performed on. - * @param detections The face detection results or face bounding boxes for that image. - * @returns The Canvases of the corresponding image region for each detected face. - */ -export declare function extractFaces(input: TNetInput, detections: Array): Promise; diff --git a/build/commonjs/dom/extractFaces.js b/build/commonjs/dom/extractFaces.js deleted file mode 100644 index 1b81e57f..00000000 --- a/build/commonjs/dom/extractFaces.js +++ /dev/null @@ -1,57 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var FaceDetection_1 = require("../classes/FaceDetection"); -/** - * Extracts the image regions containing the detected faces. - * - * @param input The image that face detection has been performed on. - * @param detections The face detection results or face bounding boxes for that image. - * @returns The Canvases of the corresponding image region for each detected face. - */ -function extractFaces(input, detections) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var Canvas, canvas, netInput, tensorOrCanvas, _a, ctx, boxes; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - Canvas = tfjs_image_recognition_base_1.env.getEnv().Canvas; - canvas = input; - if (!!(input instanceof Canvas)) return [3 /*break*/, 5]; - return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)]; - case 1: - netInput = _b.sent(); - if (netInput.batchSize > 1) { - throw new Error('extractFaces - batchSize > 1 not supported'); - } - tensorOrCanvas = netInput.getInput(0); - if (!(tensorOrCanvas instanceof Canvas)) return [3 /*break*/, 2]; - _a = tensorOrCanvas; - return [3 /*break*/, 4]; - case 2: return [4 /*yield*/, tfjs_image_recognition_base_1.imageTensorToCanvas(tensorOrCanvas)]; - case 3: - _a = _b.sent(); - _b.label = 4; - case 4: - canvas = _a; - _b.label = 5; - case 5: - ctx = tfjs_image_recognition_base_1.getContext2dOrThrow(canvas); - boxes = detections.map(function (det) { return det instanceof FaceDetection_1.FaceDetection - ? det.forSize(canvas.width, canvas.height).box.floor() - : det; }) - .map(function (box) { return box.clipAtImageBorders(canvas.width, canvas.height); }); - return [2 /*return*/, boxes.map(function (_a) { - var x = _a.x, y = _a.y, width = _a.width, height = _a.height; - var faceImg = tfjs_image_recognition_base_1.createCanvas({ width: width, height: height }); - tfjs_image_recognition_base_1.getContext2dOrThrow(faceImg) - .putImageData(ctx.getImageData(x, y, width, height), 0, 0); - return faceImg; - })]; - } - }); - }); -} -exports.extractFaces = extractFaces; -//# sourceMappingURL=extractFaces.js.map \ No newline at end of file diff --git a/build/commonjs/dom/extractFaces.js.map b/build/commonjs/dom/extractFaces.js.map deleted file mode 100644 index 1eca00ca..00000000 --- a/build/commonjs/dom/extractFaces.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractFaces.js","sourceRoot":"","sources":["../../../src/dom/extractFaces.ts"],"names":[],"mappings":";;;AAAA,2EAQqC;AAErC,0DAAyD;AAEzD;;;;;;GAMG;AACH,SAAsB,YAAY,CAChC,KAAgB,EAChB,UAAuC;;;;;;oBAG/B,MAAM,GAAK,iCAAG,CAAC,MAAM,EAAE,OAAjB,CAAiB;oBAE3B,MAAM,GAAG,KAA0B,CAAA;yBAEnC,CAAC,CAAC,KAAK,YAAY,MAAM,CAAC,EAA1B,wBAA0B;oBACX,qBAAM,wCAAU,CAAC,KAAK,CAAC,EAAA;;oBAAlC,QAAQ,GAAG,SAAuB;oBAExC,IAAI,QAAQ,CAAC,SAAS,GAAG,CAAC,EAAE;wBAC1B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;qBAC9D;oBAEK,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;yBAClC,CAAA,cAAc,YAAY,MAAM,CAAA,EAAhC,wBAAgC;oBACrC,KAAA,cAAc,CAAA;;wBACd,qBAAM,iDAAmB,CAAC,cAAc,CAAC,EAAA;;oBAAzC,KAAA,SAAyC,CAAA;;;oBAF7C,MAAM,KAEuC,CAAA;;;oBAGzC,GAAG,GAAG,iDAAmB,CAAC,MAAM,CAAC,CAAA;oBACjC,KAAK,GAAG,UAAU,CAAC,GAAG,CAC1B,UAAA,GAAG,IAAI,OAAA,GAAG,YAAY,6BAAa;wBACjC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE;wBACtD,CAAC,CAAC,GAAG,EAFA,CAEA,CACR;yBACE,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAnD,CAAmD,CAAC,CAAA;oBAElE,sBAAO,KAAK,CAAC,GAAG,CAAC,UAAC,EAAuB;gCAArB,QAAC,EAAE,QAAC,EAAE,gBAAK,EAAE,kBAAM;4BACrC,IAAM,OAAO,GAAG,0CAAY,CAAC,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAC,CAAA;4BAC/C,iDAAmB,CAAC,OAAO,CAAC;iCACzB,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;4BAC5D,OAAO,OAAO,CAAA;wBAChB,CAAC,CAAC,EAAA;;;;CACH;AApCD,oCAoCC"} \ No newline at end of file diff --git a/build/commonjs/dom/index.d.ts b/build/commonjs/dom/index.d.ts deleted file mode 100644 index 9b8d66e1..00000000 --- a/build/commonjs/dom/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './drawContour'; -export * from './drawLandmarks'; -export * from './drawFaceExpressions'; -export * from './extractFaces'; -export * from './extractFaceTensors'; -export * from './types'; diff --git a/build/commonjs/dom/index.js b/build/commonjs/dom/index.js deleted file mode 100644 index 70cc71bd..00000000 --- a/build/commonjs/dom/index.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -tslib_1.__exportStar(require("./drawContour"), exports); -tslib_1.__exportStar(require("./drawLandmarks"), exports); -tslib_1.__exportStar(require("./drawFaceExpressions"), exports); -tslib_1.__exportStar(require("./extractFaces"), exports); -tslib_1.__exportStar(require("./extractFaceTensors"), exports); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/commonjs/dom/index.js.map b/build/commonjs/dom/index.js.map deleted file mode 100644 index 292d4409..00000000 --- a/build/commonjs/dom/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dom/index.ts"],"names":[],"mappings":";;;AAAA,wDAA6B;AAC7B,0DAA+B;AAC/B,gEAAqC;AACrC,yDAA8B;AAC9B,+DAAoC"} \ No newline at end of file diff --git a/build/commonjs/dom/types.d.ts b/build/commonjs/dom/types.d.ts deleted file mode 100644 index e1f3d6f6..00000000 --- a/build/commonjs/dom/types.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { IPoint, IRect } from 'tfjs-image-recognition-base'; -import { WithFaceExpressions } from '../factories/WithFaceExpressions'; -export declare type DrawLandmarksOptions = { - lineWidth?: number; - color?: string; - drawLines?: boolean; -}; -export declare type DrawFaceExpressionsOptions = { - primaryColor?: string; - secondaryColor?: string; - primaryFontSize?: number; - secondaryFontSize?: number; - minConfidence?: number; -}; -export declare type DrawFaceExpressionsInput = WithFaceExpressions<{ - position: IPoint | IRect; -}>; diff --git a/build/commonjs/dom/types.js b/build/commonjs/dom/types.js deleted file mode 100644 index 11e638d1..00000000 --- a/build/commonjs/dom/types.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/commonjs/dom/types.js.map b/build/commonjs/dom/types.js.map deleted file mode 100644 index 81849c01..00000000 --- a/build/commonjs/dom/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dom/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/build/commonjs/euclideanDistance.d.ts b/build/commonjs/euclideanDistance.d.ts deleted file mode 100644 index d555de27..00000000 --- a/build/commonjs/euclideanDistance.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function euclideanDistance(arr1: number[] | Float32Array, arr2: number[] | Float32Array): number; diff --git a/build/commonjs/euclideanDistance.js b/build/commonjs/euclideanDistance.js deleted file mode 100644 index e263610d..00000000 --- a/build/commonjs/euclideanDistance.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function euclideanDistance(arr1, arr2) { - if (arr1.length !== arr2.length) - throw new Error('euclideanDistance: arr1.length !== arr2.length'); - var desc1 = Array.from(arr1); - var desc2 = Array.from(arr2); - return Math.sqrt(desc1 - .map(function (val, i) { return val - desc2[i]; }) - .reduce(function (res, diff) { return res + Math.pow(diff, 2); }, 0)); -} -exports.euclideanDistance = euclideanDistance; -//# sourceMappingURL=euclideanDistance.js.map \ No newline at end of file diff --git a/build/commonjs/euclideanDistance.js.map b/build/commonjs/euclideanDistance.js.map deleted file mode 100644 index 268173bf..00000000 --- a/build/commonjs/euclideanDistance.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"euclideanDistance.js","sourceRoot":"","sources":["../../src/euclideanDistance.ts"],"names":[],"mappings":";;AAAA,SAAgB,iBAAiB,CAAC,IAA6B,EAAE,IAA6B;IAC5F,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;QAC7B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;IAEnE,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9B,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAE9B,OAAO,IAAI,CAAC,IAAI,CACd,KAAK;SACF,GAAG,CAAC,UAAC,GAAG,EAAE,CAAC,IAAK,OAAA,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAd,CAAc,CAAC;SAC/B,MAAM,CAAC,UAAC,GAAG,EAAE,IAAI,IAAK,OAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAvB,CAAuB,EAAE,CAAC,CAAC,CACrD,CAAA;AACH,CAAC;AAZD,8CAYC"} \ No newline at end of file diff --git a/build/commonjs/faceExpressionNet/FaceExpressionNet.d.ts b/build/commonjs/faceExpressionNet/FaceExpressionNet.d.ts deleted file mode 100644 index c65e2801..00000000 --- a/build/commonjs/faceExpressionNet/FaceExpressionNet.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor'; -import { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types'; -import { FaceProcessor } from '../faceProcessor/FaceProcessor'; -import { FaceExpressionPrediction } from './types'; -export declare class FaceExpressionNet extends FaceProcessor { - static getFaceExpressionLabel(faceExpression: string): number; - static decodeProbabilites(probabilities: number[] | Float32Array): FaceExpressionPrediction[]; - constructor(faceFeatureExtractor?: FaceFeatureExtractor); - forwardInput(input: NetInput | tf.Tensor4D): tf.Tensor2D; - forward(input: TNetInput): Promise; - predictExpressions(input: TNetInput): Promise; - protected getDefaultModelName(): string; - protected getClassifierChannelsIn(): number; - protected getClassifierChannelsOut(): number; -} diff --git a/build/commonjs/faceExpressionNet/FaceExpressionNet.js b/build/commonjs/faceExpressionNet/FaceExpressionNet.js deleted file mode 100644 index 5509a965..00000000 --- a/build/commonjs/faceExpressionNet/FaceExpressionNet.js +++ /dev/null @@ -1,94 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var FaceFeatureExtractor_1 = require("../faceFeatureExtractor/FaceFeatureExtractor"); -var FaceProcessor_1 = require("../faceProcessor/FaceProcessor"); -var types_1 = require("./types"); -var FaceExpressionNet = /** @class */ (function (_super) { - tslib_1.__extends(FaceExpressionNet, _super); - function FaceExpressionNet(faceFeatureExtractor) { - if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new FaceFeatureExtractor_1.FaceFeatureExtractor(); } - return _super.call(this, 'FaceExpressionNet', faceFeatureExtractor) || this; - } - FaceExpressionNet.getFaceExpressionLabel = function (faceExpression) { - var label = types_1.faceExpressionLabels[faceExpression]; - if (typeof label !== 'number') { - throw new Error("getFaceExpressionLabel - no label for faceExpression: " + faceExpression); - } - return label; - }; - FaceExpressionNet.decodeProbabilites = function (probabilities) { - if (probabilities.length !== 7) { - throw new Error("decodeProbabilites - expected probabilities.length to be 7, have: " + probabilities.length); - } - return Object.keys(types_1.faceExpressionLabels) - .map(function (expression) { return ({ expression: expression, probability: probabilities[types_1.faceExpressionLabels[expression]] }); }); - }; - FaceExpressionNet.prototype.forwardInput = function (input) { - var _this = this; - return tf.tidy(function () { return tf.softmax(_this.runNet(input)); }); - }; - FaceExpressionNet.prototype.forward = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - FaceExpressionNet.prototype.predictExpressions = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var netInput, out, probabilitesByBatch, predictionsByBatch; - var _this = this; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)]; - case 1: - netInput = _a.sent(); - return [4 /*yield*/, this.forwardInput(netInput)]; - case 2: - out = _a.sent(); - return [4 /*yield*/, Promise.all(tf.unstack(out).map(function (t) { return tslib_1.__awaiter(_this, void 0, void 0, function () { - var data; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, t.data()]; - case 1: - data = _a.sent(); - t.dispose(); - return [2 /*return*/, data]; - } - }); - }); }))]; - case 3: - probabilitesByBatch = _a.sent(); - out.dispose(); - predictionsByBatch = probabilitesByBatch - .map(function (propablities) { return FaceExpressionNet.decodeProbabilites(propablities); }); - return [2 /*return*/, netInput.isBatchInput - ? predictionsByBatch - : predictionsByBatch[0]]; - } - }); - }); - }; - FaceExpressionNet.prototype.getDefaultModelName = function () { - return 'face_expression_model'; - }; - FaceExpressionNet.prototype.getClassifierChannelsIn = function () { - return 256; - }; - FaceExpressionNet.prototype.getClassifierChannelsOut = function () { - return 7; - }; - return FaceExpressionNet; -}(FaceProcessor_1.FaceProcessor)); -exports.FaceExpressionNet = FaceExpressionNet; -//# sourceMappingURL=FaceExpressionNet.js.map \ No newline at end of file diff --git a/build/commonjs/faceExpressionNet/FaceExpressionNet.js.map b/build/commonjs/faceExpressionNet/FaceExpressionNet.js.map deleted file mode 100644 index a65ad4fe..00000000 --- a/build/commonjs/faceExpressionNet/FaceExpressionNet.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceExpressionNet.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/FaceExpressionNet.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAC5C,2EAA8E;AAE9E,qFAAoF;AAEpF,gEAA+D;AAC/D,iCAAyF;AAEzF;IAAuC,6CAAyC;IAqB9E,2BAAY,oBAAuE;QAAvE,qCAAA,EAAA,2BAAiD,2CAAoB,EAAE;eACjF,kBAAM,mBAAmB,EAAE,oBAAoB,CAAC;IAClD,CAAC;IArBa,wCAAsB,GAApC,UAAqC,cAAsB;QACzD,IAAM,KAAK,GAAG,4BAAoB,CAAC,cAAc,CAAC,CAAA;QAElD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,2DAAyD,cAAgB,CAAC,CAAA;SAC3F;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAEa,oCAAkB,GAAhC,UAAiC,aAAsC;QACrE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,uEAAqE,aAAa,CAAC,MAAQ,CAAC,CAAA;SAC7G;QAED,OAAQ,MAAM,CAAC,IAAI,CAAC,4BAAoB,CAAsB;aAC3D,GAAG,CAAC,UAAA,UAAU,IAAI,OAAA,CAAC,EAAE,UAAU,YAAA,EAAE,WAAW,EAAE,aAAa,CAAC,4BAAoB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAA9E,CAA8E,CAAC,CAAA;IACtG,CAAC;IAMM,wCAAY,GAAnB,UAAoB,KAA6B;QAAjD,iBAEC;QADC,OAAO,EAAE,CAAC,IAAI,CAAC,cAAM,OAAA,EAAE,CAAC,OAAO,CAAC,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAA9B,CAA8B,CAAC,CAAA;IACtD,CAAC;IAEY,mCAAO,GAApB,UAAqB,KAAgB;;;;;;wBAC5B,KAAA,IAAI,CAAC,YAAY,CAAA;wBAAC,qBAAM,wCAAU,CAAC,KAAK,CAAC,EAAA;4BAAhD,sBAAO,SAAA,IAAI,GAAc,SAAuB,EAAC,EAAA;;;;KAClD;IAEY,8CAAkB,GAA/B,UAAgC,KAAgB;;;;;;4BAC7B,qBAAM,wCAAU,CAAC,KAAK,CAAC,EAAA;;wBAAlC,QAAQ,GAAG,SAAuB;wBAC5B,qBAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAA;;wBAAvC,GAAG,GAAG,SAAiC;wBACjB,qBAAM,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAM,CAAC;;;;gDAC1D,qBAAM,CAAC,CAAC,IAAI,EAAE,EAAA;;4CAArB,IAAI,GAAG,SAAc;4CAC3B,CAAC,CAAC,OAAO,EAAE,CAAA;4CACX,sBAAO,IAAI,EAAA;;;iCACZ,CAAC,CAAC,EAAA;;wBAJG,mBAAmB,GAAG,SAIzB;wBACH,GAAG,CAAC,OAAO,EAAE,CAAA;wBAEP,kBAAkB,GAAG,mBAAmB;6BAC3C,GAAG,CAAC,UAAA,YAAY,IAAI,OAAA,iBAAiB,CAAC,kBAAkB,CAAC,YAA4B,CAAC,EAAlE,CAAkE,CAAC,CAAA;wBAE1F,sBAAO,QAAQ,CAAC,YAAY;gCAC1B,CAAC,CAAC,kBAAkB;gCACpB,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAA;;;;KAC1B;IAES,+CAAmB,GAA7B;QACE,OAAO,uBAAuB,CAAA;IAChC,CAAC;IAES,mDAAuB,GAAjC;QACE,OAAO,GAAG,CAAA;IACZ,CAAC;IAES,oDAAwB,GAAlC;QACE,OAAO,CAAC,CAAA;IACV,CAAC;IACH,wBAAC;AAAD,CAAC,AA9DD,CAAuC,6BAAa,GA8DnD;AA9DY,8CAAiB"} \ No newline at end of file diff --git a/build/commonjs/faceExpressionNet/index.d.ts b/build/commonjs/faceExpressionNet/index.d.ts deleted file mode 100644 index 1c3a169f..00000000 --- a/build/commonjs/faceExpressionNet/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './FaceExpressionNet'; -export * from './types'; diff --git a/build/commonjs/faceExpressionNet/index.js b/build/commonjs/faceExpressionNet/index.js deleted file mode 100644 index 5450aa1a..00000000 --- a/build/commonjs/faceExpressionNet/index.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -tslib_1.__exportStar(require("./FaceExpressionNet"), exports); -tslib_1.__exportStar(require("./types"), exports); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/commonjs/faceExpressionNet/index.js.map b/build/commonjs/faceExpressionNet/index.js.map deleted file mode 100644 index 95834800..00000000 --- a/build/commonjs/faceExpressionNet/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/index.ts"],"names":[],"mappings":";;;AAAA,8DAAoC;AACpC,kDAAwB"} \ No newline at end of file diff --git a/build/commonjs/faceExpressionNet/types.d.ts b/build/commonjs/faceExpressionNet/types.d.ts deleted file mode 100644 index 154e48b2..00000000 --- a/build/commonjs/faceExpressionNet/types.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -export declare const faceExpressionLabels: { - neutral: number; - happy: number; - sad: number; - angry: number; - fearful: number; - disgusted: number; - surprised: number; -}; -export declare type FaceExpression = 'neutral' | 'happy' | 'sad' | 'angry' | 'fearful' | 'disgusted' | 'surprised'; -export declare type FaceExpressionPrediction = { - expression: FaceExpression; - probability: number; -}; diff --git a/build/commonjs/faceExpressionNet/types.js b/build/commonjs/faceExpressionNet/types.js deleted file mode 100644 index 45b3c35f..00000000 --- a/build/commonjs/faceExpressionNet/types.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.faceExpressionLabels = { - neutral: 0, - happy: 1, - sad: 2, - angry: 3, - fearful: 4, - disgusted: 5, - surprised: 6 -}; -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/commonjs/faceExpressionNet/types.js.map b/build/commonjs/faceExpressionNet/types.js.map deleted file mode 100644 index 389bbe64..00000000 --- a/build/commonjs/faceExpressionNet/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/types.ts"],"names":[],"mappings":";;AAAa,QAAA,oBAAoB,GAAG;IAClC,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;IACR,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,CAAC;IACZ,SAAS,EAAC,CAAC;CACZ,CAAA"} \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/FaceFeatureExtractor.d.ts b/build/commonjs/faceFeatureExtractor/FaceFeatureExtractor.d.ts deleted file mode 100644 index 35b86231..00000000 --- a/build/commonjs/faceFeatureExtractor/FaceFeatureExtractor.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceFeatureExtractorParams, IFaceFeatureExtractor } from './types'; -export declare class FaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor { - constructor(); - forwardInput(input: NetInput): tf.Tensor4D; - forward(input: TNetInput): Promise; - protected getDefaultModelName(): string; - protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: FaceFeatureExtractorParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; - protected extractParams(weights: Float32Array): { - params: FaceFeatureExtractorParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; -} diff --git a/build/commonjs/faceFeatureExtractor/FaceFeatureExtractor.js b/build/commonjs/faceFeatureExtractor/FaceFeatureExtractor.js deleted file mode 100644 index a2994c01..00000000 --- a/build/commonjs/faceFeatureExtractor/FaceFeatureExtractor.js +++ /dev/null @@ -1,56 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var denseBlock_1 = require("./denseBlock"); -var extractParams_1 = require("./extractParams"); -var extractParamsFromWeigthMap_1 = require("./extractParamsFromWeigthMap"); -var FaceFeatureExtractor = /** @class */ (function (_super) { - tslib_1.__extends(FaceFeatureExtractor, _super); - function FaceFeatureExtractor() { - return _super.call(this, 'FaceFeatureExtractor') || this; - } - FaceFeatureExtractor.prototype.forwardInput = function (input) { - var params = this.params; - if (!params) { - throw new Error('FaceFeatureExtractor - load model before inference'); - } - return tf.tidy(function () { - var batchTensor = input.toBatchTensor(112, true); - var meanRgb = [122.782, 117.001, 104.298]; - var normalized = tfjs_image_recognition_base_1.normalize(batchTensor, meanRgb).div(tf.scalar(255)); - var out = denseBlock_1.denseBlock4(normalized, params.dense0, true); - out = denseBlock_1.denseBlock4(out, params.dense1); - out = denseBlock_1.denseBlock4(out, params.dense2); - out = denseBlock_1.denseBlock4(out, params.dense3); - out = tf.avgPool(out, [7, 7], [2, 2], 'valid'); - return out; - }); - }; - FaceFeatureExtractor.prototype.forward = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - FaceFeatureExtractor.prototype.getDefaultModelName = function () { - return 'face_feature_extractor_model'; - }; - FaceFeatureExtractor.prototype.extractParamsFromWeigthMap = function (weightMap) { - return extractParamsFromWeigthMap_1.extractParamsFromWeigthMap(weightMap); - }; - FaceFeatureExtractor.prototype.extractParams = function (weights) { - return extractParams_1.extractParams(weights); - }; - return FaceFeatureExtractor; -}(tfjs_image_recognition_base_1.NeuralNetwork)); -exports.FaceFeatureExtractor = FaceFeatureExtractor; -//# sourceMappingURL=FaceFeatureExtractor.js.map \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/FaceFeatureExtractor.js.map b/build/commonjs/faceFeatureExtractor/FaceFeatureExtractor.js.map deleted file mode 100644 index 5b75fc14..00000000 --- a/build/commonjs/faceFeatureExtractor/FaceFeatureExtractor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceFeatureExtractor.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/FaceFeatureExtractor.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAC5C,2EAAwG;AAExG,2CAA2C;AAC3C,iDAAgD;AAChD,2EAA0E;AAG1E;IAA0C,gDAAyC;IAEjF;eACE,kBAAM,sBAAsB,CAAC;IAC/B,CAAC;IAEM,2CAAY,GAAnB,UAAoB,KAAe;QAEzB,IAAA,oBAAM,CAAS;QAEvB,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;SACtE;QAED,OAAO,EAAE,CAAC,IAAI,CAAC;YACb,IAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAClD,IAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;YAC3C,IAAM,UAAU,GAAG,uCAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAgB,CAAA;YAErF,IAAI,GAAG,GAAG,wBAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACtD,GAAG,GAAG,wBAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,wBAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,wBAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YAE9C,OAAO,GAAG,CAAA;QACZ,CAAC,CAAC,CAAA;IACJ,CAAC;IAEY,sCAAO,GAApB,UAAqB,KAAgB;;;;;;wBAC5B,KAAA,IAAI,CAAC,YAAY,CAAA;wBAAC,qBAAM,wCAAU,CAAC,KAAK,CAAC,EAAA;4BAAhD,sBAAO,SAAA,IAAI,GAAc,SAAuB,EAAC,EAAA;;;;KAClD;IAES,kDAAmB,GAA7B;QACE,OAAO,8BAA8B,CAAA;IACvC,CAAC;IAES,yDAA0B,GAApC,UAAqC,SAA4B;QAC/D,OAAO,uDAA0B,CAAC,SAAS,CAAC,CAAA;IAC9C,CAAC;IAES,4CAAa,GAAvB,UAAwB,OAAqB;QAC3C,OAAO,6BAAa,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC;IACH,2BAAC;AAAD,CAAC,AA5CD,CAA0C,2CAAa,GA4CtD;AA5CY,oDAAoB"} \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/TinyFaceFeatureExtractor.d.ts b/build/commonjs/faceFeatureExtractor/TinyFaceFeatureExtractor.d.ts deleted file mode 100644 index 4e9957ca..00000000 --- a/build/commonjs/faceFeatureExtractor/TinyFaceFeatureExtractor.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base'; -import { IFaceFeatureExtractor, TinyFaceFeatureExtractorParams } from './types'; -export declare class TinyFaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor { - constructor(); - forwardInput(input: NetInput): tf.Tensor4D; - forward(input: TNetInput): Promise; - protected getDefaultModelName(): string; - protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: TinyFaceFeatureExtractorParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; - protected extractParams(weights: Float32Array): { - params: TinyFaceFeatureExtractorParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; -} diff --git a/build/commonjs/faceFeatureExtractor/TinyFaceFeatureExtractor.js b/build/commonjs/faceFeatureExtractor/TinyFaceFeatureExtractor.js deleted file mode 100644 index e70f8cb3..00000000 --- a/build/commonjs/faceFeatureExtractor/TinyFaceFeatureExtractor.js +++ /dev/null @@ -1,55 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var denseBlock_1 = require("./denseBlock"); -var extractParamsFromWeigthMapTiny_1 = require("./extractParamsFromWeigthMapTiny"); -var extractParamsTiny_1 = require("./extractParamsTiny"); -var TinyFaceFeatureExtractor = /** @class */ (function (_super) { - tslib_1.__extends(TinyFaceFeatureExtractor, _super); - function TinyFaceFeatureExtractor() { - return _super.call(this, 'TinyFaceFeatureExtractor') || this; - } - TinyFaceFeatureExtractor.prototype.forwardInput = function (input) { - var params = this.params; - if (!params) { - throw new Error('TinyFaceFeatureExtractor - load model before inference'); - } - return tf.tidy(function () { - var batchTensor = input.toBatchTensor(112, true); - var meanRgb = [122.782, 117.001, 104.298]; - var normalized = tfjs_image_recognition_base_1.normalize(batchTensor, meanRgb).div(tf.scalar(255)); - var out = denseBlock_1.denseBlock3(normalized, params.dense0, true); - out = denseBlock_1.denseBlock3(out, params.dense1); - out = denseBlock_1.denseBlock3(out, params.dense2); - out = tf.avgPool(out, [14, 14], [2, 2], 'valid'); - return out; - }); - }; - TinyFaceFeatureExtractor.prototype.forward = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - TinyFaceFeatureExtractor.prototype.getDefaultModelName = function () { - return 'face_feature_extractor_tiny_model'; - }; - TinyFaceFeatureExtractor.prototype.extractParamsFromWeigthMap = function (weightMap) { - return extractParamsFromWeigthMapTiny_1.extractParamsFromWeigthMapTiny(weightMap); - }; - TinyFaceFeatureExtractor.prototype.extractParams = function (weights) { - return extractParamsTiny_1.extractParamsTiny(weights); - }; - return TinyFaceFeatureExtractor; -}(tfjs_image_recognition_base_1.NeuralNetwork)); -exports.TinyFaceFeatureExtractor = TinyFaceFeatureExtractor; -//# sourceMappingURL=TinyFaceFeatureExtractor.js.map \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/TinyFaceFeatureExtractor.js.map b/build/commonjs/faceFeatureExtractor/TinyFaceFeatureExtractor.js.map deleted file mode 100644 index e4659264..00000000 --- a/build/commonjs/faceFeatureExtractor/TinyFaceFeatureExtractor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TinyFaceFeatureExtractor.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAC5C,2EAAwG;AAExG,2CAA2C;AAC3C,mFAAkF;AAClF,yDAAwD;AAGxD;IAA8C,oDAA6C;IAEzF;eACE,kBAAM,0BAA0B,CAAC;IACnC,CAAC;IAEM,+CAAY,GAAnB,UAAoB,KAAe;QAEzB,IAAA,oBAAM,CAAS;QAEvB,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;SAC1E;QAED,OAAO,EAAE,CAAC,IAAI,CAAC;YACb,IAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAClD,IAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;YAC3C,IAAM,UAAU,GAAG,uCAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAgB,CAAA;YAErF,IAAI,GAAG,GAAG,wBAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACtD,GAAG,GAAG,wBAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,wBAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YAEhD,OAAO,GAAG,CAAA;QACZ,CAAC,CAAC,CAAA;IACJ,CAAC;IAEY,0CAAO,GAApB,UAAqB,KAAgB;;;;;;wBAC5B,KAAA,IAAI,CAAC,YAAY,CAAA;wBAAC,qBAAM,wCAAU,CAAC,KAAK,CAAC,EAAA;4BAAhD,sBAAO,SAAA,IAAI,GAAc,SAAuB,EAAC,EAAA;;;;KAClD;IAES,sDAAmB,GAA7B;QACE,OAAO,mCAAmC,CAAA;IAC5C,CAAC;IAES,6DAA0B,GAApC,UAAqC,SAA4B;QAC/D,OAAO,+DAA8B,CAAC,SAAS,CAAC,CAAA;IAClD,CAAC;IAES,gDAAa,GAAvB,UAAwB,OAAqB;QAC3C,OAAO,qCAAiB,CAAC,OAAO,CAAC,CAAA;IACnC,CAAC;IACH,+BAAC;AAAD,CAAC,AA3CD,CAA8C,2CAAa,GA2C1D;AA3CY,4DAAwB"} \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/denseBlock.d.ts b/build/commonjs/faceFeatureExtractor/denseBlock.d.ts deleted file mode 100644 index 685af3ba..00000000 --- a/build/commonjs/faceFeatureExtractor/denseBlock.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { DenseBlock3Params, DenseBlock4Params } from './types'; -export declare function denseBlock3(x: tf.Tensor4D, denseBlockParams: DenseBlock3Params, isFirstLayer?: boolean): tf.Tensor4D; -export declare function denseBlock4(x: tf.Tensor4D, denseBlockParams: DenseBlock4Params, isFirstLayer?: boolean, isScaleDown?: boolean): tf.Tensor4D; diff --git a/build/commonjs/faceFeatureExtractor/denseBlock.js b/build/commonjs/faceFeatureExtractor/denseBlock.js deleted file mode 100644 index a04c4749..00000000 --- a/build/commonjs/faceFeatureExtractor/denseBlock.js +++ /dev/null @@ -1,34 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -var depthwiseSeparableConv_1 = require("./depthwiseSeparableConv"); -function denseBlock3(x, denseBlockParams, isFirstLayer) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - return tf.tidy(function () { - var out1 = tf.relu(isFirstLayer - ? tf.add(tf.conv2d(x, denseBlockParams.conv0.filters, [2, 2], 'same'), denseBlockParams.conv0.bias) - : depthwiseSeparableConv_1.depthwiseSeparableConv(x, denseBlockParams.conv0, [2, 2])); - var out2 = depthwiseSeparableConv_1.depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]); - var in3 = tf.relu(tf.add(out1, out2)); - var out3 = depthwiseSeparableConv_1.depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]); - return tf.relu(tf.add(out1, tf.add(out2, out3))); - }); -} -exports.denseBlock3 = denseBlock3; -function denseBlock4(x, denseBlockParams, isFirstLayer, isScaleDown) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - if (isScaleDown === void 0) { isScaleDown = true; } - return tf.tidy(function () { - var out1 = tf.relu(isFirstLayer - ? tf.add(tf.conv2d(x, denseBlockParams.conv0.filters, isScaleDown ? [2, 2] : [1, 1], 'same'), denseBlockParams.conv0.bias) - : depthwiseSeparableConv_1.depthwiseSeparableConv(x, denseBlockParams.conv0, isScaleDown ? [2, 2] : [1, 1])); - var out2 = depthwiseSeparableConv_1.depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]); - var in3 = tf.relu(tf.add(out1, out2)); - var out3 = depthwiseSeparableConv_1.depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]); - var in4 = tf.relu(tf.add(out1, tf.add(out2, out3))); - var out4 = depthwiseSeparableConv_1.depthwiseSeparableConv(in4, denseBlockParams.conv3, [1, 1]); - return tf.relu(tf.add(out1, tf.add(out2, tf.add(out3, out4)))); - }); -} -exports.denseBlock4 = denseBlock4; -//# sourceMappingURL=denseBlock.js.map \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/denseBlock.js.map b/build/commonjs/faceFeatureExtractor/denseBlock.js.map deleted file mode 100644 index 377425b6..00000000 --- a/build/commonjs/faceFeatureExtractor/denseBlock.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"denseBlock.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/denseBlock.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/depthwiseSeparableConv.d.ts b/build/commonjs/faceFeatureExtractor/depthwiseSeparableConv.d.ts deleted file mode 100644 index 10ada1a9..00000000 --- a/build/commonjs/faceFeatureExtractor/depthwiseSeparableConv.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export declare function depthwiseSeparableConv(x: tf.Tensor4D, params: TfjsImageRecognitionBase.SeparableConvParams, stride: [number, number]): tf.Tensor4D; diff --git a/build/commonjs/faceFeatureExtractor/depthwiseSeparableConv.js b/build/commonjs/faceFeatureExtractor/depthwiseSeparableConv.js deleted file mode 100644 index 969f2522..00000000 --- a/build/commonjs/faceFeatureExtractor/depthwiseSeparableConv.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -function depthwiseSeparableConv(x, params, stride) { - return tf.tidy(function () { - var out = tf.separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same'); - out = tf.add(out, params.bias); - return out; - }); -} -exports.depthwiseSeparableConv = depthwiseSeparableConv; -//# sourceMappingURL=depthwiseSeparableConv.js.map \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/depthwiseSeparableConv.js.map b/build/commonjs/faceFeatureExtractor/depthwiseSeparableConv.js.map deleted file mode 100644 index 637d26ca..00000000 --- a/build/commonjs/faceFeatureExtractor/depthwiseSeparableConv.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"depthwiseSeparableConv.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/depthwiseSeparableConv.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAG5C,SAAgB,sBAAsB,CACpC,CAAc,EACd,MAAoD,EACpD,MAAwB;IAExB,OAAO,EAAE,CAAC,IAAI,CAAC;QACb,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QACjG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9B,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC;AAVD,wDAUC"} \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/extractParams.d.ts b/build/commonjs/faceFeatureExtractor/extractParams.d.ts deleted file mode 100644 index acbea252..00000000 --- a/build/commonjs/faceFeatureExtractor/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { FaceFeatureExtractorParams } from './types'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export declare function extractParams(weights: Float32Array): { - params: FaceFeatureExtractorParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/commonjs/faceFeatureExtractor/extractParams.js b/build/commonjs/faceFeatureExtractor/extractParams.js deleted file mode 100644 index c0fac2ad..00000000 --- a/build/commonjs/faceFeatureExtractor/extractParams.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var extractorsFactory_1 = require("./extractorsFactory"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -function extractParams(weights) { - var paramMappings = []; - var _a = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var extractDenseBlock4Params = extractorsFactory_1.extractorsFactory(extractWeights, paramMappings).extractDenseBlock4Params; - var dense0 = extractDenseBlock4Params(3, 32, 'dense0', true); - var dense1 = extractDenseBlock4Params(32, 64, 'dense1'); - var dense2 = extractDenseBlock4Params(64, 128, 'dense2'); - var dense3 = extractDenseBlock4Params(128, 256, 'dense3'); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { - paramMappings: paramMappings, - params: { dense0: dense0, dense1: dense1, dense2: dense2, dense3: dense3 } - }; -} -exports.extractParams = extractParams; -//# sourceMappingURL=extractParams.js.map \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/extractParams.js.map b/build/commonjs/faceFeatureExtractor/extractParams.js.map deleted file mode 100644 index e6a02adb..00000000 --- a/build/commonjs/faceFeatureExtractor/extractParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/extractParams.ts"],"names":[],"mappings":";;AACA,yDAAwD;AAExD,2EAAuE;AAEvE,SAAgB,aAAa,CAAC,OAAqB;IAEjD,IAAM,aAAa,GAA4C,EAAE,CAAA;IAE3D,IAAA,0FAGqD,EAFzD,kCAAc,EACd,4CACyD,CAAA;IAGzD,IAAA,wHAAwB,CAC0B;IAEpD,IAAM,MAAM,GAAG,wBAAwB,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;IAC9D,IAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAA;IACzD,IAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC1D,IAAM,MAAM,GAAG,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;IAE3D,IAAI,mBAAmB,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,oCAAkC,mBAAmB,EAAE,CAAC,MAAQ,CAAC,CAAA;KAClF;IAED,OAAO;QACL,aAAa,eAAA;QACb,MAAM,EAAE,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE;KAC3C,CAAA;AACH,CAAC;AA1BD,sCA0BC"} \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMap.d.ts b/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMap.d.ts deleted file mode 100644 index 5c964fcc..00000000 --- a/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMap.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { FaceFeatureExtractorParams } from './types'; -export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: FaceFeatureExtractorParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMap.js b/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMap.js deleted file mode 100644 index 63408600..00000000 --- a/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMap.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var loadParamsFactory_1 = require("./loadParamsFactory"); -function extractParamsFromWeigthMap(weightMap) { - var paramMappings = []; - var extractDenseBlock4Params = loadParamsFactory_1.loadParamsFactory(weightMap, paramMappings).extractDenseBlock4Params; - var params = { - dense0: extractDenseBlock4Params('dense0', true), - dense1: extractDenseBlock4Params('dense1'), - dense2: extractDenseBlock4Params('dense2'), - dense3: extractDenseBlock4Params('dense3') - }; - tfjs_image_recognition_base_1.TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: params, paramMappings: paramMappings }; -} -exports.extractParamsFromWeigthMap = extractParamsFromWeigthMap; -//# sourceMappingURL=extractParamsFromWeigthMap.js.map \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMap.js.map b/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMap.js.map deleted file mode 100644 index 1aa7ee06..00000000 --- a/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMap.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParamsFromWeigthMap.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/extractParamsFromWeigthMap.ts"],"names":[],"mappings":";;AACA,2EAAuE;AAEvE,yDAAwD;AAGxD,SAAgB,0BAA0B,CACxC,SAA4B;IAG5B,IAAM,aAAa,GAA4C,EAAE,CAAA;IAG/D,IAAA,mHAAwB,CACqB;IAE/C,IAAM,MAAM,GAAG;QACb,MAAM,EAAE,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC;QAChD,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;QAC1C,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;QAC1C,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;KAC3C,CAAA;IAED,sDAAwB,CAAC,0BAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAE7E,OAAO,EAAE,MAAM,QAAA,EAAE,aAAa,eAAA,EAAE,CAAA;AAClC,CAAC;AApBD,gEAoBC"} \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMapTiny.d.ts b/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMapTiny.d.ts deleted file mode 100644 index 7d597dd2..00000000 --- a/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMapTiny.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { TinyFaceFeatureExtractorParams } from './types'; -export declare function extractParamsFromWeigthMapTiny(weightMap: tf.NamedTensorMap): { - params: TinyFaceFeatureExtractorParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMapTiny.js b/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMapTiny.js deleted file mode 100644 index 51ef4701..00000000 --- a/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMapTiny.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var loadParamsFactory_1 = require("./loadParamsFactory"); -function extractParamsFromWeigthMapTiny(weightMap) { - var paramMappings = []; - var extractDenseBlock3Params = loadParamsFactory_1.loadParamsFactory(weightMap, paramMappings).extractDenseBlock3Params; - var params = { - dense0: extractDenseBlock3Params('dense0', true), - dense1: extractDenseBlock3Params('dense1'), - dense2: extractDenseBlock3Params('dense2') - }; - tfjs_image_recognition_base_1.TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: params, paramMappings: paramMappings }; -} -exports.extractParamsFromWeigthMapTiny = extractParamsFromWeigthMapTiny; -//# sourceMappingURL=extractParamsFromWeigthMapTiny.js.map \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMapTiny.js.map b/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMapTiny.js.map deleted file mode 100644 index 6ce31f00..00000000 --- a/build/commonjs/faceFeatureExtractor/extractParamsFromWeigthMapTiny.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParamsFromWeigthMapTiny.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts"],"names":[],"mappings":";;AACA,2EAAuE;AAEvE,yDAAwD;AAGxD,SAAgB,8BAA8B,CAC5C,SAA4B;IAG5B,IAAM,aAAa,GAA4C,EAAE,CAAA;IAG/D,IAAA,mHAAwB,CACqB;IAE/C,IAAM,MAAM,GAAG;QACb,MAAM,EAAE,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC;QAChD,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;QAC1C,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;KAC3C,CAAA;IAED,sDAAwB,CAAC,0BAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAE7E,OAAO,EAAE,MAAM,QAAA,EAAE,aAAa,eAAA,EAAE,CAAA;AAClC,CAAC;AAnBD,wEAmBC"} \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/extractParamsTiny.d.ts b/build/commonjs/faceFeatureExtractor/extractParamsTiny.d.ts deleted file mode 100644 index 4f623185..00000000 --- a/build/commonjs/faceFeatureExtractor/extractParamsTiny.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { TinyFaceFeatureExtractorParams } from './types'; -export declare function extractParamsTiny(weights: Float32Array): { - params: TinyFaceFeatureExtractorParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/commonjs/faceFeatureExtractor/extractParamsTiny.js b/build/commonjs/faceFeatureExtractor/extractParamsTiny.js deleted file mode 100644 index e32869d9..00000000 --- a/build/commonjs/faceFeatureExtractor/extractParamsTiny.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var extractorsFactory_1 = require("./extractorsFactory"); -function extractParamsTiny(weights) { - var paramMappings = []; - var _a = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var extractDenseBlock3Params = extractorsFactory_1.extractorsFactory(extractWeights, paramMappings).extractDenseBlock3Params; - var dense0 = extractDenseBlock3Params(3, 32, 'dense0', true); - var dense1 = extractDenseBlock3Params(32, 64, 'dense1'); - var dense2 = extractDenseBlock3Params(64, 128, 'dense2'); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { - paramMappings: paramMappings, - params: { dense0: dense0, dense1: dense1, dense2: dense2 } - }; -} -exports.extractParamsTiny = extractParamsTiny; -//# sourceMappingURL=extractParamsTiny.js.map \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/extractParamsTiny.js.map b/build/commonjs/faceFeatureExtractor/extractParamsTiny.js.map deleted file mode 100644 index 3cbc7cef..00000000 --- a/build/commonjs/faceFeatureExtractor/extractParamsTiny.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParamsTiny.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/extractParamsTiny.ts"],"names":[],"mappings":";;AAAA,2EAAuE;AAEvE,yDAAwD;AAIxD,SAAgB,iBAAiB,CAAC,OAAqB;IAErD,IAAM,aAAa,GAA4C,EAAE,CAAA;IAE3D,IAAA,0FAGqD,EAFzD,kCAAc,EACd,4CACyD,CAAA;IAGzD,IAAA,wHAAwB,CAC0B;IAEpD,IAAM,MAAM,GAAG,wBAAwB,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;IAC9D,IAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAA;IACzD,IAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;IAE1D,IAAI,mBAAmB,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,oCAAkC,mBAAmB,EAAE,CAAC,MAAQ,CAAC,CAAA;KAClF;IAED,OAAO;QACL,aAAa,eAAA;QACb,MAAM,EAAE,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE;KACnC,CAAA;AACH,CAAC;AAzBD,8CAyBC"} \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/extractorsFactory.d.ts b/build/commonjs/faceFeatureExtractor/extractorsFactory.d.ts deleted file mode 100644 index 2c86c09e..00000000 --- a/build/commonjs/faceFeatureExtractor/extractorsFactory.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { DenseBlock3Params, DenseBlock4Params } from './types'; -export declare function extractorsFactory(extractWeights: TfjsImageRecognitionBase.ExtractWeightsFunction, paramMappings: TfjsImageRecognitionBase.ParamMapping[]): { - extractDenseBlock3Params: (channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer?: boolean) => DenseBlock3Params; - extractDenseBlock4Params: (channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer?: boolean) => DenseBlock4Params; -}; diff --git a/build/commonjs/faceFeatureExtractor/extractorsFactory.js b/build/commonjs/faceFeatureExtractor/extractorsFactory.js deleted file mode 100644 index bcf11d38..00000000 --- a/build/commonjs/faceFeatureExtractor/extractorsFactory.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -function extractorsFactory(extractWeights, paramMappings) { - function extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix) { - var depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]); - var pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]); - var bias = tf.tensor1d(extractWeights(channelsOut)); - paramMappings.push({ paramPath: mappedPrefix + "/depthwise_filter" }, { paramPath: mappedPrefix + "/pointwise_filter" }, { paramPath: mappedPrefix + "/bias" }); - return new tfjs_image_recognition_base_1.TfjsImageRecognitionBase.SeparableConvParams(depthwise_filter, pointwise_filter, bias); - } - var extractConvParams = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractConvParamsFactory(extractWeights, paramMappings); - function extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - var conv0 = isFirstLayer - ? extractConvParams(channelsIn, channelsOut, 3, mappedPrefix + "/conv0") - : extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix + "/conv0"); - var conv1 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv1"); - var conv2 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv2"); - return { conv0: conv0, conv1: conv1, conv2: conv2 }; - } - function extractDenseBlock4Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - var _a = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer), conv0 = _a.conv0, conv1 = _a.conv1, conv2 = _a.conv2; - var conv3 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv3"); - return { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3 }; - } - return { - extractDenseBlock3Params: extractDenseBlock3Params, - extractDenseBlock4Params: extractDenseBlock4Params - }; -} -exports.extractorsFactory = extractorsFactory; -//# sourceMappingURL=extractorsFactory.js.map \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/extractorsFactory.js.map b/build/commonjs/faceFeatureExtractor/extractorsFactory.js.map deleted file mode 100644 index 1606efd6..00000000 --- a/build/commonjs/faceFeatureExtractor/extractorsFactory.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractorsFactory.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/extractorsFactory.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAC5C,2EAAuE;AAIvE,SAAgB,iBAAiB,CAAC,cAA+D,EAAE,aAAsD;IAEvJ,SAAS,0BAA0B,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB;QAC/F,IAAM,gBAAgB,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;QAC/F,IAAM,gBAAgB,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAA;QAC/G,IAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAA;QAErD,aAAa,CAAC,IAAI,CAChB,EAAE,SAAS,EAAK,YAAY,sBAAmB,EAAE,EACjD,EAAE,SAAS,EAAK,YAAY,sBAAmB,EAAE,EACjD,EAAE,SAAS,EAAK,YAAY,UAAO,EAAE,CACtC,CAAA;QAED,OAAO,IAAI,sDAAwB,CAAC,mBAAmB,CACrD,gBAAgB,EAChB,gBAAgB,EAChB,IAAI,CACL,CAAA;IACH,CAAC;IAED,IAAM,iBAAiB,GAAG,sDAAwB,CAAC,wBAAwB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAE1G,SAAS,wBAAwB,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAE5H,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,EAAK,YAAY,WAAQ,CAAC;YACxE,CAAC,CAAC,0BAA0B,CAAC,UAAU,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAChF,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAC3F,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAE3F,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IAChC,CAAC;IAED,SAAS,wBAAwB,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAEtH,IAAA,kFAAuG,EAArG,gBAAK,EAAE,gBAAK,EAAE,gBAAuF,CAAA;QAC7G,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAE3F,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IACvC,CAAC;IAED,OAAO;QACL,wBAAwB,0BAAA;QACxB,wBAAwB,0BAAA;KACzB,CAAA;AAEH,CAAC;AA9CD,8CA8CC"} \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/index.d.ts b/build/commonjs/faceFeatureExtractor/index.d.ts deleted file mode 100644 index 99061f84..00000000 --- a/build/commonjs/faceFeatureExtractor/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './FaceFeatureExtractor'; -export * from './TinyFaceFeatureExtractor'; diff --git a/build/commonjs/faceFeatureExtractor/index.js b/build/commonjs/faceFeatureExtractor/index.js deleted file mode 100644 index 3debcd72..00000000 --- a/build/commonjs/faceFeatureExtractor/index.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -tslib_1.__exportStar(require("./FaceFeatureExtractor"), exports); -tslib_1.__exportStar(require("./TinyFaceFeatureExtractor"), exports); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/index.js.map b/build/commonjs/faceFeatureExtractor/index.js.map deleted file mode 100644 index 3206c516..00000000 --- a/build/commonjs/faceFeatureExtractor/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/index.ts"],"names":[],"mappings":";;;AAAA,iEAAuC;AACvC,qEAA2C"} \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/loadParamsFactory.d.ts b/build/commonjs/faceFeatureExtractor/loadParamsFactory.d.ts deleted file mode 100644 index eb88164e..00000000 --- a/build/commonjs/faceFeatureExtractor/loadParamsFactory.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { DenseBlock3Params, DenseBlock4Params } from './types'; -export declare function loadParamsFactory(weightMap: any, paramMappings: TfjsImageRecognitionBase.ParamMapping[]): { - extractDenseBlock3Params: (prefix: string, isFirstLayer?: boolean) => DenseBlock3Params; - extractDenseBlock4Params: (prefix: string, isFirstLayer?: boolean) => DenseBlock4Params; -}; diff --git a/build/commonjs/faceFeatureExtractor/loadParamsFactory.js b/build/commonjs/faceFeatureExtractor/loadParamsFactory.js deleted file mode 100644 index cc5ff761..00000000 --- a/build/commonjs/faceFeatureExtractor/loadParamsFactory.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -function loadParamsFactory(weightMap, paramMappings) { - var extractWeightEntry = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings); - function extractConvParams(prefix) { - var filters = extractWeightEntry(prefix + "/filters", 4); - var bias = extractWeightEntry(prefix + "/bias", 1); - return { filters: filters, bias: bias }; - } - function extractSeparableConvParams(prefix) { - var depthwise_filter = extractWeightEntry(prefix + "/depthwise_filter", 4); - var pointwise_filter = extractWeightEntry(prefix + "/pointwise_filter", 4); - var bias = extractWeightEntry(prefix + "/bias", 1); - return new tfjs_image_recognition_base_1.TfjsImageRecognitionBase.SeparableConvParams(depthwise_filter, pointwise_filter, bias); - } - function extractDenseBlock3Params(prefix, isFirstLayer) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - var conv0 = isFirstLayer - ? extractConvParams(prefix + "/conv0") - : extractSeparableConvParams(prefix + "/conv0"); - var conv1 = extractSeparableConvParams(prefix + "/conv1"); - var conv2 = extractSeparableConvParams(prefix + "/conv2"); - return { conv0: conv0, conv1: conv1, conv2: conv2 }; - } - function extractDenseBlock4Params(prefix, isFirstLayer) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - var conv0 = isFirstLayer - ? extractConvParams(prefix + "/conv0") - : extractSeparableConvParams(prefix + "/conv0"); - var conv1 = extractSeparableConvParams(prefix + "/conv1"); - var conv2 = extractSeparableConvParams(prefix + "/conv2"); - var conv3 = extractSeparableConvParams(prefix + "/conv3"); - return { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3 }; - } - return { - extractDenseBlock3Params: extractDenseBlock3Params, - extractDenseBlock4Params: extractDenseBlock4Params - }; -} -exports.loadParamsFactory = loadParamsFactory; -//# sourceMappingURL=loadParamsFactory.js.map \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/loadParamsFactory.js.map b/build/commonjs/faceFeatureExtractor/loadParamsFactory.js.map deleted file mode 100644 index 87008c36..00000000 --- a/build/commonjs/faceFeatureExtractor/loadParamsFactory.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"loadParamsFactory.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/loadParamsFactory.ts"],"names":[],"mappings":";;AACA,2EAAuE;AAIvE,SAAgB,iBAAiB,CAAC,SAAc,EAAE,aAAsD;IAEtG,IAAM,kBAAkB,GAAG,sDAAwB,CAAC,yBAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAEvG,SAAS,iBAAiB,CAAC,MAAc;QACvC,IAAM,OAAO,GAAG,kBAAkB,CAAiB,MAAM,aAAU,EAAE,CAAC,CAAC,CAAA;QACvE,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QAEjE,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC;IAED,SAAS,0BAA0B,CAAC,MAAc;QAChD,IAAM,gBAAgB,GAAG,kBAAkB,CAAiB,MAAM,sBAAmB,EAAE,CAAC,CAAC,CAAA;QACzF,IAAM,gBAAgB,GAAG,kBAAkB,CAAiB,MAAM,sBAAmB,EAAE,CAAC,CAAC,CAAA;QACzF,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QAEjE,OAAO,IAAI,sDAAwB,CAAC,mBAAmB,CACrD,gBAAgB,EAChB,gBAAgB,EAChB,IAAI,CACL,CAAA;IACH,CAAC;IAED,SAAS,wBAAwB,CAAC,MAAc,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAC7E,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAI,MAAM,WAAQ,CAAC;YACtC,CAAC,CAAC,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QACjD,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAE3D,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IAChC,CAAC;IAED,SAAS,wBAAwB,CAAC,MAAc,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAC7E,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAI,MAAM,WAAQ,CAAC;YACtC,CAAC,CAAC,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QACjD,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAE3D,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IACvC,CAAC;IAED,OAAO;QACL,wBAAwB,0BAAA;QACxB,wBAAwB,0BAAA;KACzB,CAAA;AACH,CAAC;AAhDD,8CAgDC"} \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/types.d.ts b/build/commonjs/faceFeatureExtractor/types.d.ts deleted file mode 100644 index b6e3a222..00000000 --- a/build/commonjs/faceFeatureExtractor/types.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, NeuralNetwork, TNetInput, TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export declare type ConvWithBatchNormParams = BatchNormParams & { - filter: tf.Tensor4D; -}; -export declare type BatchNormParams = { - mean: tf.Tensor1D; - variance: tf.Tensor1D; - scale: tf.Tensor1D; - offset: tf.Tensor1D; -}; -export declare type SeparableConvWithBatchNormParams = { - depthwise: ConvWithBatchNormParams; - pointwise: ConvWithBatchNormParams; -}; -export declare type DenseBlock3Params = { - conv0: TfjsImageRecognitionBase.SeparableConvParams | TfjsImageRecognitionBase.ConvParams; - conv1: TfjsImageRecognitionBase.SeparableConvParams; - conv2: TfjsImageRecognitionBase.SeparableConvParams; -}; -export declare type DenseBlock4Params = DenseBlock3Params & { - conv3: TfjsImageRecognitionBase.SeparableConvParams; -}; -export declare type TinyFaceFeatureExtractorParams = { - dense0: DenseBlock3Params; - dense1: DenseBlock3Params; - dense2: DenseBlock3Params; -}; -export declare type FaceFeatureExtractorParams = { - dense0: DenseBlock4Params; - dense1: DenseBlock4Params; - dense2: DenseBlock4Params; - dense3: DenseBlock4Params; -}; -export interface IFaceFeatureExtractor extends NeuralNetwork { - forwardInput(input: NetInput): tf.Tensor4D; - forward(input: TNetInput): Promise; -} diff --git a/build/commonjs/faceFeatureExtractor/types.js b/build/commonjs/faceFeatureExtractor/types.js deleted file mode 100644 index 11e638d1..00000000 --- a/build/commonjs/faceFeatureExtractor/types.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/commonjs/faceFeatureExtractor/types.js.map b/build/commonjs/faceFeatureExtractor/types.js.map deleted file mode 100644 index d4dd37d8..00000000 --- a/build/commonjs/faceFeatureExtractor/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/FaceLandmark68Net.d.ts b/build/commonjs/faceLandmarkNet/FaceLandmark68Net.d.ts deleted file mode 100644 index ba213c97..00000000 --- a/build/commonjs/faceLandmarkNet/FaceLandmark68Net.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor'; -import { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types'; -import { FaceLandmark68NetBase } from './FaceLandmark68NetBase'; -export declare class FaceLandmark68Net extends FaceLandmark68NetBase { - constructor(faceFeatureExtractor?: FaceFeatureExtractor); - protected getDefaultModelName(): string; - protected getClassifierChannelsIn(): number; -} diff --git a/build/commonjs/faceLandmarkNet/FaceLandmark68Net.js b/build/commonjs/faceLandmarkNet/FaceLandmark68Net.js deleted file mode 100644 index 30e22a01..00000000 --- a/build/commonjs/faceLandmarkNet/FaceLandmark68Net.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var FaceFeatureExtractor_1 = require("../faceFeatureExtractor/FaceFeatureExtractor"); -var FaceLandmark68NetBase_1 = require("./FaceLandmark68NetBase"); -var FaceLandmark68Net = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmark68Net, _super); - function FaceLandmark68Net(faceFeatureExtractor) { - if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new FaceFeatureExtractor_1.FaceFeatureExtractor(); } - return _super.call(this, 'FaceLandmark68Net', faceFeatureExtractor) || this; - } - FaceLandmark68Net.prototype.getDefaultModelName = function () { - return 'face_landmark_68_model'; - }; - FaceLandmark68Net.prototype.getClassifierChannelsIn = function () { - return 256; - }; - return FaceLandmark68Net; -}(FaceLandmark68NetBase_1.FaceLandmark68NetBase)); -exports.FaceLandmark68Net = FaceLandmark68Net; -//# sourceMappingURL=FaceLandmark68Net.js.map \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/FaceLandmark68Net.js.map b/build/commonjs/faceLandmarkNet/FaceLandmark68Net.js.map deleted file mode 100644 index 12b554a2..00000000 --- a/build/commonjs/faceLandmarkNet/FaceLandmark68Net.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceLandmark68Net.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/FaceLandmark68Net.ts"],"names":[],"mappings":";;;AAAA,qFAAoF;AAEpF,iEAAgE;AAEhE;IAAuC,6CAAiD;IAEtF,2BAAY,oBAAuE;QAAvE,qCAAA,EAAA,2BAAiD,2CAAoB,EAAE;eACjF,kBAAM,mBAAmB,EAAE,oBAAoB,CAAC;IAClD,CAAC;IAES,+CAAmB,GAA7B;QACE,OAAO,wBAAwB,CAAA;IACjC,CAAC;IAES,mDAAuB,GAAjC;QACE,OAAO,GAAG,CAAA;IACZ,CAAC;IACH,wBAAC;AAAD,CAAC,AAbD,CAAuC,6CAAqB,GAa3D;AAbY,8CAAiB"} \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/FaceLandmark68NetBase.d.ts b/build/commonjs/faceLandmarkNet/FaceLandmark68NetBase.d.ts deleted file mode 100644 index 49c9c774..00000000 --- a/build/commonjs/faceLandmarkNet/FaceLandmark68NetBase.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { IDimensions, NetInput, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceLandmarks68 } from '../classes/FaceLandmarks68'; -import { FaceFeatureExtractorParams, TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types'; -import { FaceProcessor } from '../faceProcessor/FaceProcessor'; -export declare abstract class FaceLandmark68NetBase extends FaceProcessor { - postProcess(output: tf.Tensor2D, inputSize: number, originalDimensions: IDimensions[]): tf.Tensor2D; - forwardInput(input: NetInput): tf.Tensor2D; - forward(input: TNetInput): Promise; - detectLandmarks(input: TNetInput): Promise; - protected getClassifierChannelsOut(): number; -} diff --git a/build/commonjs/faceLandmarkNet/FaceLandmark68NetBase.js b/build/commonjs/faceLandmarkNet/FaceLandmark68NetBase.js deleted file mode 100644 index 11339a9b..00000000 --- a/build/commonjs/faceLandmarkNet/FaceLandmark68NetBase.js +++ /dev/null @@ -1,114 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var FaceLandmarks68_1 = require("../classes/FaceLandmarks68"); -var FaceProcessor_1 = require("../faceProcessor/FaceProcessor"); -var FaceLandmark68NetBase = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmark68NetBase, _super); - function FaceLandmark68NetBase() { - return _super !== null && _super.apply(this, arguments) || this; - } - FaceLandmark68NetBase.prototype.postProcess = function (output, inputSize, originalDimensions) { - var inputDimensions = originalDimensions.map(function (_a) { - var width = _a.width, height = _a.height; - var scale = inputSize / Math.max(height, width); - return { - width: width * scale, - height: height * scale - }; - }); - var batchSize = inputDimensions.length; - return tf.tidy(function () { - var createInterleavedTensor = function (fillX, fillY) { - return tf.stack([ - tf.fill([68], fillX), - tf.fill([68], fillY) - ], 1).as2D(1, 136).as1D(); - }; - var getPadding = function (batchIdx, cond) { - var _a = inputDimensions[batchIdx], width = _a.width, height = _a.height; - return cond(width, height) ? Math.abs(width - height) / 2 : 0; - }; - var getPaddingX = function (batchIdx) { return getPadding(batchIdx, function (w, h) { return w < h; }); }; - var getPaddingY = function (batchIdx) { return getPadding(batchIdx, function (w, h) { return h < w; }); }; - var landmarkTensors = output - .mul(tf.fill([batchSize, 136], inputSize)) - .sub(tf.stack(Array.from(Array(batchSize), function (_, batchIdx) { - return createInterleavedTensor(getPaddingX(batchIdx), getPaddingY(batchIdx)); - }))) - .div(tf.stack(Array.from(Array(batchSize), function (_, batchIdx) { - return createInterleavedTensor(inputDimensions[batchIdx].width, inputDimensions[batchIdx].height); - }))); - return landmarkTensors; - }); - }; - FaceLandmark68NetBase.prototype.forwardInput = function (input) { - var _this = this; - return tf.tidy(function () { - var out = _this.runNet(input); - return _this.postProcess(out, input.inputSize, input.inputDimensions.map(function (_a) { - var height = _a[0], width = _a[1]; - return ({ height: height, width: width }); - })); - }); - }; - FaceLandmark68NetBase.prototype.forward = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - FaceLandmark68NetBase.prototype.detectLandmarks = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var netInput, landmarkTensors, landmarksForBatch; - var _this = this; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)]; - case 1: - netInput = _a.sent(); - landmarkTensors = tf.tidy(function () { return tf.unstack(_this.forwardInput(netInput)); }); - return [4 /*yield*/, Promise.all(landmarkTensors.map(function (landmarkTensor, batchIdx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { - var landmarksArray, _a, _b, xCoords, yCoords; - return tslib_1.__generator(this, function (_c) { - switch (_c.label) { - case 0: - _b = (_a = Array).from; - return [4 /*yield*/, landmarkTensor.data()]; - case 1: - landmarksArray = _b.apply(_a, [_c.sent()]); - xCoords = landmarksArray.filter(function (_, i) { return tfjs_image_recognition_base_1.isEven(i); }); - yCoords = landmarksArray.filter(function (_, i) { return !tfjs_image_recognition_base_1.isEven(i); }); - return [2 /*return*/, new FaceLandmarks68_1.FaceLandmarks68(Array(68).fill(0).map(function (_, i) { return new tfjs_image_recognition_base_1.Point(xCoords[i], yCoords[i]); }), { - height: netInput.getInputHeight(batchIdx), - width: netInput.getInputWidth(batchIdx), - })]; - } - }); - }); }))]; - case 2: - landmarksForBatch = _a.sent(); - landmarkTensors.forEach(function (t) { return t.dispose(); }); - return [2 /*return*/, netInput.isBatchInput - ? landmarksForBatch - : landmarksForBatch[0]]; - } - }); - }); - }; - FaceLandmark68NetBase.prototype.getClassifierChannelsOut = function () { - return 136; - }; - return FaceLandmark68NetBase; -}(FaceProcessor_1.FaceProcessor)); -exports.FaceLandmark68NetBase = FaceLandmark68NetBase; -//# sourceMappingURL=FaceLandmark68NetBase.js.map \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/FaceLandmark68NetBase.js.map b/build/commonjs/faceLandmarkNet/FaceLandmark68NetBase.js.map deleted file mode 100644 index 206c203d..00000000 --- a/build/commonjs/faceLandmarkNet/FaceLandmark68NetBase.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceLandmark68NetBase.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/FaceLandmark68NetBase.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/FaceLandmark68TinyNet.d.ts b/build/commonjs/faceLandmarkNet/FaceLandmark68TinyNet.d.ts deleted file mode 100644 index 58111879..00000000 --- a/build/commonjs/faceLandmarkNet/FaceLandmark68TinyNet.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { TinyFaceFeatureExtractor } from '../faceFeatureExtractor/TinyFaceFeatureExtractor'; -import { TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types'; -import { FaceLandmark68NetBase } from './FaceLandmark68NetBase'; -export declare class FaceLandmark68TinyNet extends FaceLandmark68NetBase { - constructor(faceFeatureExtractor?: TinyFaceFeatureExtractor); - protected getDefaultModelName(): string; - protected getClassifierChannelsIn(): number; -} diff --git a/build/commonjs/faceLandmarkNet/FaceLandmark68TinyNet.js b/build/commonjs/faceLandmarkNet/FaceLandmark68TinyNet.js deleted file mode 100644 index 8f22cb6a..00000000 --- a/build/commonjs/faceLandmarkNet/FaceLandmark68TinyNet.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TinyFaceFeatureExtractor_1 = require("../faceFeatureExtractor/TinyFaceFeatureExtractor"); -var FaceLandmark68NetBase_1 = require("./FaceLandmark68NetBase"); -var FaceLandmark68TinyNet = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmark68TinyNet, _super); - function FaceLandmark68TinyNet(faceFeatureExtractor) { - if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new TinyFaceFeatureExtractor_1.TinyFaceFeatureExtractor(); } - return _super.call(this, 'FaceLandmark68TinyNet', faceFeatureExtractor) || this; - } - FaceLandmark68TinyNet.prototype.getDefaultModelName = function () { - return 'face_landmark_68_tiny_model'; - }; - FaceLandmark68TinyNet.prototype.getClassifierChannelsIn = function () { - return 128; - }; - return FaceLandmark68TinyNet; -}(FaceLandmark68NetBase_1.FaceLandmark68NetBase)); -exports.FaceLandmark68TinyNet = FaceLandmark68TinyNet; -//# sourceMappingURL=FaceLandmark68TinyNet.js.map \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/FaceLandmark68TinyNet.js.map b/build/commonjs/faceLandmarkNet/FaceLandmark68TinyNet.js.map deleted file mode 100644 index 50fe0c30..00000000 --- a/build/commonjs/faceLandmarkNet/FaceLandmark68TinyNet.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceLandmark68TinyNet.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/FaceLandmark68TinyNet.ts"],"names":[],"mappings":";;;AAAA,6FAA4F;AAE5F,iEAAgE;AAEhE;IAA2C,iDAAqD;IAE9F,+BAAY,oBAA+E;QAA/E,qCAAA,EAAA,2BAAqD,mDAAwB,EAAE;eACzF,kBAAM,uBAAuB,EAAE,oBAAoB,CAAC;IACtD,CAAC;IAES,mDAAmB,GAA7B;QACE,OAAO,6BAA6B,CAAA;IACtC,CAAC;IAES,uDAAuB,GAAjC;QACE,OAAO,GAAG,CAAA;IACZ,CAAC;IACH,4BAAC;AAAD,CAAC,AAbD,CAA2C,6CAAqB,GAa/D;AAbY,sDAAqB"} \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/index.d.ts b/build/commonjs/faceLandmarkNet/index.d.ts deleted file mode 100644 index b49c3e83..00000000 --- a/build/commonjs/faceLandmarkNet/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { FaceLandmark68Net } from './FaceLandmark68Net'; -export * from './FaceLandmark68Net'; -export * from './FaceLandmark68TinyNet'; -export declare class FaceLandmarkNet extends FaceLandmark68Net { -} diff --git a/build/commonjs/faceLandmarkNet/index.js b/build/commonjs/faceLandmarkNet/index.js deleted file mode 100644 index a85427c1..00000000 --- a/build/commonjs/faceLandmarkNet/index.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var FaceLandmark68Net_1 = require("./FaceLandmark68Net"); -tslib_1.__exportStar(require("./FaceLandmark68Net"), exports); -tslib_1.__exportStar(require("./FaceLandmark68TinyNet"), exports); -var FaceLandmarkNet = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmarkNet, _super); - function FaceLandmarkNet() { - return _super !== null && _super.apply(this, arguments) || this; - } - return FaceLandmarkNet; -}(FaceLandmark68Net_1.FaceLandmark68Net)); -exports.FaceLandmarkNet = FaceLandmarkNet; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/index.js.map b/build/commonjs/faceLandmarkNet/index.js.map deleted file mode 100644 index a27a46ba..00000000 --- a/build/commonjs/faceLandmarkNet/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/index.ts"],"names":[],"mappings":";;;AAAA,yDAAwD;AAExD,8DAAoC;AACpC,kEAAwC;AAExC;IAAqC,2CAAiB;IAAtD;;IAAwD,CAAC;IAAD,sBAAC;AAAD,CAAC,AAAzD,CAAqC,qCAAiB,GAAG;AAA5C,0CAAe"} \ No newline at end of file diff --git a/build/commonjs/faceProcessor/FaceProcessor.d.ts b/build/commonjs/faceProcessor/FaceProcessor.d.ts deleted file mode 100644 index b6d962c5..00000000 --- a/build/commonjs/faceProcessor/FaceProcessor.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, NeuralNetwork } from 'tfjs-image-recognition-base'; -import { FaceFeatureExtractorParams, IFaceFeatureExtractor, TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types'; -import { NetParams } from './types'; -export declare abstract class FaceProcessor extends NeuralNetwork { - protected _faceFeatureExtractor: IFaceFeatureExtractor; - constructor(_name: string, faceFeatureExtractor: IFaceFeatureExtractor); - readonly faceFeatureExtractor: IFaceFeatureExtractor; - protected abstract getDefaultModelName(): string; - protected abstract getClassifierChannelsIn(): number; - protected abstract getClassifierChannelsOut(): number; - runNet(input: NetInput | tf.Tensor4D): tf.Tensor2D; - dispose(throwOnRedispose?: boolean): void; - loadClassifierParams(weights: Float32Array): void; - extractClassifierParams(weights: Float32Array): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; - protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; - protected extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; -} diff --git a/build/commonjs/faceProcessor/FaceProcessor.js b/build/commonjs/faceProcessor/FaceProcessor.js deleted file mode 100644 index 8cdc49be..00000000 --- a/build/commonjs/faceProcessor/FaceProcessor.js +++ /dev/null @@ -1,67 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var fullyConnectedLayer_1 = require("../common/fullyConnectedLayer"); -var extractParams_1 = require("./extractParams"); -var extractParamsFromWeigthMap_1 = require("./extractParamsFromWeigthMap"); -var util_1 = require("./util"); -var FaceProcessor = /** @class */ (function (_super) { - tslib_1.__extends(FaceProcessor, _super); - function FaceProcessor(_name, faceFeatureExtractor) { - var _this = _super.call(this, _name) || this; - _this._faceFeatureExtractor = faceFeatureExtractor; - return _this; - } - Object.defineProperty(FaceProcessor.prototype, "faceFeatureExtractor", { - get: function () { - return this._faceFeatureExtractor; - }, - enumerable: true, - configurable: true - }); - FaceProcessor.prototype.runNet = function (input) { - var _this = this; - var params = this.params; - if (!params) { - throw new Error(this._name + " - load model before inference"); - } - return tf.tidy(function () { - var bottleneckFeatures = input instanceof tfjs_image_recognition_base_1.NetInput - ? _this.faceFeatureExtractor.forwardInput(input) - : input; - return fullyConnectedLayer_1.fullyConnectedLayer(bottleneckFeatures.as2D(bottleneckFeatures.shape[0], -1), params.fc); - }); - }; - FaceProcessor.prototype.dispose = function (throwOnRedispose) { - if (throwOnRedispose === void 0) { throwOnRedispose = true; } - this.faceFeatureExtractor.dispose(throwOnRedispose); - _super.prototype.dispose.call(this, throwOnRedispose); - }; - FaceProcessor.prototype.loadClassifierParams = function (weights) { - var _a = this.extractClassifierParams(weights), params = _a.params, paramMappings = _a.paramMappings; - this._params = params; - this._paramMappings = paramMappings; - }; - FaceProcessor.prototype.extractClassifierParams = function (weights) { - return extractParams_1.extractParams(weights, this.getClassifierChannelsIn(), this.getClassifierChannelsOut()); - }; - FaceProcessor.prototype.extractParamsFromWeigthMap = function (weightMap) { - var _a = util_1.seperateWeightMaps(weightMap), featureExtractorMap = _a.featureExtractorMap, classifierMap = _a.classifierMap; - this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap); - return extractParamsFromWeigthMap_1.extractParamsFromWeigthMap(classifierMap); - }; - FaceProcessor.prototype.extractParams = function (weights) { - var cIn = this.getClassifierChannelsIn(); - var cOut = this.getClassifierChannelsOut(); - var classifierWeightSize = (cOut * cIn) + cOut; - var featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize); - var classifierWeights = weights.slice(weights.length - classifierWeightSize); - this.faceFeatureExtractor.extractWeights(featureExtractorWeights); - return this.extractClassifierParams(classifierWeights); - }; - return FaceProcessor; -}(tfjs_image_recognition_base_1.NeuralNetwork)); -exports.FaceProcessor = FaceProcessor; -//# sourceMappingURL=FaceProcessor.js.map \ No newline at end of file diff --git a/build/commonjs/faceProcessor/FaceProcessor.js.map b/build/commonjs/faceProcessor/FaceProcessor.js.map deleted file mode 100644 index 17bdf987..00000000 --- a/build/commonjs/faceProcessor/FaceProcessor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceProcessor.js","sourceRoot":"","sources":["../../../src/faceProcessor/FaceProcessor.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAC5C,2EAAsE;AAEtE,qEAAoE;AAMpE,iDAAgD;AAChD,2EAA0E;AAE1E,+BAA4C;AAE5C;IAGU,yCAAwB;IAIhC,uBAAY,KAAa,EAAE,oBAA6D;QAAxF,YACE,kBAAM,KAAK,CAAC,SAEb;QADC,KAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAA;;IACnD,CAAC;IAED,sBAAW,+CAAoB;aAA/B;YACE,OAAO,IAAI,CAAC,qBAAqB,CAAA;QACnC,CAAC;;;OAAA;IAMM,8BAAM,GAAb,UAAc,KAA6B;QAA3C,iBAcC;QAZS,IAAA,oBAAM,CAAS;QAEvB,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAI,IAAI,CAAC,KAAK,mCAAgC,CAAC,CAAA;SAC/D;QAED,OAAO,EAAE,CAAC,IAAI,CAAC;YACb,IAAM,kBAAkB,GAAG,KAAK,YAAY,sCAAQ;gBAClD,CAAC,CAAC,KAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,KAAK,CAAC;gBAC/C,CAAC,CAAC,KAAK,CAAA;YACT,OAAO,yCAAmB,CAAC,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;QACjG,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,+BAAO,GAAd,UAAe,gBAAgC;QAAhC,iCAAA,EAAA,uBAAgC;QAC7C,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;QACnD,iBAAM,OAAO,YAAC,gBAAgB,CAAC,CAAA;IACjC,CAAC;IAEM,4CAAoB,GAA3B,UAA4B,OAAqB;QACzC,IAAA,0CAAiE,EAA/D,kBAAM,EAAE,gCAAuD,CAAA;QACvE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAA;IACrC,CAAC;IAEM,+CAAuB,GAA9B,UAA+B,OAAqB;QAClD,OAAO,6BAAa,CAAC,OAAO,EAAE,IAAI,CAAC,uBAAuB,EAAE,EAAE,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAA;IAChG,CAAC;IAES,kDAA0B,GAApC,UAAqC,SAA4B;QAEzD,IAAA,yCAAsE,EAApE,4CAAmB,EAAE,gCAA+C,CAAA;QAE5E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAA;QAEhE,OAAO,uDAA0B,CAAC,aAAa,CAAC,CAAA;IAClD,CAAC;IAES,qCAAa,GAAvB,UAAwB,OAAqB;QAE3C,IAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAA;QAC1C,IAAM,IAAI,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAA;QAC5C,IAAM,oBAAoB,GAAG,CAAC,IAAI,GAAG,GAAG,CAAE,GAAG,IAAI,CAAA;QAEjD,IAAM,uBAAuB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,oBAAoB,CAAC,CAAA;QACvF,IAAM,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,oBAAoB,CAAC,CAAA;QAE9E,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,CAAA;IACxD,CAAC;IACH,oBAAC;AAAD,CAAC,AAxED,CAGU,2CAAa,GAqEtB;AAxEqB,sCAAa"} \ No newline at end of file diff --git a/build/commonjs/faceProcessor/extractParams.d.ts b/build/commonjs/faceProcessor/extractParams.d.ts deleted file mode 100644 index 950e0aab..00000000 --- a/build/commonjs/faceProcessor/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParams(weights: Float32Array, channelsIn: number, channelsOut: number): { - params: NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/commonjs/faceProcessor/extractParams.js b/build/commonjs/faceProcessor/extractParams.js deleted file mode 100644 index 9a8f9009..00000000 --- a/build/commonjs/faceProcessor/extractParams.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -function extractParams(weights, channelsIn, channelsOut) { - var paramMappings = []; - var _a = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var extractFCParams = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractFCParamsFactory(extractWeights, paramMappings); - var fc = extractFCParams(channelsIn, channelsOut, 'fc'); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { - paramMappings: paramMappings, - params: { fc: fc } - }; -} -exports.extractParams = extractParams; -//# sourceMappingURL=extractParams.js.map \ No newline at end of file diff --git a/build/commonjs/faceProcessor/extractParams.js.map b/build/commonjs/faceProcessor/extractParams.js.map deleted file mode 100644 index 3143e52b..00000000 --- a/build/commonjs/faceProcessor/extractParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/faceProcessor/extractParams.ts"],"names":[],"mappings":";;AAAA,2EAAuE;AAIvE,SAAgB,aAAa,CAAC,OAAqB,EAAE,UAAkB,EAAE,WAAmB;IAE1F,IAAM,aAAa,GAA4C,EAAE,CAAA;IAE3D,IAAA,0FAGqD,EAFzD,kCAAc,EACd,4CACyD,CAAA;IAE3D,IAAM,eAAe,GAAG,sDAAwB,CAAC,sBAAsB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAEtG,IAAM,EAAE,GAAG,eAAe,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,CAAA;IAEzD,IAAI,mBAAmB,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,oCAAkC,mBAAmB,EAAE,CAAC,MAAQ,CAAC,CAAA;KAClF;IAED,OAAO;QACL,aAAa,eAAA;QACb,MAAM,EAAE,EAAE,EAAE,IAAA,EAAE;KACf,CAAA;AACH,CAAC;AArBD,sCAqBC"} \ No newline at end of file diff --git a/build/commonjs/faceProcessor/extractParamsFromWeigthMap.d.ts b/build/commonjs/faceProcessor/extractParamsFromWeigthMap.d.ts deleted file mode 100644 index 7bf5a66d..00000000 --- a/build/commonjs/faceProcessor/extractParamsFromWeigthMap.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/commonjs/faceProcessor/extractParamsFromWeigthMap.js b/build/commonjs/faceProcessor/extractParamsFromWeigthMap.js deleted file mode 100644 index ef8cdd07..00000000 --- a/build/commonjs/faceProcessor/extractParamsFromWeigthMap.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -function extractParamsFromWeigthMap(weightMap) { - var paramMappings = []; - var extractWeightEntry = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings); - function extractFcParams(prefix) { - var weights = extractWeightEntry(prefix + "/weights", 2); - var bias = extractWeightEntry(prefix + "/bias", 1); - return { weights: weights, bias: bias }; - } - var params = { - fc: extractFcParams('fc') - }; - tfjs_image_recognition_base_1.TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: params, paramMappings: paramMappings }; -} -exports.extractParamsFromWeigthMap = extractParamsFromWeigthMap; -//# sourceMappingURL=extractParamsFromWeigthMap.js.map \ No newline at end of file diff --git a/build/commonjs/faceProcessor/extractParamsFromWeigthMap.js.map b/build/commonjs/faceProcessor/extractParamsFromWeigthMap.js.map deleted file mode 100644 index eacc0dfb..00000000 --- a/build/commonjs/faceProcessor/extractParamsFromWeigthMap.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParamsFromWeigthMap.js","sourceRoot":"","sources":["../../../src/faceProcessor/extractParamsFromWeigthMap.ts"],"names":[],"mappings":";;AACA,2EAAuE;AAIvE,SAAgB,0BAA0B,CACxC,SAA4B;IAG5B,IAAM,aAAa,GAA4C,EAAE,CAAA;IAEjE,IAAM,kBAAkB,GAAG,sDAAwB,CAAC,yBAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAEvG,SAAS,eAAe,CAAC,MAAc;QACrC,IAAM,OAAO,GAAG,kBAAkB,CAAiB,MAAM,aAAU,EAAE,CAAC,CAAC,CAAA;QACvE,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QACjE,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC;IAED,IAAM,MAAM,GAAG;QACb,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;KAC1B,CAAA;IAED,sDAAwB,CAAC,0BAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAE7E,OAAO,EAAE,MAAM,QAAA,EAAE,aAAa,eAAA,EAAE,CAAA;AAClC,CAAC;AArBD,gEAqBC"} \ No newline at end of file diff --git a/build/commonjs/faceProcessor/index.d.ts b/build/commonjs/faceProcessor/index.d.ts deleted file mode 100644 index 9e98e7d8..00000000 --- a/build/commonjs/faceProcessor/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './FaceProcessor'; diff --git a/build/commonjs/faceProcessor/index.js b/build/commonjs/faceProcessor/index.js deleted file mode 100644 index efde3701..00000000 --- a/build/commonjs/faceProcessor/index.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -tslib_1.__exportStar(require("./FaceProcessor"), exports); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/commonjs/faceProcessor/index.js.map b/build/commonjs/faceProcessor/index.js.map deleted file mode 100644 index 3344454f..00000000 --- a/build/commonjs/faceProcessor/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/faceProcessor/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC"} \ No newline at end of file diff --git a/build/commonjs/faceProcessor/types.d.ts b/build/commonjs/faceProcessor/types.d.ts deleted file mode 100644 index 3cc54402..00000000 --- a/build/commonjs/faceProcessor/types.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export declare type NetParams = { - fc: TfjsImageRecognitionBase.FCParams; -}; diff --git a/build/commonjs/faceProcessor/types.js b/build/commonjs/faceProcessor/types.js deleted file mode 100644 index 11e638d1..00000000 --- a/build/commonjs/faceProcessor/types.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/commonjs/faceProcessor/types.js.map b/build/commonjs/faceProcessor/types.js.map deleted file mode 100644 index 42a7693f..00000000 --- a/build/commonjs/faceProcessor/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/faceProcessor/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/build/commonjs/faceProcessor/util.d.ts b/build/commonjs/faceProcessor/util.d.ts deleted file mode 100644 index e28fedc0..00000000 --- a/build/commonjs/faceProcessor/util.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export declare function seperateWeightMaps(weightMap: tf.NamedTensorMap): { - featureExtractorMap: tf.NamedTensorMap; - classifierMap: tf.NamedTensorMap; -}; diff --git a/build/commonjs/faceProcessor/util.js b/build/commonjs/faceProcessor/util.js deleted file mode 100644 index fb1b4913..00000000 --- a/build/commonjs/faceProcessor/util.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function seperateWeightMaps(weightMap) { - var featureExtractorMap = {}; - var classifierMap = {}; - Object.keys(weightMap).forEach(function (key) { - var map = key.startsWith('fc') ? classifierMap : featureExtractorMap; - map[key] = weightMap[key]; - }); - return { featureExtractorMap: featureExtractorMap, classifierMap: classifierMap }; -} -exports.seperateWeightMaps = seperateWeightMaps; -//# sourceMappingURL=util.js.map \ No newline at end of file diff --git a/build/commonjs/faceProcessor/util.js.map b/build/commonjs/faceProcessor/util.js.map deleted file mode 100644 index 1b96a67d..00000000 --- a/build/commonjs/faceProcessor/util.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/faceProcessor/util.ts"],"names":[],"mappings":";;AAEA,SAAgB,kBAAkB,CAAC,SAA4B;IAE7D,IAAM,mBAAmB,GAAsB,EAAE,CAAA;IACjD,IAAM,aAAa,GAAsB,EAAE,CAAA;IAE3C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG;QAChC,IAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAA;QACtE,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,OAAO,EAAE,mBAAmB,qBAAA,EAAE,aAAa,eAAA,EAAE,CAAA;AAE/C,CAAC;AAZD,gDAYC"} \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/FaceRecognitionNet.d.ts b/build/commonjs/faceRecognitionNet/FaceRecognitionNet.d.ts deleted file mode 100644 index 1fd59dab..00000000 --- a/build/commonjs/faceRecognitionNet/FaceRecognitionNet.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare class FaceRecognitionNet extends NeuralNetwork { - constructor(); - forwardInput(input: NetInput): tf.Tensor2D; - forward(input: TNetInput): Promise; - computeFaceDescriptor(input: TNetInput): Promise; - protected getDefaultModelName(): string; - protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; - protected extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; -} diff --git a/build/commonjs/faceRecognitionNet/FaceRecognitionNet.js b/build/commonjs/faceRecognitionNet/FaceRecognitionNet.js deleted file mode 100644 index 4cfc4800..00000000 --- a/build/commonjs/faceRecognitionNet/FaceRecognitionNet.js +++ /dev/null @@ -1,91 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var convLayer_1 = require("./convLayer"); -var extractParams_1 = require("./extractParams"); -var extractParamsFromWeigthMap_1 = require("./extractParamsFromWeigthMap"); -var residualLayer_1 = require("./residualLayer"); -var FaceRecognitionNet = /** @class */ (function (_super) { - tslib_1.__extends(FaceRecognitionNet, _super); - function FaceRecognitionNet() { - return _super.call(this, 'FaceRecognitionNet') || this; - } - FaceRecognitionNet.prototype.forwardInput = function (input) { - var params = this.params; - if (!params) { - throw new Error('FaceRecognitionNet - load model before inference'); - } - return tf.tidy(function () { - var batchTensor = input.toBatchTensor(150, true).toFloat(); - var meanRgb = [122.782, 117.001, 104.298]; - var normalized = tfjs_image_recognition_base_1.normalize(batchTensor, meanRgb).div(tf.scalar(256)); - var out = convLayer_1.convDown(normalized, params.conv32_down); - out = tf.maxPool(out, 3, 2, 'valid'); - out = residualLayer_1.residual(out, params.conv32_1); - out = residualLayer_1.residual(out, params.conv32_2); - out = residualLayer_1.residual(out, params.conv32_3); - out = residualLayer_1.residualDown(out, params.conv64_down); - out = residualLayer_1.residual(out, params.conv64_1); - out = residualLayer_1.residual(out, params.conv64_2); - out = residualLayer_1.residual(out, params.conv64_3); - out = residualLayer_1.residualDown(out, params.conv128_down); - out = residualLayer_1.residual(out, params.conv128_1); - out = residualLayer_1.residual(out, params.conv128_2); - out = residualLayer_1.residualDown(out, params.conv256_down); - out = residualLayer_1.residual(out, params.conv256_1); - out = residualLayer_1.residual(out, params.conv256_2); - out = residualLayer_1.residualDown(out, params.conv256_down_out); - var globalAvg = out.mean([1, 2]); - var fullyConnected = tf.matMul(globalAvg, params.fc); - return fullyConnected; - }); - }; - FaceRecognitionNet.prototype.forward = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - FaceRecognitionNet.prototype.computeFaceDescriptor = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var netInput, faceDescriptorTensors, faceDescriptorsForBatch; - var _this = this; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)]; - case 1: - netInput = _a.sent(); - faceDescriptorTensors = tf.tidy(function () { return tf.unstack(_this.forwardInput(netInput)); }); - return [4 /*yield*/, Promise.all(faceDescriptorTensors.map(function (t) { return t.data(); }))]; - case 2: - faceDescriptorsForBatch = _a.sent(); - faceDescriptorTensors.forEach(function (t) { return t.dispose(); }); - return [2 /*return*/, netInput.isBatchInput - ? faceDescriptorsForBatch - : faceDescriptorsForBatch[0]]; - } - }); - }); - }; - FaceRecognitionNet.prototype.getDefaultModelName = function () { - return 'face_recognition_model'; - }; - FaceRecognitionNet.prototype.extractParamsFromWeigthMap = function (weightMap) { - return extractParamsFromWeigthMap_1.extractParamsFromWeigthMap(weightMap); - }; - FaceRecognitionNet.prototype.extractParams = function (weights) { - return extractParams_1.extractParams(weights); - }; - return FaceRecognitionNet; -}(tfjs_image_recognition_base_1.NeuralNetwork)); -exports.FaceRecognitionNet = FaceRecognitionNet; -//# sourceMappingURL=FaceRecognitionNet.js.map \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/FaceRecognitionNet.js.map b/build/commonjs/faceRecognitionNet/FaceRecognitionNet.js.map deleted file mode 100644 index 88c1f96d..00000000 --- a/build/commonjs/faceRecognitionNet/FaceRecognitionNet.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceRecognitionNet.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/FaceRecognitionNet.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/convLayer.d.ts b/build/commonjs/faceRecognitionNet/convLayer.d.ts deleted file mode 100644 index a750f6c4..00000000 --- a/build/commonjs/faceRecognitionNet/convLayer.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { ConvLayerParams } from './types'; -export declare function conv(x: tf.Tensor4D, params: ConvLayerParams): tf.Tensor; -export declare function convNoRelu(x: tf.Tensor4D, params: ConvLayerParams): tf.Tensor; -export declare function convDown(x: tf.Tensor4D, params: ConvLayerParams): tf.Tensor; diff --git a/build/commonjs/faceRecognitionNet/convLayer.js b/build/commonjs/faceRecognitionNet/convLayer.js deleted file mode 100644 index 4c4a2fcf..00000000 --- a/build/commonjs/faceRecognitionNet/convLayer.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -var scaleLayer_1 = require("./scaleLayer"); -function convLayer(x, params, strides, withRelu, padding) { - if (padding === void 0) { padding = 'same'; } - var _a = params.conv, filters = _a.filters, bias = _a.bias; - var out = tf.conv2d(x, filters, strides, padding); - out = tf.add(out, bias); - out = scaleLayer_1.scale(out, params.scale); - return withRelu ? tf.relu(out) : out; -} -function conv(x, params) { - return convLayer(x, params, [1, 1], true); -} -exports.conv = conv; -function convNoRelu(x, params) { - return convLayer(x, params, [1, 1], false); -} -exports.convNoRelu = convNoRelu; -function convDown(x, params) { - return convLayer(x, params, [2, 2], true, 'valid'); -} -exports.convDown = convDown; -//# sourceMappingURL=convLayer.js.map \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/convLayer.js.map b/build/commonjs/faceRecognitionNet/convLayer.js.map deleted file mode 100644 index f8daee38..00000000 --- a/build/commonjs/faceRecognitionNet/convLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"convLayer.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/convLayer.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAE5C,2CAAqC;AAIrC,SAAS,SAAS,CAChB,CAAc,EACd,MAAuB,EACvB,OAAyB,EACzB,QAAiB,EACjB,OAAkC;IAAlC,wBAAA,EAAA,gBAAkC;IAE5B,IAAA,gBAA+B,EAA7B,oBAAO,EAAE,cAAoB,CAAA;IAErC,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IACjD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACvB,GAAG,GAAG,kBAAK,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IAC9B,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AACtC,CAAC;AAED,SAAgB,IAAI,CAAC,CAAc,EAAE,MAAuB;IAC1D,OAAO,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;AAC3C,CAAC;AAFD,oBAEC;AAED,SAAgB,UAAU,CAAC,CAAc,EAAE,MAAuB;IAChE,OAAO,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AAC5C,CAAC;AAFD,gCAEC;AAED,SAAgB,QAAQ,CAAC,CAAc,EAAE,MAAuB;IAC9D,OAAO,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;AACpD,CAAC;AAFD,4BAEC"} \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/extractParams.d.ts b/build/commonjs/faceRecognitionNet/extractParams.d.ts deleted file mode 100644 index 14d45d2b..00000000 --- a/build/commonjs/faceRecognitionNet/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/commonjs/faceRecognitionNet/extractParams.js b/build/commonjs/faceRecognitionNet/extractParams.js deleted file mode 100644 index 4662fd95..00000000 --- a/build/commonjs/faceRecognitionNet/extractParams.js +++ /dev/null @@ -1,90 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -function extractorsFactory(extractWeights, paramMappings) { - function extractFilterValues(numFilterValues, numFilters, filterSize) { - var weights = extractWeights(numFilterValues); - var depth = weights.length / (numFilters * filterSize * filterSize); - if (tfjs_image_recognition_base_1.isFloat(depth)) { - throw new Error("depth has to be an integer: " + depth + ", weights.length: " + weights.length + ", numFilters: " + numFilters + ", filterSize: " + filterSize); - } - return tf.tidy(function () { return tf.transpose(tf.tensor4d(weights, [numFilters, depth, filterSize, filterSize]), [2, 3, 1, 0]); }); - } - function extractConvParams(numFilterValues, numFilters, filterSize, mappedPrefix) { - var filters = extractFilterValues(numFilterValues, numFilters, filterSize); - var bias = tf.tensor1d(extractWeights(numFilters)); - paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/bias" }); - return { filters: filters, bias: bias }; - } - function extractScaleLayerParams(numWeights, mappedPrefix) { - var weights = tf.tensor1d(extractWeights(numWeights)); - var biases = tf.tensor1d(extractWeights(numWeights)); - paramMappings.push({ paramPath: mappedPrefix + "/weights" }, { paramPath: mappedPrefix + "/biases" }); - return { - weights: weights, - biases: biases - }; - } - function extractConvLayerParams(numFilterValues, numFilters, filterSize, mappedPrefix) { - var conv = extractConvParams(numFilterValues, numFilters, filterSize, mappedPrefix + "/conv"); - var scale = extractScaleLayerParams(numFilters, mappedPrefix + "/scale"); - return { conv: conv, scale: scale }; - } - function extractResidualLayerParams(numFilterValues, numFilters, filterSize, mappedPrefix, isDown) { - if (isDown === void 0) { isDown = false; } - var conv1 = extractConvLayerParams((isDown ? 0.5 : 1) * numFilterValues, numFilters, filterSize, mappedPrefix + "/conv1"); - var conv2 = extractConvLayerParams(numFilterValues, numFilters, filterSize, mappedPrefix + "/conv2"); - return { conv1: conv1, conv2: conv2 }; - } - return { - extractConvLayerParams: extractConvLayerParams, - extractResidualLayerParams: extractResidualLayerParams - }; -} -function extractParams(weights) { - var _a = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var paramMappings = []; - var _b = extractorsFactory(extractWeights, paramMappings), extractConvLayerParams = _b.extractConvLayerParams, extractResidualLayerParams = _b.extractResidualLayerParams; - var conv32_down = extractConvLayerParams(4704, 32, 7, 'conv32_down'); - var conv32_1 = extractResidualLayerParams(9216, 32, 3, 'conv32_1'); - var conv32_2 = extractResidualLayerParams(9216, 32, 3, 'conv32_2'); - var conv32_3 = extractResidualLayerParams(9216, 32, 3, 'conv32_3'); - var conv64_down = extractResidualLayerParams(36864, 64, 3, 'conv64_down', true); - var conv64_1 = extractResidualLayerParams(36864, 64, 3, 'conv64_1'); - var conv64_2 = extractResidualLayerParams(36864, 64, 3, 'conv64_2'); - var conv64_3 = extractResidualLayerParams(36864, 64, 3, 'conv64_3'); - var conv128_down = extractResidualLayerParams(147456, 128, 3, 'conv128_down', true); - var conv128_1 = extractResidualLayerParams(147456, 128, 3, 'conv128_1'); - var conv128_2 = extractResidualLayerParams(147456, 128, 3, 'conv128_2'); - var conv256_down = extractResidualLayerParams(589824, 256, 3, 'conv256_down', true); - var conv256_1 = extractResidualLayerParams(589824, 256, 3, 'conv256_1'); - var conv256_2 = extractResidualLayerParams(589824, 256, 3, 'conv256_2'); - var conv256_down_out = extractResidualLayerParams(589824, 256, 3, 'conv256_down_out'); - var fc = tf.tidy(function () { return tf.transpose(tf.tensor2d(extractWeights(256 * 128), [128, 256]), [1, 0]); }); - paramMappings.push({ paramPath: "fc" }); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - var params = { - conv32_down: conv32_down, - conv32_1: conv32_1, - conv32_2: conv32_2, - conv32_3: conv32_3, - conv64_down: conv64_down, - conv64_1: conv64_1, - conv64_2: conv64_2, - conv64_3: conv64_3, - conv128_down: conv128_down, - conv128_1: conv128_1, - conv128_2: conv128_2, - conv256_down: conv256_down, - conv256_1: conv256_1, - conv256_2: conv256_2, - conv256_down_out: conv256_down_out, - fc: fc - }; - return { params: params, paramMappings: paramMappings }; -} -exports.extractParams = extractParams; -//# sourceMappingURL=extractParams.js.map \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/extractParams.js.map b/build/commonjs/faceRecognitionNet/extractParams.js.map deleted file mode 100644 index 805aad60..00000000 --- a/build/commonjs/faceRecognitionNet/extractParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/extractParams.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/extractParamsFromWeigthMap.d.ts b/build/commonjs/faceRecognitionNet/extractParamsFromWeigthMap.d.ts deleted file mode 100644 index 7bf5a66d..00000000 --- a/build/commonjs/faceRecognitionNet/extractParamsFromWeigthMap.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/commonjs/faceRecognitionNet/extractParamsFromWeigthMap.js b/build/commonjs/faceRecognitionNet/extractParamsFromWeigthMap.js deleted file mode 100644 index 6fb24f4d..00000000 --- a/build/commonjs/faceRecognitionNet/extractParamsFromWeigthMap.js +++ /dev/null @@ -1,73 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -function extractorsFactory(weightMap, paramMappings) { - var extractWeightEntry = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings); - function extractScaleLayerParams(prefix) { - var weights = extractWeightEntry(prefix + "/scale/weights", 1); - var biases = extractWeightEntry(prefix + "/scale/biases", 1); - return { weights: weights, biases: biases }; - } - function extractConvLayerParams(prefix) { - var filters = extractWeightEntry(prefix + "/conv/filters", 4); - var bias = extractWeightEntry(prefix + "/conv/bias", 1); - var scale = extractScaleLayerParams(prefix); - return { conv: { filters: filters, bias: bias }, scale: scale }; - } - function extractResidualLayerParams(prefix) { - return { - conv1: extractConvLayerParams(prefix + "/conv1"), - conv2: extractConvLayerParams(prefix + "/conv2") - }; - } - return { - extractConvLayerParams: extractConvLayerParams, - extractResidualLayerParams: extractResidualLayerParams - }; -} -function extractParamsFromWeigthMap(weightMap) { - var paramMappings = []; - var _a = extractorsFactory(weightMap, paramMappings), extractConvLayerParams = _a.extractConvLayerParams, extractResidualLayerParams = _a.extractResidualLayerParams; - var conv32_down = extractConvLayerParams('conv32_down'); - var conv32_1 = extractResidualLayerParams('conv32_1'); - var conv32_2 = extractResidualLayerParams('conv32_2'); - var conv32_3 = extractResidualLayerParams('conv32_3'); - var conv64_down = extractResidualLayerParams('conv64_down'); - var conv64_1 = extractResidualLayerParams('conv64_1'); - var conv64_2 = extractResidualLayerParams('conv64_2'); - var conv64_3 = extractResidualLayerParams('conv64_3'); - var conv128_down = extractResidualLayerParams('conv128_down'); - var conv128_1 = extractResidualLayerParams('conv128_1'); - var conv128_2 = extractResidualLayerParams('conv128_2'); - var conv256_down = extractResidualLayerParams('conv256_down'); - var conv256_1 = extractResidualLayerParams('conv256_1'); - var conv256_2 = extractResidualLayerParams('conv256_2'); - var conv256_down_out = extractResidualLayerParams('conv256_down_out'); - var fc = weightMap['fc']; - paramMappings.push({ originalPath: 'fc', paramPath: 'fc' }); - if (!tfjs_image_recognition_base_1.isTensor2D(fc)) { - throw new Error("expected weightMap[fc] to be a Tensor2D, instead have " + fc); - } - var params = { - conv32_down: conv32_down, - conv32_1: conv32_1, - conv32_2: conv32_2, - conv32_3: conv32_3, - conv64_down: conv64_down, - conv64_1: conv64_1, - conv64_2: conv64_2, - conv64_3: conv64_3, - conv128_down: conv128_down, - conv128_1: conv128_1, - conv128_2: conv128_2, - conv256_down: conv256_down, - conv256_1: conv256_1, - conv256_2: conv256_2, - conv256_down_out: conv256_down_out, - fc: fc - }; - tfjs_image_recognition_base_1.TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: params, paramMappings: paramMappings }; -} -exports.extractParamsFromWeigthMap = extractParamsFromWeigthMap; -//# sourceMappingURL=extractParamsFromWeigthMap.js.map \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/extractParamsFromWeigthMap.js.map b/build/commonjs/faceRecognitionNet/extractParamsFromWeigthMap.js.map deleted file mode 100644 index 3f512874..00000000 --- a/build/commonjs/faceRecognitionNet/extractParamsFromWeigthMap.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParamsFromWeigthMap.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/extractParamsFromWeigthMap.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/index.d.ts b/build/commonjs/faceRecognitionNet/index.d.ts deleted file mode 100644 index 487d6af4..00000000 --- a/build/commonjs/faceRecognitionNet/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { FaceRecognitionNet } from './FaceRecognitionNet'; -export * from './FaceRecognitionNet'; -export declare function createFaceRecognitionNet(weights: Float32Array): FaceRecognitionNet; diff --git a/build/commonjs/faceRecognitionNet/index.js b/build/commonjs/faceRecognitionNet/index.js deleted file mode 100644 index 926218e3..00000000 --- a/build/commonjs/faceRecognitionNet/index.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var FaceRecognitionNet_1 = require("./FaceRecognitionNet"); -tslib_1.__exportStar(require("./FaceRecognitionNet"), exports); -function createFaceRecognitionNet(weights) { - var net = new FaceRecognitionNet_1.FaceRecognitionNet(); - net.extractWeights(weights); - return net; -} -exports.createFaceRecognitionNet = createFaceRecognitionNet; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/index.js.map b/build/commonjs/faceRecognitionNet/index.js.map deleted file mode 100644 index 5047539f..00000000 --- a/build/commonjs/faceRecognitionNet/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/index.ts"],"names":[],"mappings":";;;AAAA,2DAA0D;AAE1D,+DAAqC;AAErC,SAAgB,wBAAwB,CAAC,OAAqB;IAC5D,IAAM,GAAG,GAAG,IAAI,uCAAkB,EAAE,CAAA;IACpC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC;AAJD,4DAIC"} \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/residualLayer.d.ts b/build/commonjs/faceRecognitionNet/residualLayer.d.ts deleted file mode 100644 index 1656e0a0..00000000 --- a/build/commonjs/faceRecognitionNet/residualLayer.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { ResidualLayerParams } from './types'; -export declare function residual(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D; -export declare function residualDown(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D; diff --git a/build/commonjs/faceRecognitionNet/residualLayer.js b/build/commonjs/faceRecognitionNet/residualLayer.js deleted file mode 100644 index 04c60b23..00000000 --- a/build/commonjs/faceRecognitionNet/residualLayer.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -var convLayer_1 = require("./convLayer"); -function residual(x, params) { - var out = convLayer_1.conv(x, params.conv1); - out = convLayer_1.convNoRelu(out, params.conv2); - out = tf.add(out, x); - out = tf.relu(out); - return out; -} -exports.residual = residual; -function residualDown(x, params) { - var out = convLayer_1.convDown(x, params.conv1); - out = convLayer_1.convNoRelu(out, params.conv2); - var pooled = tf.avgPool(x, 2, 2, 'valid'); - var zeros = tf.zeros(pooled.shape); - var isPad = pooled.shape[3] !== out.shape[3]; - var isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2]; - if (isAdjustShape) { - var padShapeX = out.shape.slice(); - padShapeX[1] = 1; - var zerosW = tf.zeros(padShapeX); - out = tf.concat([out, zerosW], 1); - var padShapeY = out.shape.slice(); - padShapeY[2] = 1; - var zerosH = tf.zeros(padShapeY); - out = tf.concat([out, zerosH], 2); - } - pooled = isPad ? tf.concat([pooled, zeros], 3) : pooled; - out = tf.add(pooled, out); - out = tf.relu(out); - return out; -} -exports.residualDown = residualDown; -//# sourceMappingURL=residualLayer.js.map \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/residualLayer.js.map b/build/commonjs/faceRecognitionNet/residualLayer.js.map deleted file mode 100644 index 7577f722..00000000 --- a/build/commonjs/faceRecognitionNet/residualLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"residualLayer.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/residualLayer.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAE5C,yCAAyD;AAGzD,SAAgB,QAAQ,CAAC,CAAc,EAAE,MAA2B;IAClE,IAAI,GAAG,GAAG,gBAAI,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IAC/B,GAAG,GAAG,sBAAU,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IACnC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACpB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClB,OAAO,GAAG,CAAA;AACZ,CAAC;AAND,4BAMC;AAED,SAAgB,YAAY,CAAC,CAAc,EAAE,MAA2B;IACtE,IAAI,GAAG,GAAG,oBAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IACnC,GAAG,GAAG,sBAAU,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IAEnC,IAAI,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAgB,CAAA;IACxD,IAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAa,MAAM,CAAC,KAAK,CAAC,CAAA;IAChD,IAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC9C,IAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAE1F,IAAI,aAAa,EAAE;QACjB,IAAM,SAAS,GAAO,GAAG,CAAC,KAAK,QAAqC,CAAA;QACpE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAChB,IAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAa,SAAS,CAAC,CAAA;QAC9C,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAEjC,IAAM,SAAS,GAAO,GAAG,CAAC,KAAK,QAAqC,CAAA;QACpE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAChB,IAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAa,SAAS,CAAC,CAAA;QAC9C,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;KAClC;IAED,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IACvD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAgB,CAAA;IAExC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClB,OAAO,GAAG,CAAA;AACZ,CAAC;AA1BD,oCA0BC"} \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/scaleLayer.d.ts b/build/commonjs/faceRecognitionNet/scaleLayer.d.ts deleted file mode 100644 index 07a866ea..00000000 --- a/build/commonjs/faceRecognitionNet/scaleLayer.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { ScaleLayerParams } from './types'; -export declare function scale(x: tf.Tensor4D, params: ScaleLayerParams): tf.Tensor4D; diff --git a/build/commonjs/faceRecognitionNet/scaleLayer.js b/build/commonjs/faceRecognitionNet/scaleLayer.js deleted file mode 100644 index e00e7958..00000000 --- a/build/commonjs/faceRecognitionNet/scaleLayer.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -function scale(x, params) { - return tf.add(tf.mul(x, params.weights), params.biases); -} -exports.scale = scale; -//# sourceMappingURL=scaleLayer.js.map \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/scaleLayer.js.map b/build/commonjs/faceRecognitionNet/scaleLayer.js.map deleted file mode 100644 index f68f8974..00000000 --- a/build/commonjs/faceRecognitionNet/scaleLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"scaleLayer.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/scaleLayer.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAI5C,SAAgB,KAAK,CAAC,CAAc,EAAE,MAAwB;IAC5D,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;AACzD,CAAC;AAFD,sBAEC"} \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/types.d.ts b/build/commonjs/faceRecognitionNet/types.d.ts deleted file mode 100644 index a390ee87..00000000 --- a/build/commonjs/faceRecognitionNet/types.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export declare type ScaleLayerParams = { - weights: tf.Tensor1D; - biases: tf.Tensor1D; -}; -export declare type ResidualLayerParams = { - conv1: ConvLayerParams; - conv2: ConvLayerParams; -}; -export declare type ConvLayerParams = { - conv: TfjsImageRecognitionBase.ConvParams; - scale: ScaleLayerParams; -}; -export declare type NetParams = { - conv32_down: ConvLayerParams; - conv32_1: ResidualLayerParams; - conv32_2: ResidualLayerParams; - conv32_3: ResidualLayerParams; - conv64_down: ResidualLayerParams; - conv64_1: ResidualLayerParams; - conv64_2: ResidualLayerParams; - conv64_3: ResidualLayerParams; - conv128_down: ResidualLayerParams; - conv128_1: ResidualLayerParams; - conv128_2: ResidualLayerParams; - conv256_down: ResidualLayerParams; - conv256_1: ResidualLayerParams; - conv256_2: ResidualLayerParams; - conv256_down_out: ResidualLayerParams; - fc: tf.Tensor2D; -}; diff --git a/build/commonjs/faceRecognitionNet/types.js b/build/commonjs/faceRecognitionNet/types.js deleted file mode 100644 index 11e638d1..00000000 --- a/build/commonjs/faceRecognitionNet/types.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/types.js.map b/build/commonjs/faceRecognitionNet/types.js.map deleted file mode 100644 index 3e899768..00000000 --- a/build/commonjs/faceRecognitionNet/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/build/commonjs/factories/WithFaceDescriptor.d.ts b/build/commonjs/factories/WithFaceDescriptor.d.ts deleted file mode 100644 index 45175ba6..00000000 --- a/build/commonjs/factories/WithFaceDescriptor.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare type WithFaceDescriptor = TSource & { - descriptor: Float32Array; -}; -export declare function extendWithFaceDescriptor(sourceObj: TSource, descriptor: Float32Array): WithFaceDescriptor; diff --git a/build/commonjs/factories/WithFaceDescriptor.js b/build/commonjs/factories/WithFaceDescriptor.js deleted file mode 100644 index 72a97ed5..00000000 --- a/build/commonjs/factories/WithFaceDescriptor.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function extendWithFaceDescriptor(sourceObj, descriptor) { - var extension = { descriptor: descriptor }; - return Object.assign({}, sourceObj, extension); -} -exports.extendWithFaceDescriptor = extendWithFaceDescriptor; -//# sourceMappingURL=WithFaceDescriptor.js.map \ No newline at end of file diff --git a/build/commonjs/factories/WithFaceDescriptor.js.map b/build/commonjs/factories/WithFaceDescriptor.js.map deleted file mode 100644 index cf9f56ab..00000000 --- a/build/commonjs/factories/WithFaceDescriptor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"WithFaceDescriptor.js","sourceRoot":"","sources":["../../../src/factories/WithFaceDescriptor.ts"],"names":[],"mappings":";;AAIA,SAAgB,wBAAwB,CAGtC,SAAkB,EAClB,UAAwB;IAGxB,IAAM,SAAS,GAAG,EAAE,UAAU,YAAA,EAAE,CAAA;IAChC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC;AATD,4DASC"} \ No newline at end of file diff --git a/build/commonjs/factories/WithFaceDetection.d.ts b/build/commonjs/factories/WithFaceDetection.d.ts deleted file mode 100644 index dd91b175..00000000 --- a/build/commonjs/factories/WithFaceDetection.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { FaceDetection } from '../classes/FaceDetection'; -export declare type WithFaceDetection = TSource & { - detection: FaceDetection; -}; -export declare function extendWithFaceDetection(sourceObj: TSource, detection: FaceDetection): WithFaceDetection; diff --git a/build/commonjs/factories/WithFaceDetection.js b/build/commonjs/factories/WithFaceDetection.js deleted file mode 100644 index 2dc7bc7b..00000000 --- a/build/commonjs/factories/WithFaceDetection.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function extendWithFaceDetection(sourceObj, detection) { - var extension = { detection: detection }; - return Object.assign({}, sourceObj, extension); -} -exports.extendWithFaceDetection = extendWithFaceDetection; -//# sourceMappingURL=WithFaceDetection.js.map \ No newline at end of file diff --git a/build/commonjs/factories/WithFaceDetection.js.map b/build/commonjs/factories/WithFaceDetection.js.map deleted file mode 100644 index d5943666..00000000 --- a/build/commonjs/factories/WithFaceDetection.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"WithFaceDetection.js","sourceRoot":"","sources":["../../../src/factories/WithFaceDetection.ts"],"names":[],"mappings":";;AAMA,SAAgB,uBAAuB,CAGrC,SAAkB,EAClB,SAAwB;IAGxB,IAAM,SAAS,GAAG,EAAE,SAAS,WAAA,EAAE,CAAA;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC;AATD,0DASC"} \ No newline at end of file diff --git a/build/commonjs/factories/WithFaceExpressions.d.ts b/build/commonjs/factories/WithFaceExpressions.d.ts deleted file mode 100644 index 2309d8ea..00000000 --- a/build/commonjs/factories/WithFaceExpressions.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { FaceExpressionPrediction } from '../faceExpressionNet/types'; -export declare type WithFaceExpressions = TSource & { - expressions: FaceExpressionPrediction[]; -}; -export declare function extendWithFaceExpressions(sourceObj: TSource, expressions: FaceExpressionPrediction[]): WithFaceExpressions; diff --git a/build/commonjs/factories/WithFaceExpressions.js b/build/commonjs/factories/WithFaceExpressions.js deleted file mode 100644 index 84a6fa73..00000000 --- a/build/commonjs/factories/WithFaceExpressions.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function extendWithFaceExpressions(sourceObj, expressions) { - var extension = { expressions: expressions }; - return Object.assign({}, sourceObj, extension); -} -exports.extendWithFaceExpressions = extendWithFaceExpressions; -//# sourceMappingURL=WithFaceExpressions.js.map \ No newline at end of file diff --git a/build/commonjs/factories/WithFaceExpressions.js.map b/build/commonjs/factories/WithFaceExpressions.js.map deleted file mode 100644 index cd9187cc..00000000 --- a/build/commonjs/factories/WithFaceExpressions.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"WithFaceExpressions.js","sourceRoot":"","sources":["../../../src/factories/WithFaceExpressions.ts"],"names":[],"mappings":";;AAMA,SAAgB,yBAAyB,CAGvC,SAAkB,EAClB,WAAuC;IAGvC,IAAM,SAAS,GAAG,EAAE,WAAW,aAAA,EAAE,CAAA;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC;AATD,8DASC"} \ No newline at end of file diff --git a/build/commonjs/factories/WithFaceLandmarks.d.ts b/build/commonjs/factories/WithFaceLandmarks.d.ts deleted file mode 100644 index 36840d24..00000000 --- a/build/commonjs/factories/WithFaceLandmarks.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { FaceDetection } from '../classes/FaceDetection'; -import { FaceLandmarks } from '../classes/FaceLandmarks'; -import { FaceLandmarks68 } from '../classes/FaceLandmarks68'; -import { WithFaceDetection } from './WithFaceDetection'; -export declare type WithFaceLandmarks, TFaceLandmarks extends FaceLandmarks = FaceLandmarks68> = TSource & { - landmarks: TFaceLandmarks; - unshiftedLandmarks: TFaceLandmarks; - alignedRect: FaceDetection; -}; -export declare function extendWithFaceLandmarks, TFaceLandmarks extends FaceLandmarks = FaceLandmarks68>(sourceObj: TSource, unshiftedLandmarks: TFaceLandmarks): WithFaceLandmarks; diff --git a/build/commonjs/factories/WithFaceLandmarks.js b/build/commonjs/factories/WithFaceLandmarks.js deleted file mode 100644 index fc7ca0f9..00000000 --- a/build/commonjs/factories/WithFaceLandmarks.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var FaceDetection_1 = require("../classes/FaceDetection"); -function extendWithFaceLandmarks(sourceObj, unshiftedLandmarks) { - var shift = sourceObj.detection.box; - var landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y); - var rect = landmarks.align(); - var imageDims = sourceObj.detection.imageDims; - var alignedRect = new FaceDetection_1.FaceDetection(sourceObj.detection.score, rect.rescale(imageDims.reverse()), imageDims); - var extension = { - landmarks: landmarks, - unshiftedLandmarks: unshiftedLandmarks, - alignedRect: alignedRect - }; - return Object.assign({}, sourceObj, extension); -} -exports.extendWithFaceLandmarks = extendWithFaceLandmarks; -//# sourceMappingURL=WithFaceLandmarks.js.map \ No newline at end of file diff --git a/build/commonjs/factories/WithFaceLandmarks.js.map b/build/commonjs/factories/WithFaceLandmarks.js.map deleted file mode 100644 index 0624e046..00000000 --- a/build/commonjs/factories/WithFaceLandmarks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"WithFaceLandmarks.js","sourceRoot":"","sources":["../../../src/factories/WithFaceLandmarks.ts"],"names":[],"mappings":";;AAAA,0DAAyD;AAczD,SAAgB,uBAAuB,CAIrC,SAAkB,EAClB,kBAAkC;IAG1B,IAAA,+BAAU,CAAwB;IAC1C,IAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAiB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IAE9E,IAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAA;IACtB,IAAA,yCAAS,CAAwB;IACzC,IAAM,WAAW,GAAG,IAAI,6BAAa,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;IAE9G,IAAM,SAAS,GAAG;QAChB,SAAS,WAAA;QACT,kBAAkB,oBAAA;QAClB,WAAW,aAAA;KACZ,CAAA;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC;AAtBD,0DAsBC"} \ No newline at end of file diff --git a/build/commonjs/factories/index.d.ts b/build/commonjs/factories/index.d.ts deleted file mode 100644 index c4b351df..00000000 --- a/build/commonjs/factories/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './WithFaceDescriptor'; -export * from './WithFaceDetection'; -export * from './WithFaceExpressions'; -export * from './WithFaceLandmarks'; diff --git a/build/commonjs/factories/index.js b/build/commonjs/factories/index.js deleted file mode 100644 index dc041752..00000000 --- a/build/commonjs/factories/index.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -tslib_1.__exportStar(require("./WithFaceDescriptor"), exports); -tslib_1.__exportStar(require("./WithFaceDetection"), exports); -tslib_1.__exportStar(require("./WithFaceExpressions"), exports); -tslib_1.__exportStar(require("./WithFaceLandmarks"), exports); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/commonjs/factories/index.js.map b/build/commonjs/factories/index.js.map deleted file mode 100644 index 36f22829..00000000 --- a/build/commonjs/factories/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/factories/index.ts"],"names":[],"mappings":";;;AAAA,+DAAoC;AACpC,8DAAmC;AACnC,gEAAqC;AACrC,8DAAmC"} \ No newline at end of file diff --git a/build/commonjs/globalApi/ComposableTask.d.ts b/build/commonjs/globalApi/ComposableTask.d.ts deleted file mode 100644 index b7203e33..00000000 --- a/build/commonjs/globalApi/ComposableTask.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare class ComposableTask { - then(onfulfilled: (value: T) => T | PromiseLike): Promise; - run(): Promise; -} diff --git a/build/commonjs/globalApi/ComposableTask.js b/build/commonjs/globalApi/ComposableTask.js deleted file mode 100644 index 7c111ee7..00000000 --- a/build/commonjs/globalApi/ComposableTask.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var ComposableTask = /** @class */ (function () { - function ComposableTask() { - } - ComposableTask.prototype.then = function (onfulfilled) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = onfulfilled; - return [4 /*yield*/, this.run()]; - case 1: return [2 /*return*/, _a.apply(void 0, [_b.sent()])]; - } - }); - }); - }; - ComposableTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - throw new Error('ComposableTask - run is not implemented'); - }); - }); - }; - return ComposableTask; -}()); -exports.ComposableTask = ComposableTask; -//# sourceMappingURL=ComposableTask.js.map \ No newline at end of file diff --git a/build/commonjs/globalApi/ComposableTask.js.map b/build/commonjs/globalApi/ComposableTask.js.map deleted file mode 100644 index 97bdd610..00000000 --- a/build/commonjs/globalApi/ComposableTask.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ComposableTask.js","sourceRoot":"","sources":["../../../src/globalApi/ComposableTask.ts"],"names":[],"mappings":";;;AAAA;IAAA;IAWA,CAAC;IATc,6BAAI,GAAjB,UACE,WAA6C;;;;;;wBAEtC,KAAA,WAAW,CAAA;wBAAC,qBAAM,IAAI,CAAC,GAAG,EAAE,EAAA;4BAAnC,sBAAO,kBAAY,SAAgB,EAAC,EAAA;;;;KACrC;IAEY,4BAAG,GAAhB;;;gBACE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;;;KAC3D;IACH,qBAAC;AAAD,CAAC,AAXD,IAWC;AAXY,wCAAc"} \ No newline at end of file diff --git a/build/commonjs/globalApi/ComputeFaceDescriptorsTasks.d.ts b/build/commonjs/globalApi/ComputeFaceDescriptorsTasks.d.ts deleted file mode 100644 index 3cf96b39..00000000 --- a/build/commonjs/globalApi/ComputeFaceDescriptorsTasks.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { WithFaceDescriptor } from '../factories/WithFaceDescriptor'; -import { WithFaceDetection } from '../factories/WithFaceDetection'; -import { WithFaceLandmarks } from '../factories/WithFaceLandmarks'; -import { ComposableTask } from './ComposableTask'; -export declare class ComputeFaceDescriptorsTaskBase extends ComposableTask { - protected parentTask: ComposableTask | Promise; - protected input: TNetInput; - constructor(parentTask: ComposableTask | Promise, input: TNetInput); -} -export declare class ComputeAllFaceDescriptorsTask>> extends ComputeFaceDescriptorsTaskBase[], TSource[]> { - run(): Promise[]>; -} -export declare class ComputeSingleFaceDescriptorTask>> extends ComputeFaceDescriptorsTaskBase | undefined, TSource | undefined> { - run(): Promise | undefined>; -} diff --git a/build/commonjs/globalApi/ComputeFaceDescriptorsTasks.js b/build/commonjs/globalApi/ComputeFaceDescriptorsTasks.js deleted file mode 100644 index 79bc63e6..00000000 --- a/build/commonjs/globalApi/ComputeFaceDescriptorsTasks.js +++ /dev/null @@ -1,111 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -var dom_1 = require("../dom"); -var WithFaceDescriptor_1 = require("../factories/WithFaceDescriptor"); -var ComposableTask_1 = require("./ComposableTask"); -var nets_1 = require("./nets"); -var ComputeFaceDescriptorsTaskBase = /** @class */ (function (_super) { - tslib_1.__extends(ComputeFaceDescriptorsTaskBase, _super); - function ComputeFaceDescriptorsTaskBase(parentTask, input) { - var _this = _super.call(this) || this; - _this.parentTask = parentTask; - _this.input = input; - return _this; - } - return ComputeFaceDescriptorsTaskBase; -}(ComposableTask_1.ComposableTask)); -exports.ComputeFaceDescriptorsTaskBase = ComputeFaceDescriptorsTaskBase; -var ComputeAllFaceDescriptorsTask = /** @class */ (function (_super) { - tslib_1.__extends(ComputeAllFaceDescriptorsTask, _super); - function ComputeAllFaceDescriptorsTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - ComputeAllFaceDescriptorsTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var parentResults, alignedRects, alignedFaces, _a, results; - var _this = this; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResults = _b.sent(); - alignedRects = parentResults.map(function (_a) { - var alignedRect = _a.alignedRect; - return alignedRect; - }); - if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, dom_1.extractFaceTensors(this.input, alignedRects)]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, dom_1.extractFaces(this.input, alignedRects)]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - alignedFaces = _a; - return [4 /*yield*/, Promise.all(parentResults.map(function (parentResult, i) { return tslib_1.__awaiter(_this, void 0, void 0, function () { - var descriptor; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, nets_1.nets.faceRecognitionNet.computeFaceDescriptor(alignedFaces[i])]; - case 1: - descriptor = _a.sent(); - return [2 /*return*/, WithFaceDescriptor_1.extendWithFaceDescriptor(parentResult, descriptor)]; - } - }); - }); }))]; - case 6: - results = _b.sent(); - alignedFaces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); }); - return [2 /*return*/, results]; - } - }); - }); - }; - return ComputeAllFaceDescriptorsTask; -}(ComputeFaceDescriptorsTaskBase)); -exports.ComputeAllFaceDescriptorsTask = ComputeAllFaceDescriptorsTask; -var ComputeSingleFaceDescriptorTask = /** @class */ (function (_super) { - tslib_1.__extends(ComputeSingleFaceDescriptorTask, _super); - function ComputeSingleFaceDescriptorTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - ComputeSingleFaceDescriptorTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var parentResult, alignedRect, alignedFaces, _a, descriptor; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResult = _b.sent(); - if (!parentResult) { - return [2 /*return*/]; - } - alignedRect = parentResult.alignedRect; - if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, dom_1.extractFaceTensors(this.input, [alignedRect])]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, dom_1.extractFaces(this.input, [alignedRect])]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - alignedFaces = _a; - return [4 /*yield*/, nets_1.nets.faceRecognitionNet.computeFaceDescriptor(alignedFaces[0])]; - case 6: - descriptor = _b.sent(); - alignedFaces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); }); - return [2 /*return*/, WithFaceDescriptor_1.extendWithFaceDescriptor(parentResult, descriptor)]; - } - }); - }); - }; - return ComputeSingleFaceDescriptorTask; -}(ComputeFaceDescriptorsTaskBase)); -exports.ComputeSingleFaceDescriptorTask = ComputeSingleFaceDescriptorTask; -//# sourceMappingURL=ComputeFaceDescriptorsTasks.js.map \ No newline at end of file diff --git a/build/commonjs/globalApi/ComputeFaceDescriptorsTasks.js.map b/build/commonjs/globalApi/ComputeFaceDescriptorsTasks.js.map deleted file mode 100644 index fe1d225f..00000000 --- a/build/commonjs/globalApi/ComputeFaceDescriptorsTasks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ComputeFaceDescriptorsTasks.js","sourceRoot":"","sources":["../../../src/globalApi/ComputeFaceDescriptorsTasks.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/globalApi/DetectFaceLandmarksTasks.d.ts b/build/commonjs/globalApi/DetectFaceLandmarksTasks.d.ts deleted file mode 100644 index 2c528911..00000000 --- a/build/commonjs/globalApi/DetectFaceLandmarksTasks.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net'; -import { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet'; -import { WithFaceDetection } from '../factories/WithFaceDetection'; -import { WithFaceLandmarks } from '../factories/WithFaceLandmarks'; -import { ComposableTask } from './ComposableTask'; -import { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks'; -export declare class DetectFaceLandmarksTaskBase extends ComposableTask { - protected parentTask: ComposableTask | Promise; - protected input: TNetInput; - protected useTinyLandmarkNet: boolean; - constructor(parentTask: ComposableTask | Promise, input: TNetInput, useTinyLandmarkNet: boolean); - protected readonly landmarkNet: FaceLandmark68Net | FaceLandmark68TinyNet; -} -export declare class DetectAllFaceLandmarksTask> extends DetectFaceLandmarksTaskBase[], TSource[]> { - run(): Promise[]>; - withFaceDescriptors(): ComputeAllFaceDescriptorsTask>; -} -export declare class DetectSingleFaceLandmarksTask> extends DetectFaceLandmarksTaskBase | undefined, TSource | undefined> { - run(): Promise | undefined>; - withFaceDescriptor(): ComputeSingleFaceDescriptorTask>; -} diff --git a/build/commonjs/globalApi/DetectFaceLandmarksTasks.js b/build/commonjs/globalApi/DetectFaceLandmarksTasks.js deleted file mode 100644 index ca7190e9..00000000 --- a/build/commonjs/globalApi/DetectFaceLandmarksTasks.js +++ /dev/null @@ -1,117 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -var dom_1 = require("../dom"); -var WithFaceLandmarks_1 = require("../factories/WithFaceLandmarks"); -var ComposableTask_1 = require("./ComposableTask"); -var ComputeFaceDescriptorsTasks_1 = require("./ComputeFaceDescriptorsTasks"); -var nets_1 = require("./nets"); -var DetectFaceLandmarksTaskBase = /** @class */ (function (_super) { - tslib_1.__extends(DetectFaceLandmarksTaskBase, _super); - function DetectFaceLandmarksTaskBase(parentTask, input, useTinyLandmarkNet) { - var _this = _super.call(this) || this; - _this.parentTask = parentTask; - _this.input = input; - _this.useTinyLandmarkNet = useTinyLandmarkNet; - return _this; - } - Object.defineProperty(DetectFaceLandmarksTaskBase.prototype, "landmarkNet", { - get: function () { - return this.useTinyLandmarkNet - ? nets_1.nets.faceLandmark68TinyNet - : nets_1.nets.faceLandmark68Net; - }, - enumerable: true, - configurable: true - }); - return DetectFaceLandmarksTaskBase; -}(ComposableTask_1.ComposableTask)); -exports.DetectFaceLandmarksTaskBase = DetectFaceLandmarksTaskBase; -var DetectAllFaceLandmarksTask = /** @class */ (function (_super) { - tslib_1.__extends(DetectAllFaceLandmarksTask, _super); - function DetectAllFaceLandmarksTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - DetectAllFaceLandmarksTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var parentResults, detections, faces, _a, faceLandmarksByFace; - var _this = this; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResults = _b.sent(); - detections = parentResults.map(function (res) { return res.detection; }); - if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, dom_1.extractFaceTensors(this.input, detections)]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, dom_1.extractFaces(this.input, detections)]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - faces = _a; - return [4 /*yield*/, Promise.all(faces.map(function (face) { return _this.landmarkNet.detectLandmarks(face); }))]; - case 6: - faceLandmarksByFace = _b.sent(); - faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); }); - return [2 /*return*/, parentResults.map(function (parentResult, i) { - return WithFaceLandmarks_1.extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i]); - })]; - } - }); - }); - }; - DetectAllFaceLandmarksTask.prototype.withFaceDescriptors = function () { - return new ComputeFaceDescriptorsTasks_1.ComputeAllFaceDescriptorsTask(this, this.input); - }; - return DetectAllFaceLandmarksTask; -}(DetectFaceLandmarksTaskBase)); -exports.DetectAllFaceLandmarksTask = DetectAllFaceLandmarksTask; -var DetectSingleFaceLandmarksTask = /** @class */ (function (_super) { - tslib_1.__extends(DetectSingleFaceLandmarksTask, _super); - function DetectSingleFaceLandmarksTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - DetectSingleFaceLandmarksTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var parentResult, detection, faces, _a, landmarks; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResult = _b.sent(); - if (!parentResult) { - return [2 /*return*/]; - } - detection = parentResult.detection; - if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, dom_1.extractFaceTensors(this.input, [detection])]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, dom_1.extractFaces(this.input, [detection])]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - faces = _a; - return [4 /*yield*/, this.landmarkNet.detectLandmarks(faces[0])]; - case 6: - landmarks = _b.sent(); - faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); }); - return [2 /*return*/, WithFaceLandmarks_1.extendWithFaceLandmarks(parentResult, landmarks)]; - } - }); - }); - }; - DetectSingleFaceLandmarksTask.prototype.withFaceDescriptor = function () { - return new ComputeFaceDescriptorsTasks_1.ComputeSingleFaceDescriptorTask(this, this.input); - }; - return DetectSingleFaceLandmarksTask; -}(DetectFaceLandmarksTaskBase)); -exports.DetectSingleFaceLandmarksTask = DetectSingleFaceLandmarksTask; -//# sourceMappingURL=DetectFaceLandmarksTasks.js.map \ No newline at end of file diff --git a/build/commonjs/globalApi/DetectFaceLandmarksTasks.js.map b/build/commonjs/globalApi/DetectFaceLandmarksTasks.js.map deleted file mode 100644 index 9a341708..00000000 --- a/build/commonjs/globalApi/DetectFaceLandmarksTasks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"DetectFaceLandmarksTasks.js","sourceRoot":"","sources":["../../../src/globalApi/DetectFaceLandmarksTasks.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/globalApi/DetectFacesTasks.d.ts b/build/commonjs/globalApi/DetectFacesTasks.d.ts deleted file mode 100644 index a8c24840..00000000 --- a/build/commonjs/globalApi/DetectFacesTasks.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -import { WithFaceDetection } from '../factories/WithFaceDetection'; -import { ComposableTask } from './ComposableTask'; -import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks'; -import { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionTask } from './PredictFaceExpressionsTask'; -import { FaceDetectionOptions } from './types'; -export declare class DetectFacesTaskBase extends ComposableTask { - protected input: TNetInput; - protected options: FaceDetectionOptions; - constructor(input: TNetInput, options?: FaceDetectionOptions); -} -export declare class DetectAllFacesTask extends DetectFacesTaskBase { - run(): Promise; - private runAndExtendWithFaceDetections; - withFaceLandmarks(useTinyLandmarkNet?: boolean): DetectAllFaceLandmarksTask>; - withFaceExpressions(): PredictAllFaceExpressionsTask>; -} -export declare class DetectSingleFaceTask extends DetectFacesTaskBase { - run(): Promise; - private runAndExtendWithFaceDetection; - withFaceLandmarks(useTinyLandmarkNet?: boolean): DetectSingleFaceLandmarksTask>; - withFaceExpressions(): PredictSingleFaceExpressionTask>; -} diff --git a/build/commonjs/globalApi/DetectFacesTasks.js b/build/commonjs/globalApi/DetectFacesTasks.js deleted file mode 100644 index 4ee9e245..00000000 --- a/build/commonjs/globalApi/DetectFacesTasks.js +++ /dev/null @@ -1,129 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var WithFaceDetection_1 = require("../factories/WithFaceDetection"); -var MtcnnOptions_1 = require("../mtcnn/MtcnnOptions"); -var SsdMobilenetv1Options_1 = require("../ssdMobilenetv1/SsdMobilenetv1Options"); -var TinyFaceDetectorOptions_1 = require("../tinyFaceDetector/TinyFaceDetectorOptions"); -var ComposableTask_1 = require("./ComposableTask"); -var DetectFaceLandmarksTasks_1 = require("./DetectFaceLandmarksTasks"); -var nets_1 = require("./nets"); -var PredictFaceExpressionsTask_1 = require("./PredictFaceExpressionsTask"); -var DetectFacesTaskBase = /** @class */ (function (_super) { - tslib_1.__extends(DetectFacesTaskBase, _super); - function DetectFacesTaskBase(input, options) { - if (options === void 0) { options = new SsdMobilenetv1Options_1.SsdMobilenetv1Options(); } - var _this = _super.call(this) || this; - _this.input = input; - _this.options = options; - return _this; - } - return DetectFacesTaskBase; -}(ComposableTask_1.ComposableTask)); -exports.DetectFacesTaskBase = DetectFacesTaskBase; -var DetectAllFacesTask = /** @class */ (function (_super) { - tslib_1.__extends(DetectAllFacesTask, _super); - function DetectAllFacesTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - DetectAllFacesTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a, input, options, faceDetectionFunction; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this, input = _a.input, options = _a.options; - if (!(options instanceof MtcnnOptions_1.MtcnnOptions)) return [3 /*break*/, 2]; - return [4 /*yield*/, nets_1.nets.mtcnn.forward(input, options)]; - case 1: return [2 /*return*/, (_b.sent()) - .map(function (result) { return result.detection; })]; - case 2: - faceDetectionFunction = options instanceof TinyFaceDetectorOptions_1.TinyFaceDetectorOptions - ? function (input) { return nets_1.nets.tinyFaceDetector.locateFaces(input, options); } - : (options instanceof SsdMobilenetv1Options_1.SsdMobilenetv1Options - ? function (input) { return nets_1.nets.ssdMobilenetv1.locateFaces(input, options); } - : (options instanceof tfjs_image_recognition_base_1.TfjsImageRecognitionBase.TinyYolov2Options - ? function (input) { return nets_1.nets.tinyYolov2.locateFaces(input, options); } - : null)); - if (!faceDetectionFunction) { - throw new Error('detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options'); - } - return [2 /*return*/, faceDetectionFunction(input)]; - } - }); - }); - }; - DetectAllFacesTask.prototype.runAndExtendWithFaceDetections = function () { - var _this = this; - return new Promise(function (res) { return tslib_1.__awaiter(_this, void 0, void 0, function () { - var detections; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.run()]; - case 1: - detections = _a.sent(); - return [2 /*return*/, res(detections.map(function (detection) { return WithFaceDetection_1.extendWithFaceDetection({}, detection); }))]; - } - }); - }); }); - }; - DetectAllFacesTask.prototype.withFaceLandmarks = function (useTinyLandmarkNet) { - if (useTinyLandmarkNet === void 0) { useTinyLandmarkNet = false; } - return new DetectFaceLandmarksTasks_1.DetectAllFaceLandmarksTask(this.runAndExtendWithFaceDetections(), this.input, useTinyLandmarkNet); - }; - DetectAllFacesTask.prototype.withFaceExpressions = function () { - return new PredictFaceExpressionsTask_1.PredictAllFaceExpressionsTask(this.runAndExtendWithFaceDetections(), this.input); - }; - return DetectAllFacesTask; -}(DetectFacesTaskBase)); -exports.DetectAllFacesTask = DetectAllFacesTask; -var DetectSingleFaceTask = /** @class */ (function (_super) { - tslib_1.__extends(DetectSingleFaceTask, _super); - function DetectSingleFaceTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - DetectSingleFaceTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var faceDetections, faceDetectionWithHighestScore; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, new DetectAllFacesTask(this.input, this.options)]; - case 1: - faceDetections = _a.sent(); - faceDetectionWithHighestScore = faceDetections[0]; - faceDetections.forEach(function (faceDetection) { - if (faceDetection.score > faceDetectionWithHighestScore.score) { - faceDetectionWithHighestScore = faceDetection; - } - }); - return [2 /*return*/, faceDetectionWithHighestScore]; - } - }); - }); - }; - DetectSingleFaceTask.prototype.runAndExtendWithFaceDetection = function () { - var _this = this; - return new Promise(function (res) { return tslib_1.__awaiter(_this, void 0, void 0, function () { - var detection; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.run()]; - case 1: - detection = _a.sent(); - return [2 /*return*/, res(detection ? WithFaceDetection_1.extendWithFaceDetection({}, detection) : undefined)]; - } - }); - }); }); - }; - DetectSingleFaceTask.prototype.withFaceLandmarks = function (useTinyLandmarkNet) { - if (useTinyLandmarkNet === void 0) { useTinyLandmarkNet = false; } - return new DetectFaceLandmarksTasks_1.DetectSingleFaceLandmarksTask(this.runAndExtendWithFaceDetection(), this.input, useTinyLandmarkNet); - }; - DetectSingleFaceTask.prototype.withFaceExpressions = function () { - return new PredictFaceExpressionsTask_1.PredictSingleFaceExpressionTask(this.runAndExtendWithFaceDetection(), this.input); - }; - return DetectSingleFaceTask; -}(DetectFacesTaskBase)); -exports.DetectSingleFaceTask = DetectSingleFaceTask; -//# sourceMappingURL=DetectFacesTasks.js.map \ No newline at end of file diff --git a/build/commonjs/globalApi/DetectFacesTasks.js.map b/build/commonjs/globalApi/DetectFacesTasks.js.map deleted file mode 100644 index ae67cfac..00000000 --- a/build/commonjs/globalApi/DetectFacesTasks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"DetectFacesTasks.js","sourceRoot":"","sources":["../../../src/globalApi/DetectFacesTasks.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/globalApi/FaceMatcher.d.ts b/build/commonjs/globalApi/FaceMatcher.d.ts deleted file mode 100644 index 5a9ef8d7..00000000 --- a/build/commonjs/globalApi/FaceMatcher.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { FaceMatch } from '../classes/FaceMatch'; -import { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors'; -import { WithFaceDescriptor } from '../factories'; -export declare class FaceMatcher { - private _labeledDescriptors; - private _distanceThreshold; - constructor(inputs: LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>, distanceThreshold?: number); - readonly labeledDescriptors: LabeledFaceDescriptors[]; - readonly distanceThreshold: number; - computeMeanDistance(queryDescriptor: Float32Array, descriptors: Float32Array[]): number; - matchDescriptor(queryDescriptor: Float32Array): FaceMatch; - findBestMatch(queryDescriptor: Float32Array): FaceMatch; -} diff --git a/build/commonjs/globalApi/FaceMatcher.js b/build/commonjs/globalApi/FaceMatcher.js deleted file mode 100644 index e7a362f8..00000000 --- a/build/commonjs/globalApi/FaceMatcher.js +++ /dev/null @@ -1,63 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var FaceMatch_1 = require("../classes/FaceMatch"); -var LabeledFaceDescriptors_1 = require("../classes/LabeledFaceDescriptors"); -var euclideanDistance_1 = require("../euclideanDistance"); -var FaceMatcher = /** @class */ (function () { - function FaceMatcher(inputs, distanceThreshold) { - if (distanceThreshold === void 0) { distanceThreshold = 0.6; } - this._distanceThreshold = distanceThreshold; - var inputArray = Array.isArray(inputs) ? inputs : [inputs]; - if (!inputArray.length) { - throw new Error("FaceRecognizer.constructor - expected atleast one input"); - } - var count = 1; - var createUniqueLabel = function () { return "person " + count++; }; - this._labeledDescriptors = inputArray.map(function (desc) { - if (desc instanceof LabeledFaceDescriptors_1.LabeledFaceDescriptors) { - return desc; - } - if (desc instanceof Float32Array) { - return new LabeledFaceDescriptors_1.LabeledFaceDescriptors(createUniqueLabel(), [desc]); - } - if (desc.descriptor && desc.descriptor instanceof Float32Array) { - return new LabeledFaceDescriptors_1.LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]); - } - throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>"); - }); - } - Object.defineProperty(FaceMatcher.prototype, "labeledDescriptors", { - get: function () { return this._labeledDescriptors; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceMatcher.prototype, "distanceThreshold", { - get: function () { return this._distanceThreshold; }, - enumerable: true, - configurable: true - }); - FaceMatcher.prototype.computeMeanDistance = function (queryDescriptor, descriptors) { - return descriptors - .map(function (d) { return euclideanDistance_1.euclideanDistance(d, queryDescriptor); }) - .reduce(function (d1, d2) { return d1 + d2; }, 0) - / (descriptors.length || 1); - }; - FaceMatcher.prototype.matchDescriptor = function (queryDescriptor) { - var _this = this; - return this.labeledDescriptors - .map(function (_a) { - var descriptors = _a.descriptors, label = _a.label; - return new FaceMatch_1.FaceMatch(label, _this.computeMeanDistance(queryDescriptor, descriptors)); - }) - .reduce(function (best, curr) { return best.distance < curr.distance ? best : curr; }); - }; - FaceMatcher.prototype.findBestMatch = function (queryDescriptor) { - var bestMatch = this.matchDescriptor(queryDescriptor); - return bestMatch.distance < this.distanceThreshold - ? bestMatch - : new FaceMatch_1.FaceMatch('unknown', bestMatch.distance); - }; - return FaceMatcher; -}()); -exports.FaceMatcher = FaceMatcher; -//# sourceMappingURL=FaceMatcher.js.map \ No newline at end of file diff --git a/build/commonjs/globalApi/FaceMatcher.js.map b/build/commonjs/globalApi/FaceMatcher.js.map deleted file mode 100644 index 8d55ad92..00000000 --- a/build/commonjs/globalApi/FaceMatcher.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceMatcher.js","sourceRoot":"","sources":["../../../src/globalApi/FaceMatcher.ts"],"names":[],"mappings":";;AAAA,kDAAiD;AACjD,4EAA2E;AAC3E,0DAAyD;AAGzD;IAKE,qBACE,MAAgJ,EAChJ,iBAA+B;QAA/B,kCAAA,EAAA,uBAA+B;QAG/B,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAA;QAE3C,IAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QAE5D,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;SAC3E;QAED,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,IAAM,iBAAiB,GAAG,cAAM,OAAA,YAAU,KAAK,EAAI,EAAnB,CAAmB,CAAA;QAEnD,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,GAAG,CAAC,UAAC,IAAI;YAC7C,IAAI,IAAI,YAAY,+CAAsB,EAAE;gBAC1C,OAAO,IAAI,CAAA;aACZ;YAED,IAAI,IAAI,YAAY,YAAY,EAAE;gBAChC,OAAO,IAAI,+CAAsB,CAAC,iBAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;aAC/D;YAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,YAAY,YAAY,EAAE;gBAC9D,OAAO,IAAI,+CAAsB,CAAC,iBAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;aAC1E;YAED,MAAM,IAAI,KAAK,CAAC,qMAAqM,CAAC,CAAA;QACxN,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,sBAAW,2CAAkB;aAA7B,cAA4D,OAAO,IAAI,CAAC,mBAAmB,CAAA,CAAC,CAAC;;;OAAA;IAC7F,sBAAW,0CAAiB;aAA5B,cAAyC,OAAO,IAAI,CAAC,kBAAkB,CAAA,CAAC,CAAC;;;OAAA;IAElE,yCAAmB,GAA1B,UAA2B,eAA6B,EAAE,WAA2B;QACnF,OAAO,WAAW;aACf,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,qCAAiB,CAAC,CAAC,EAAE,eAAe,CAAC,EAArC,CAAqC,CAAC;aAC/C,MAAM,CAAC,UAAC,EAAE,EAAE,EAAE,IAAK,OAAA,EAAE,GAAG,EAAE,EAAP,CAAO,EAAE,CAAC,CAAC;cAC3B,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;IACjC,CAAC;IAEM,qCAAe,GAAtB,UAAuB,eAA6B;QAApD,iBAOC;QANC,OAAO,IAAI,CAAC,kBAAkB;aAC3B,GAAG,CAAC,UAAC,EAAsB;gBAApB,4BAAW,EAAE,gBAAK;YAAO,OAAA,IAAI,qBAAS,CAC1C,KAAK,EACL,KAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,WAAW,CAAC,CACzD;QAHgC,CAGhC,CAAC;aACD,MAAM,CAAC,UAAC,IAAI,EAAE,IAAI,IAAK,OAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAA3C,CAA2C,CAAC,CAAA;IACxE,CAAC;IAEM,mCAAa,GAApB,UAAqB,eAA6B;QAChD,IAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAA;QACvD,OAAO,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB;YAChD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,qBAAS,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;IAClD,CAAC;IAEH,kBAAC;AAAD,CAAC,AAhED,IAgEC;AAhEY,kCAAW"} \ No newline at end of file diff --git a/build/commonjs/globalApi/PredictFaceExpressionsTask.d.ts b/build/commonjs/globalApi/PredictFaceExpressionsTask.d.ts deleted file mode 100644 index 3b164fe2..00000000 --- a/build/commonjs/globalApi/PredictFaceExpressionsTask.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { WithFaceDetection } from '../factories/WithFaceDetection'; -import { WithFaceExpressions } from '../factories/WithFaceExpressions'; -import { ComposableTask } from './ComposableTask'; -import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks'; -export declare class PredictFaceExpressionsTaskBase extends ComposableTask { - protected parentTask: ComposableTask | Promise; - protected input: TNetInput; - constructor(parentTask: ComposableTask | Promise, input: TNetInput); -} -export declare class PredictAllFaceExpressionsTask> extends PredictFaceExpressionsTaskBase[], TSource[]> { - run(): Promise[]>; - withFaceLandmarks(): DetectAllFaceLandmarksTask>; -} -export declare class PredictSingleFaceExpressionTask> extends PredictFaceExpressionsTaskBase | undefined, TSource | undefined> { - run(): Promise | undefined>; - withFaceLandmarks(): DetectSingleFaceLandmarksTask>; -} diff --git a/build/commonjs/globalApi/PredictFaceExpressionsTask.js b/build/commonjs/globalApi/PredictFaceExpressionsTask.js deleted file mode 100644 index 1845f7e2..00000000 --- a/build/commonjs/globalApi/PredictFaceExpressionsTask.js +++ /dev/null @@ -1,104 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -var dom_1 = require("../dom"); -var WithFaceExpressions_1 = require("../factories/WithFaceExpressions"); -var ComposableTask_1 = require("./ComposableTask"); -var DetectFaceLandmarksTasks_1 = require("./DetectFaceLandmarksTasks"); -var nets_1 = require("./nets"); -var PredictFaceExpressionsTaskBase = /** @class */ (function (_super) { - tslib_1.__extends(PredictFaceExpressionsTaskBase, _super); - function PredictFaceExpressionsTaskBase(parentTask, input) { - var _this = _super.call(this) || this; - _this.parentTask = parentTask; - _this.input = input; - return _this; - } - return PredictFaceExpressionsTaskBase; -}(ComposableTask_1.ComposableTask)); -exports.PredictFaceExpressionsTaskBase = PredictFaceExpressionsTaskBase; -var PredictAllFaceExpressionsTask = /** @class */ (function (_super) { - tslib_1.__extends(PredictAllFaceExpressionsTask, _super); - function PredictAllFaceExpressionsTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - PredictAllFaceExpressionsTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var parentResults, detections, faces, _a, faceExpressionsByFace; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResults = _b.sent(); - detections = parentResults.map(function (parentResult) { return parentResult.detection; }); - if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, dom_1.extractFaceTensors(this.input, detections)]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, dom_1.extractFaces(this.input, detections)]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - faces = _a; - return [4 /*yield*/, Promise.all(faces.map(function (face) { return nets_1.nets.faceExpressionNet.predictExpressions(face); }))]; - case 6: - faceExpressionsByFace = _b.sent(); - faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); }); - return [2 /*return*/, parentResults.map(function (parentResult, i) { return WithFaceExpressions_1.extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]); })]; - } - }); - }); - }; - PredictAllFaceExpressionsTask.prototype.withFaceLandmarks = function () { - return new DetectFaceLandmarksTasks_1.DetectAllFaceLandmarksTask(this, this.input, false); - }; - return PredictAllFaceExpressionsTask; -}(PredictFaceExpressionsTaskBase)); -exports.PredictAllFaceExpressionsTask = PredictAllFaceExpressionsTask; -var PredictSingleFaceExpressionTask = /** @class */ (function (_super) { - tslib_1.__extends(PredictSingleFaceExpressionTask, _super); - function PredictSingleFaceExpressionTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - PredictSingleFaceExpressionTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var parentResult, detection, faces, _a, faceExpressions; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResult = _b.sent(); - if (!parentResult) { - return [2 /*return*/]; - } - detection = parentResult.detection; - if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, dom_1.extractFaceTensors(this.input, [detection])]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, dom_1.extractFaces(this.input, [detection])]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - faces = _a; - return [4 /*yield*/, nets_1.nets.faceExpressionNet.predictExpressions(faces[0])]; - case 6: - faceExpressions = _b.sent(); - faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); }); - return [2 /*return*/, WithFaceExpressions_1.extendWithFaceExpressions(parentResult, faceExpressions)]; - } - }); - }); - }; - PredictSingleFaceExpressionTask.prototype.withFaceLandmarks = function () { - return new DetectFaceLandmarksTasks_1.DetectSingleFaceLandmarksTask(this, this.input, false); - }; - return PredictSingleFaceExpressionTask; -}(PredictFaceExpressionsTaskBase)); -exports.PredictSingleFaceExpressionTask = PredictSingleFaceExpressionTask; -//# sourceMappingURL=PredictFaceExpressionsTask.js.map \ No newline at end of file diff --git a/build/commonjs/globalApi/PredictFaceExpressionsTask.js.map b/build/commonjs/globalApi/PredictFaceExpressionsTask.js.map deleted file mode 100644 index 92a59d42..00000000 --- a/build/commonjs/globalApi/PredictFaceExpressionsTask.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"PredictFaceExpressionsTask.js","sourceRoot":"","sources":["../../../src/globalApi/PredictFaceExpressionsTask.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/globalApi/allFaces.d.ts b/build/commonjs/globalApi/allFaces.d.ts deleted file mode 100644 index a5b62f2f..00000000 --- a/build/commonjs/globalApi/allFaces.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base'; -import { WithFaceDescriptor, WithFaceDetection, WithFaceLandmarks } from '../factories'; -import { IMtcnnOptions } from '../mtcnn/MtcnnOptions'; -export declare function allFacesSsdMobilenetv1(input: TNetInput, minConfidence?: number): Promise>>[]>; -export declare function allFacesTinyYolov2(input: TNetInput, forwardParams?: TfjsImageRecognitionBase.ITinyYolov2Options): Promise>>[]>; -export declare function allFacesMtcnn(input: TNetInput, forwardParams?: IMtcnnOptions): Promise>>[]>; -export declare const allFaces: typeof allFacesSsdMobilenetv1; diff --git a/build/commonjs/globalApi/allFaces.js b/build/commonjs/globalApi/allFaces.js deleted file mode 100644 index da39614a..00000000 --- a/build/commonjs/globalApi/allFaces.js +++ /dev/null @@ -1,51 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var MtcnnOptions_1 = require("../mtcnn/MtcnnOptions"); -var ssdMobilenetv1_1 = require("../ssdMobilenetv1"); -var detectFaces_1 = require("./detectFaces"); -// export allFaces API for backward compatibility -function allFacesSsdMobilenetv1(input, minConfidence) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, detectFaces_1.detectAllFaces(input, new ssdMobilenetv1_1.SsdMobilenetv1Options(minConfidence ? { minConfidence: minConfidence } : {})) - .withFaceLandmarks() - .withFaceDescriptors()]; - case 1: return [2 /*return*/, _a.sent()]; - } - }); - }); -} -exports.allFacesSsdMobilenetv1 = allFacesSsdMobilenetv1; -function allFacesTinyYolov2(input, forwardParams) { - if (forwardParams === void 0) { forwardParams = {}; } - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, detectFaces_1.detectAllFaces(input, new tfjs_image_recognition_base_1.TfjsImageRecognitionBase.TinyYolov2Options(forwardParams)) - .withFaceLandmarks() - .withFaceDescriptors()]; - case 1: return [2 /*return*/, _a.sent()]; - } - }); - }); -} -exports.allFacesTinyYolov2 = allFacesTinyYolov2; -function allFacesMtcnn(input, forwardParams) { - if (forwardParams === void 0) { forwardParams = {}; } - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, detectFaces_1.detectAllFaces(input, new MtcnnOptions_1.MtcnnOptions(forwardParams)) - .withFaceLandmarks() - .withFaceDescriptors()]; - case 1: return [2 /*return*/, _a.sent()]; - } - }); - }); -} -exports.allFacesMtcnn = allFacesMtcnn; -exports.allFaces = allFacesSsdMobilenetv1; -//# sourceMappingURL=allFaces.js.map \ No newline at end of file diff --git a/build/commonjs/globalApi/allFaces.js.map b/build/commonjs/globalApi/allFaces.js.map deleted file mode 100644 index e7975727..00000000 --- a/build/commonjs/globalApi/allFaces.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"allFaces.js","sourceRoot":"","sources":["../../../src/globalApi/allFaces.ts"],"names":[],"mappings":";;;AAAA,2EAAkF;AAGlF,sDAAoE;AACpE,oDAA0D;AAC1D,6CAA+C;AAE/C,iDAAiD;AAEjD,SAAsB,sBAAsB,CAC1C,KAAgB,EAChB,aAAsB;;;;wBAEf,qBAAM,4BAAc,CAAC,KAAK,EAAE,IAAI,sCAAqB,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,eAAA,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;yBAClG,iBAAiB,EAAE;yBACnB,mBAAmB,EAAE,EAAA;wBAFxB,sBAAO,SAEiB,EAAA;;;;CACzB;AAPD,wDAOC;AAED,SAAsB,kBAAkB,CACtC,KAAgB,EAChB,aAA+D;IAA/D,8BAAA,EAAA,kBAA+D;;;;wBAExD,qBAAM,4BAAc,CAAC,KAAK,EAAE,IAAI,sDAAwB,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;yBAC9F,iBAAiB,EAAE;yBACnB,mBAAmB,EAAE,EAAA;wBAFxB,sBAAO,SAEiB,EAAA;;;;CACzB;AAPD,gDAOC;AAED,SAAsB,aAAa,CACjC,KAAgB,EAChB,aAAiC;IAAjC,8BAAA,EAAA,kBAAiC;;;;wBAE1B,qBAAM,4BAAc,CAAC,KAAK,EAAE,IAAI,2BAAY,CAAC,aAAa,CAAC,CAAC;yBAChE,iBAAiB,EAAE;yBACnB,mBAAmB,EAAE,EAAA;wBAFxB,sBAAO,SAEiB,EAAA;;;;CACzB;AAPD,sCAOC;AAEY,QAAA,QAAQ,GAAG,sBAAsB,CAAA"} \ No newline at end of file diff --git a/build/commonjs/globalApi/detectFaces.d.ts b/build/commonjs/globalApi/detectFaces.d.ts deleted file mode 100644 index d1091c32..00000000 --- a/build/commonjs/globalApi/detectFaces.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { DetectAllFacesTask, DetectSingleFaceTask } from './DetectFacesTasks'; -import { FaceDetectionOptions } from './types'; -export declare function detectSingleFace(input: TNetInput, options?: FaceDetectionOptions): DetectSingleFaceTask; -export declare function detectAllFaces(input: TNetInput, options?: FaceDetectionOptions): DetectAllFacesTask; diff --git a/build/commonjs/globalApi/detectFaces.js b/build/commonjs/globalApi/detectFaces.js deleted file mode 100644 index 941040f8..00000000 --- a/build/commonjs/globalApi/detectFaces.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var SsdMobilenetv1Options_1 = require("../ssdMobilenetv1/SsdMobilenetv1Options"); -var DetectFacesTasks_1 = require("./DetectFacesTasks"); -function detectSingleFace(input, options) { - if (options === void 0) { options = new SsdMobilenetv1Options_1.SsdMobilenetv1Options(); } - return new DetectFacesTasks_1.DetectSingleFaceTask(input, options); -} -exports.detectSingleFace = detectSingleFace; -function detectAllFaces(input, options) { - if (options === void 0) { options = new SsdMobilenetv1Options_1.SsdMobilenetv1Options(); } - return new DetectFacesTasks_1.DetectAllFacesTask(input, options); -} -exports.detectAllFaces = detectAllFaces; -//# sourceMappingURL=detectFaces.js.map \ No newline at end of file diff --git a/build/commonjs/globalApi/detectFaces.js.map b/build/commonjs/globalApi/detectFaces.js.map deleted file mode 100644 index 0a202c61..00000000 --- a/build/commonjs/globalApi/detectFaces.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"detectFaces.js","sourceRoot":"","sources":["../../../src/globalApi/detectFaces.ts"],"names":[],"mappings":";;AAEA,iFAAgF;AAChF,uDAA8E;AAG9E,SAAgB,gBAAgB,CAC9B,KAAgB,EAChB,OAA2D;IAA3D,wBAAA,EAAA,cAAoC,6CAAqB,EAAE;IAE3D,OAAO,IAAI,uCAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AACjD,CAAC;AALD,4CAKC;AAED,SAAgB,cAAc,CAC5B,KAAgB,EAChB,OAA2D;IAA3D,wBAAA,EAAA,cAAoC,6CAAqB,EAAE;IAE3D,OAAO,IAAI,qCAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC/C,CAAC;AALD,wCAKC"} \ No newline at end of file diff --git a/build/commonjs/globalApi/index.d.ts b/build/commonjs/globalApi/index.d.ts deleted file mode 100644 index de0e0c09..00000000 --- a/build/commonjs/globalApi/index.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -export * from './allFaces'; -export * from './ComposableTask'; -export * from './ComputeFaceDescriptorsTasks'; -export * from './detectFaces'; -export * from './DetectFacesTasks'; -export * from './DetectFaceLandmarksTasks'; -export * from './FaceMatcher'; -export * from './nets'; -export * from './types'; diff --git a/build/commonjs/globalApi/index.js b/build/commonjs/globalApi/index.js deleted file mode 100644 index 83ae0022..00000000 --- a/build/commonjs/globalApi/index.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -tslib_1.__exportStar(require("./allFaces"), exports); -tslib_1.__exportStar(require("./ComposableTask"), exports); -tslib_1.__exportStar(require("./ComputeFaceDescriptorsTasks"), exports); -tslib_1.__exportStar(require("./detectFaces"), exports); -tslib_1.__exportStar(require("./DetectFacesTasks"), exports); -tslib_1.__exportStar(require("./DetectFaceLandmarksTasks"), exports); -tslib_1.__exportStar(require("./FaceMatcher"), exports); -tslib_1.__exportStar(require("./nets"), exports); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/commonjs/globalApi/index.js.map b/build/commonjs/globalApi/index.js.map deleted file mode 100644 index 4d46a8e2..00000000 --- a/build/commonjs/globalApi/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/globalApi/index.ts"],"names":[],"mappings":";;;AAAA,qDAA0B;AAC1B,2DAAgC;AAChC,wEAA6C;AAC7C,wDAA6B;AAC7B,6DAAkC;AAClC,qEAA0C;AAC1C,wDAA6B;AAC7B,iDAAsB"} \ No newline at end of file diff --git a/build/commonjs/globalApi/nets.d.ts b/build/commonjs/globalApi/nets.d.ts deleted file mode 100644 index bb7bb011..00000000 --- a/build/commonjs/globalApi/nets.d.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -import { FaceLandmarks5 } from '../classes/FaceLandmarks5'; -import { FaceLandmarks68 } from '../classes/FaceLandmarks68'; -import { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet'; -import { FaceExpressionPrediction } from '../faceExpressionNet/types'; -import { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net'; -import { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet'; -import { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet'; -import { WithFaceLandmarks } from '../factories/WithFaceLandmarks'; -import { Mtcnn } from '../mtcnn/Mtcnn'; -import { MtcnnOptions } from '../mtcnn/MtcnnOptions'; -import { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1'; -import { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options'; -import { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector'; -import { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions'; -import { TinyYolov2 } from '../tinyYolov2'; -export declare const nets: { - ssdMobilenetv1: SsdMobilenetv1; - tinyFaceDetector: TinyFaceDetector; - tinyYolov2: TinyYolov2; - mtcnn: Mtcnn; - faceLandmark68Net: FaceLandmark68Net; - faceLandmark68TinyNet: FaceLandmark68TinyNet; - faceRecognitionNet: FaceRecognitionNet; - faceExpressionNet: FaceExpressionNet; -}; -/** - * Attempts to detect all faces in an image using SSD Mobilenetv1 Network. - * - * @param input The input image. - * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters). - * @returns Bounding box of each face with score. - */ -export declare const ssdMobilenetv1: (input: TNetInput, options: SsdMobilenetv1Options) => Promise; -/** - * Attempts to detect all faces in an image using the Tiny Face Detector. - * - * @param input The input image. - * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters). - * @returns Bounding box of each face with score. - */ -export declare const tinyFaceDetector: (input: TNetInput, options: TinyFaceDetectorOptions) => Promise; -/** - * Attempts to detect all faces in an image using the Tiny Yolov2 Network. - * - * @param input The input image. - * @param options (optional, default: see TinyYolov2Options constructor for default parameters). - * @returns Bounding box of each face with score. - */ -export declare const tinyYolov2: (input: TNetInput, options: TfjsImageRecognitionBase.ITinyYolov2Options) => Promise; -/** - * Attempts to detect all faces in an image and the 5 point face landmarks - * of each detected face using the MTCNN Network. - * - * @param input The input image. - * @param options (optional, default: see MtcnnOptions constructor for default parameters). - * @returns Bounding box of each face with score and 5 point face landmarks. - */ -export declare const mtcnn: (input: TNetInput, options: MtcnnOptions) => Promise[]>; -/** - * Detects the 68 point face landmark positions of the face shown in an image. - * - * @param inputs The face image extracted from the bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns 68 point face landmarks or array thereof in case of batch input. - */ -export declare const detectFaceLandmarks: (input: TNetInput) => Promise; -/** - * Detects the 68 point face landmark positions of the face shown in an image - * using a tinier version of the 68 point face landmark model, which is slightly - * faster at inference, but also slightly less accurate. - * - * @param inputs The face image extracted from the bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns 68 point face landmarks or array thereof in case of batch input. - */ -export declare const detectFaceLandmarksTiny: (input: TNetInput) => Promise; -/** - * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image, - * which uniquely represents the features of that persons face. The computed face descriptor can - * be used to measure the similarity between faces, by computing the euclidean distance of two - * face descriptors. - * - * @param inputs The face image extracted from the aligned bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns Face descriptor with 128 entries or array thereof in case of batch input. - */ -export declare const computeFaceDescriptor: (input: TNetInput) => Promise; -/** - * Recognizes the facial expressions of a face and returns the likelyhood of - * each facial expression. - * - * @param inputs The face image extracted from the bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns An array of facial expressions with corresponding probabilities or array thereof in case of batch input. - */ -export declare const recognizeFaceExpressions: (input: TNetInput) => Promise; -export declare const loadSsdMobilenetv1Model: (url: string) => Promise; -export declare const loadTinyFaceDetectorModel: (url: string) => Promise; -export declare const loadMtcnnModel: (url: string) => Promise; -export declare const loadTinyYolov2Model: (url: string) => Promise; -export declare const loadFaceLandmarkModel: (url: string) => Promise; -export declare const loadFaceLandmarkTinyModel: (url: string) => Promise; -export declare const loadFaceRecognitionModel: (url: string) => Promise; -export declare const loadFaceExpressionModel: (url: string) => Promise; -export declare const loadFaceDetectionModel: (url: string) => Promise; -export declare const locateFaces: (input: TNetInput, options: SsdMobilenetv1Options) => Promise; -export declare const detectLandmarks: (input: TNetInput) => Promise; diff --git a/build/commonjs/globalApi/nets.js b/build/commonjs/globalApi/nets.js deleted file mode 100644 index 30e124f8..00000000 --- a/build/commonjs/globalApi/nets.js +++ /dev/null @@ -1,120 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var FaceExpressionNet_1 = require("../faceExpressionNet/FaceExpressionNet"); -var FaceLandmark68Net_1 = require("../faceLandmarkNet/FaceLandmark68Net"); -var FaceLandmark68TinyNet_1 = require("../faceLandmarkNet/FaceLandmark68TinyNet"); -var FaceRecognitionNet_1 = require("../faceRecognitionNet/FaceRecognitionNet"); -var Mtcnn_1 = require("../mtcnn/Mtcnn"); -var SsdMobilenetv1_1 = require("../ssdMobilenetv1/SsdMobilenetv1"); -var TinyFaceDetector_1 = require("../tinyFaceDetector/TinyFaceDetector"); -var tinyYolov2_1 = require("../tinyYolov2"); -exports.nets = { - ssdMobilenetv1: new SsdMobilenetv1_1.SsdMobilenetv1(), - tinyFaceDetector: new TinyFaceDetector_1.TinyFaceDetector(), - tinyYolov2: new tinyYolov2_1.TinyYolov2(), - mtcnn: new Mtcnn_1.Mtcnn(), - faceLandmark68Net: new FaceLandmark68Net_1.FaceLandmark68Net(), - faceLandmark68TinyNet: new FaceLandmark68TinyNet_1.FaceLandmark68TinyNet(), - faceRecognitionNet: new FaceRecognitionNet_1.FaceRecognitionNet(), - faceExpressionNet: new FaceExpressionNet_1.FaceExpressionNet() -}; -/** - * Attempts to detect all faces in an image using SSD Mobilenetv1 Network. - * - * @param input The input image. - * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters). - * @returns Bounding box of each face with score. - */ -exports.ssdMobilenetv1 = function (input, options) { - return exports.nets.ssdMobilenetv1.locateFaces(input, options); -}; -/** - * Attempts to detect all faces in an image using the Tiny Face Detector. - * - * @param input The input image. - * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters). - * @returns Bounding box of each face with score. - */ -exports.tinyFaceDetector = function (input, options) { - return exports.nets.tinyFaceDetector.locateFaces(input, options); -}; -/** - * Attempts to detect all faces in an image using the Tiny Yolov2 Network. - * - * @param input The input image. - * @param options (optional, default: see TinyYolov2Options constructor for default parameters). - * @returns Bounding box of each face with score. - */ -exports.tinyYolov2 = function (input, options) { - return exports.nets.tinyYolov2.locateFaces(input, options); -}; -/** - * Attempts to detect all faces in an image and the 5 point face landmarks - * of each detected face using the MTCNN Network. - * - * @param input The input image. - * @param options (optional, default: see MtcnnOptions constructor for default parameters). - * @returns Bounding box of each face with score and 5 point face landmarks. - */ -exports.mtcnn = function (input, options) { - return exports.nets.mtcnn.forward(input, options); -}; -/** - * Detects the 68 point face landmark positions of the face shown in an image. - * - * @param inputs The face image extracted from the bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns 68 point face landmarks or array thereof in case of batch input. - */ -exports.detectFaceLandmarks = function (input) { - return exports.nets.faceLandmark68Net.detectLandmarks(input); -}; -/** - * Detects the 68 point face landmark positions of the face shown in an image - * using a tinier version of the 68 point face landmark model, which is slightly - * faster at inference, but also slightly less accurate. - * - * @param inputs The face image extracted from the bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns 68 point face landmarks or array thereof in case of batch input. - */ -exports.detectFaceLandmarksTiny = function (input) { - return exports.nets.faceLandmark68TinyNet.detectLandmarks(input); -}; -/** - * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image, - * which uniquely represents the features of that persons face. The computed face descriptor can - * be used to measure the similarity between faces, by computing the euclidean distance of two - * face descriptors. - * - * @param inputs The face image extracted from the aligned bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns Face descriptor with 128 entries or array thereof in case of batch input. - */ -exports.computeFaceDescriptor = function (input) { - return exports.nets.faceRecognitionNet.computeFaceDescriptor(input); -}; -/** - * Recognizes the facial expressions of a face and returns the likelyhood of - * each facial expression. - * - * @param inputs The face image extracted from the bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns An array of facial expressions with corresponding probabilities or array thereof in case of batch input. - */ -exports.recognizeFaceExpressions = function (input) { - return exports.nets.faceExpressionNet.predictExpressions(input); -}; -exports.loadSsdMobilenetv1Model = function (url) { return exports.nets.ssdMobilenetv1.load(url); }; -exports.loadTinyFaceDetectorModel = function (url) { return exports.nets.tinyFaceDetector.load(url); }; -exports.loadMtcnnModel = function (url) { return exports.nets.mtcnn.load(url); }; -exports.loadTinyYolov2Model = function (url) { return exports.nets.tinyYolov2.load(url); }; -exports.loadFaceLandmarkModel = function (url) { return exports.nets.faceLandmark68Net.load(url); }; -exports.loadFaceLandmarkTinyModel = function (url) { return exports.nets.faceLandmark68TinyNet.load(url); }; -exports.loadFaceRecognitionModel = function (url) { return exports.nets.faceRecognitionNet.load(url); }; -exports.loadFaceExpressionModel = function (url) { return exports.nets.faceExpressionNet.load(url); }; -// backward compatibility -exports.loadFaceDetectionModel = exports.loadSsdMobilenetv1Model; -exports.locateFaces = exports.ssdMobilenetv1; -exports.detectLandmarks = exports.detectFaceLandmarks; -//# sourceMappingURL=nets.js.map \ No newline at end of file diff --git a/build/commonjs/globalApi/nets.js.map b/build/commonjs/globalApi/nets.js.map deleted file mode 100644 index a4f27013..00000000 --- a/build/commonjs/globalApi/nets.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"nets.js","sourceRoot":"","sources":["../../../src/globalApi/nets.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/globalApi/types.d.ts b/build/commonjs/globalApi/types.d.ts deleted file mode 100644 index 9558c95e..00000000 --- a/build/commonjs/globalApi/types.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -import { MtcnnOptions } from '../mtcnn/MtcnnOptions'; -import { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options'; -import { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions'; -export declare type FaceDetectionOptions = TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TfjsImageRecognitionBase.TinyYolov2Options; -export declare type FaceDetectionFunction = (input: TNetInput) => Promise; diff --git a/build/commonjs/globalApi/types.js b/build/commonjs/globalApi/types.js deleted file mode 100644 index 11e638d1..00000000 --- a/build/commonjs/globalApi/types.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/commonjs/globalApi/types.js.map b/build/commonjs/globalApi/types.js.map deleted file mode 100644 index e079214c..00000000 --- a/build/commonjs/globalApi/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/globalApi/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/build/commonjs/index.d.ts b/build/commonjs/index.d.ts deleted file mode 100644 index d223ad53..00000000 --- a/build/commonjs/index.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export { tf }; -export * from 'tfjs-image-recognition-base'; -export * from './classes/index'; -export * from './dom/index'; -export * from './faceExpressionNet/index'; -export * from './faceLandmarkNet/index'; -export * from './faceRecognitionNet/index'; -export * from './factories/index'; -export * from './globalApi/index'; -export * from './mtcnn/index'; -export * from './ssdMobilenetv1/index'; -export * from './tinyFaceDetector/index'; -export * from './tinyYolov2/index'; -export * from './euclideanDistance'; -export * from './resizeResults'; diff --git a/build/commonjs/index.js b/build/commonjs/index.js deleted file mode 100644 index c97c881b..00000000 --- a/build/commonjs/index.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -exports.tf = tf; -tslib_1.__exportStar(require("tfjs-image-recognition-base"), exports); -tslib_1.__exportStar(require("./classes/index"), exports); -tslib_1.__exportStar(require("./dom/index"), exports); -tslib_1.__exportStar(require("./faceExpressionNet/index"), exports); -tslib_1.__exportStar(require("./faceLandmarkNet/index"), exports); -tslib_1.__exportStar(require("./faceRecognitionNet/index"), exports); -tslib_1.__exportStar(require("./factories/index"), exports); -tslib_1.__exportStar(require("./globalApi/index"), exports); -tslib_1.__exportStar(require("./mtcnn/index"), exports); -tslib_1.__exportStar(require("./ssdMobilenetv1/index"), exports); -tslib_1.__exportStar(require("./tinyFaceDetector/index"), exports); -tslib_1.__exportStar(require("./tinyYolov2/index"), exports); -tslib_1.__exportStar(require("./euclideanDistance"), exports); -tslib_1.__exportStar(require("./resizeResults"), exports); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/commonjs/index.js.map b/build/commonjs/index.js.map deleted file mode 100644 index c453a423..00000000 --- a/build/commonjs/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAG1C,gBAAE;AAGJ,sEAA4C;AAE5C,0DAAgC;AAChC,sDAA2B;AAC3B,oEAA0C;AAC1C,kEAAwC;AACxC,qEAA2C;AAC3C,4DAAkC;AAClC,4DAAkC;AAClC,wDAA8B;AAC9B,iEAAuC;AACvC,mEAAyC;AACzC,6DAAmC;AAEnC,8DAAoC;AACpC,0DAAgC"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/Mtcnn.d.ts b/build/commonjs/mtcnn/Mtcnn.d.ts deleted file mode 100644 index 35384f72..00000000 --- a/build/commonjs/mtcnn/Mtcnn.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base'; -import { IMtcnnOptions } from './MtcnnOptions'; -import { MtcnnResult, NetParams } from './types'; -export declare class Mtcnn extends NeuralNetwork { - constructor(); - forwardInput(input: NetInput, forwardParams?: IMtcnnOptions): Promise<{ - results: MtcnnResult[]; - stats: any; - }>; - forward(input: TNetInput, forwardParams?: IMtcnnOptions): Promise; - forwardWithStats(input: TNetInput, forwardParams?: IMtcnnOptions): Promise<{ - results: MtcnnResult[]; - stats: any; - }>; - protected getDefaultModelName(): string; - protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; - protected extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; -} diff --git a/build/commonjs/mtcnn/Mtcnn.js b/build/commonjs/mtcnn/Mtcnn.js deleted file mode 100644 index d94c270e..00000000 --- a/build/commonjs/mtcnn/Mtcnn.js +++ /dev/null @@ -1,137 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var FaceDetection_1 = require("../classes/FaceDetection"); -var FaceLandmarks5_1 = require("../classes/FaceLandmarks5"); -var factories_1 = require("../factories"); -var bgrToRgbTensor_1 = require("./bgrToRgbTensor"); -var config_1 = require("./config"); -var extractParams_1 = require("./extractParams"); -var extractParamsFromWeigthMap_1 = require("./extractParamsFromWeigthMap"); -var getSizesForScale_1 = require("./getSizesForScale"); -var MtcnnOptions_1 = require("./MtcnnOptions"); -var pyramidDown_1 = require("./pyramidDown"); -var stage1_1 = require("./stage1"); -var stage2_1 = require("./stage2"); -var stage3_1 = require("./stage3"); -var Mtcnn = /** @class */ (function (_super) { - tslib_1.__extends(Mtcnn, _super); - function Mtcnn() { - return _super.call(this, 'Mtcnn') || this; - } - Mtcnn.prototype.forwardInput = function (input, forwardParams) { - if (forwardParams === void 0) { forwardParams = {}; } - return tslib_1.__awaiter(this, void 0, void 0, function () { - var params, inputCanvas, stats, tsTotal, imgTensor, onReturn, _a, height, width, _b, minFaceSize, scaleFactor, maxNumScales, scoreThresholds, scaleSteps, scales, ts, out1, out2, out3, results; - return tslib_1.__generator(this, function (_c) { - switch (_c.label) { - case 0: - params = this.params; - if (!params) { - throw new Error('Mtcnn - load model before inference'); - } - inputCanvas = input.canvases[0]; - if (!inputCanvas) { - throw new Error('Mtcnn - inputCanvas is not defined, note that passing tensors into Mtcnn.forwardInput is not supported yet.'); - } - stats = {}; - tsTotal = Date.now(); - imgTensor = tf.tidy(function () { - return bgrToRgbTensor_1.bgrToRgbTensor(tf.expandDims(tf.browser.fromPixels(inputCanvas)).toFloat()); - }); - onReturn = function (results) { - // dispose tensors on return - imgTensor.dispose(); - stats.total = Date.now() - tsTotal; - return results; - }; - _a = imgTensor.shape.slice(1), height = _a[0], width = _a[1]; - _b = new MtcnnOptions_1.MtcnnOptions(forwardParams), minFaceSize = _b.minFaceSize, scaleFactor = _b.scaleFactor, maxNumScales = _b.maxNumScales, scoreThresholds = _b.scoreThresholds, scaleSteps = _b.scaleSteps; - scales = (scaleSteps || pyramidDown_1.pyramidDown(minFaceSize, scaleFactor, [height, width])) - .filter(function (scale) { - var sizes = getSizesForScale_1.getSizesForScale(scale, [height, width]); - return Math.min(sizes.width, sizes.height) > config_1.CELL_SIZE; - }) - .slice(0, maxNumScales); - stats.scales = scales; - stats.pyramid = scales.map(function (scale) { return getSizesForScale_1.getSizesForScale(scale, [height, width]); }); - ts = Date.now(); - return [4 /*yield*/, stage1_1.stage1(imgTensor, scales, scoreThresholds[0], params.pnet, stats)]; - case 1: - out1 = _c.sent(); - stats.total_stage1 = Date.now() - ts; - if (!out1.boxes.length) { - return [2 /*return*/, onReturn({ results: [], stats: stats })]; - } - stats.stage2_numInputBoxes = out1.boxes.length; - // using the inputCanvas to extract and resize the image patches, since it is faster - // than doing this on the gpu - ts = Date.now(); - return [4 /*yield*/, stage2_1.stage2(inputCanvas, out1.boxes, scoreThresholds[1], params.rnet, stats)]; - case 2: - out2 = _c.sent(); - stats.total_stage2 = Date.now() - ts; - if (!out2.boxes.length) { - return [2 /*return*/, onReturn({ results: [], stats: stats })]; - } - stats.stage3_numInputBoxes = out2.boxes.length; - ts = Date.now(); - return [4 /*yield*/, stage3_1.stage3(inputCanvas, out2.boxes, scoreThresholds[2], params.onet, stats)]; - case 3: - out3 = _c.sent(); - stats.total_stage3 = Date.now() - ts; - results = out3.boxes.map(function (box, idx) { return factories_1.extendWithFaceLandmarks(factories_1.extendWithFaceDetection({}, new FaceDetection_1.FaceDetection(out3.scores[idx], new tfjs_image_recognition_base_1.Rect(box.left / width, box.top / height, box.width / width, box.height / height), { - height: height, - width: width - })), new FaceLandmarks5_1.FaceLandmarks5(out3.points[idx].map(function (pt) { return pt.sub(new tfjs_image_recognition_base_1.Point(box.left, box.top)).div(new tfjs_image_recognition_base_1.Point(box.width, box.height)); }), { width: box.width, height: box.height })); }); - return [2 /*return*/, onReturn({ results: results, stats: stats })]; - } - }); - }); - }; - Mtcnn.prototype.forward = function (input, forwardParams) { - if (forwardParams === void 0) { forwardParams = {}; } - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)]; - case 1: return [4 /*yield*/, _a.apply(this, [_b.sent(), - forwardParams])]; - case 2: return [2 /*return*/, (_b.sent()).results]; - } - }); - }); - }; - Mtcnn.prototype.forwardWithStats = function (input, forwardParams) { - if (forwardParams === void 0) { forwardParams = {}; } - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent(), - forwardParams])]; - } - }); - }); - }; - Mtcnn.prototype.getDefaultModelName = function () { - return 'mtcnn_model'; - }; - Mtcnn.prototype.extractParamsFromWeigthMap = function (weightMap) { - return extractParamsFromWeigthMap_1.extractParamsFromWeigthMap(weightMap); - }; - Mtcnn.prototype.extractParams = function (weights) { - return extractParams_1.extractParams(weights); - }; - return Mtcnn; -}(tfjs_image_recognition_base_1.NeuralNetwork)); -exports.Mtcnn = Mtcnn; -//# sourceMappingURL=Mtcnn.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/Mtcnn.js.map b/build/commonjs/mtcnn/Mtcnn.js.map deleted file mode 100644 index 2f4b6f00..00000000 --- a/build/commonjs/mtcnn/Mtcnn.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Mtcnn.js","sourceRoot":"","sources":["../../../src/mtcnn/Mtcnn.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/MtcnnBox.d.ts b/build/commonjs/mtcnn/MtcnnBox.d.ts deleted file mode 100644 index e61cf2f0..00000000 --- a/build/commonjs/mtcnn/MtcnnBox.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Box } from 'tfjs-image-recognition-base'; -export declare class MtcnnBox extends Box { - constructor(left: number, top: number, right: number, bottom: number); -} diff --git a/build/commonjs/mtcnn/MtcnnBox.js b/build/commonjs/mtcnn/MtcnnBox.js deleted file mode 100644 index 1759d29b..00000000 --- a/build/commonjs/mtcnn/MtcnnBox.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var MtcnnBox = /** @class */ (function (_super) { - tslib_1.__extends(MtcnnBox, _super); - function MtcnnBox(left, top, right, bottom) { - return _super.call(this, { left: left, top: top, right: right, bottom: bottom }, true) || this; - } - return MtcnnBox; -}(tfjs_image_recognition_base_1.Box)); -exports.MtcnnBox = MtcnnBox; -//# sourceMappingURL=MtcnnBox.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/MtcnnBox.js.map b/build/commonjs/mtcnn/MtcnnBox.js.map deleted file mode 100644 index 68404922..00000000 --- a/build/commonjs/mtcnn/MtcnnBox.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"MtcnnBox.js","sourceRoot":"","sources":["../../../src/mtcnn/MtcnnBox.ts"],"names":[],"mappings":";;;AAAA,2EAAkD;AAElD;IAA8B,oCAAa;IACzC,kBAAY,IAAY,EAAE,GAAW,EAAE,KAAa,EAAE,MAAc;eAClE,kBAAM,EAAE,IAAI,MAAA,EAAE,GAAG,KAAA,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,EAAE,IAAI,CAAC;IAC3C,CAAC;IACH,eAAC;AAAD,CAAC,AAJD,CAA8B,iCAAG,GAIhC;AAJY,4BAAQ"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/MtcnnOptions.d.ts b/build/commonjs/mtcnn/MtcnnOptions.d.ts deleted file mode 100644 index 140195e1..00000000 --- a/build/commonjs/mtcnn/MtcnnOptions.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -export interface IMtcnnOptions { - minFaceSize?: number; - scaleFactor?: number; - maxNumScales?: number; - scoreThresholds?: number[]; - scaleSteps?: number[]; -} -export declare class MtcnnOptions { - protected _name: string; - private _minFaceSize; - private _scaleFactor; - private _maxNumScales; - private _scoreThresholds; - private _scaleSteps; - constructor({ minFaceSize, scaleFactor, maxNumScales, scoreThresholds, scaleSteps }?: IMtcnnOptions); - readonly minFaceSize: number; - readonly scaleFactor: number; - readonly maxNumScales: number; - readonly scoreThresholds: number[]; - readonly scaleSteps: number[] | undefined; -} diff --git a/build/commonjs/mtcnn/MtcnnOptions.js b/build/commonjs/mtcnn/MtcnnOptions.js deleted file mode 100644 index 9581a200..00000000 --- a/build/commonjs/mtcnn/MtcnnOptions.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var MtcnnOptions = /** @class */ (function () { - function MtcnnOptions(_a) { - var _b = _a === void 0 ? {} : _a, minFaceSize = _b.minFaceSize, scaleFactor = _b.scaleFactor, maxNumScales = _b.maxNumScales, scoreThresholds = _b.scoreThresholds, scaleSteps = _b.scaleSteps; - this._name = 'MtcnnOptions'; - this._minFaceSize = minFaceSize || 20; - this._scaleFactor = scaleFactor || 0.709; - this._maxNumScales = maxNumScales || 10; - this._scoreThresholds = scoreThresholds || [0.6, 0.7, 0.7]; - this._scaleSteps = scaleSteps; - if (typeof this._minFaceSize !== 'number' || this._minFaceSize < 0) { - throw new Error(this._name + " - expected minFaceSize to be a number > 0"); - } - if (typeof this._scaleFactor !== 'number' || this._scaleFactor <= 0 || this._scaleFactor >= 1) { - throw new Error(this._name + " - expected scaleFactor to be a number between 0 and 1"); - } - if (typeof this._maxNumScales !== 'number' || this._maxNumScales < 0) { - throw new Error(this._name + " - expected maxNumScales to be a number > 0"); - } - if (!Array.isArray(this._scoreThresholds) - || this._scoreThresholds.length !== 3 - || this._scoreThresholds.some(function (th) { return typeof th !== 'number'; })) { - throw new Error(this._name + " - expected scoreThresholds to be an array of numbers of length 3"); - } - if (this._scaleSteps - && (!Array.isArray(this._scaleSteps) || this._scaleSteps.some(function (th) { return typeof th !== 'number'; }))) { - throw new Error(this._name + " - expected scaleSteps to be an array of numbers"); - } - } - Object.defineProperty(MtcnnOptions.prototype, "minFaceSize", { - get: function () { return this._minFaceSize; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MtcnnOptions.prototype, "scaleFactor", { - get: function () { return this._scaleFactor; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MtcnnOptions.prototype, "maxNumScales", { - get: function () { return this._maxNumScales; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MtcnnOptions.prototype, "scoreThresholds", { - get: function () { return this._scoreThresholds; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MtcnnOptions.prototype, "scaleSteps", { - get: function () { return this._scaleSteps; }, - enumerable: true, - configurable: true - }); - return MtcnnOptions; -}()); -exports.MtcnnOptions = MtcnnOptions; -//# sourceMappingURL=MtcnnOptions.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/MtcnnOptions.js.map b/build/commonjs/mtcnn/MtcnnOptions.js.map deleted file mode 100644 index d3f14f41..00000000 --- a/build/commonjs/mtcnn/MtcnnOptions.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"MtcnnOptions.js","sourceRoot":"","sources":["../../../src/mtcnn/MtcnnOptions.ts"],"names":[],"mappings":";;AAQA;IASE,sBAAY,EAA2F;YAA3F,4BAA2F,EAAzF,4BAAW,EAAE,4BAAW,EAAE,8BAAY,EAAE,oCAAe,EAAE,0BAAU;QARvE,UAAK,GAAW,cAAc,CAAA;QAStC,IAAI,CAAC,YAAY,GAAG,WAAW,IAAI,EAAE,CAAA;QACrC,IAAI,CAAC,YAAY,GAAG,WAAW,IAAI,KAAK,CAAA;QACxC,IAAI,CAAC,aAAa,GAAG,YAAY,IAAI,EAAE,CAAA;QACvC,IAAI,CAAC,gBAAgB,GAAG,eAAe,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QAC1D,IAAI,CAAC,WAAW,GAAG,UAAU,CAAA;QAE7B,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;YAClE,MAAM,IAAI,KAAK,CAAI,IAAI,CAAC,KAAK,+CAA4C,CAAC,CAAA;SAC3E;QAED,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;YAC7F,MAAM,IAAI,KAAK,CAAI,IAAI,CAAC,KAAK,2DAAwD,CAAC,CAAA;SACvF;QAED,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;YACpE,MAAM,IAAI,KAAK,CAAI,IAAI,CAAC,KAAK,gDAA6C,CAAC,CAAA;SAC5E;QAED,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;eAChC,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;eAClC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,OAAO,EAAE,KAAK,QAAQ,EAAtB,CAAsB,CAAC,EAC7D;YACA,MAAM,IAAI,KAAK,CAAI,IAAI,CAAC,KAAK,sEAAmE,CAAC,CAAA;SAClG;QAED,IACE,IAAI,CAAC,WAAW;eACX,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,OAAO,EAAE,KAAK,QAAQ,EAAtB,CAAsB,CAAC,CAAC,EAC9F;YACA,MAAM,IAAI,KAAK,CAAI,IAAI,CAAC,KAAK,qDAAkD,CAAC,CAAA;SACjF;IACH,CAAC;IAED,sBAAI,qCAAW;aAAf,cAA4B,OAAO,IAAI,CAAC,YAAY,CAAA,CAAC,CAAC;;;OAAA;IACtD,sBAAI,qCAAW;aAAf,cAA4B,OAAO,IAAI,CAAC,YAAY,CAAA,CAAC,CAAC;;;OAAA;IACtD,sBAAI,sCAAY;aAAhB,cAA6B,OAAO,IAAI,CAAC,aAAa,CAAA,CAAC,CAAC;;;OAAA;IACxD,sBAAI,yCAAe;aAAnB,cAAkC,OAAO,IAAI,CAAC,gBAAgB,CAAA,CAAC,CAAC;;;OAAA;IAChE,sBAAI,oCAAU;aAAd,cAAyC,OAAO,IAAI,CAAC,WAAW,CAAA,CAAC,CAAC;;;OAAA;IACpE,mBAAC;AAAD,CAAC,AAjDD,IAiDC;AAjDY,oCAAY"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/ONet.d.ts b/build/commonjs/mtcnn/ONet.d.ts deleted file mode 100644 index dfc7f113..00000000 --- a/build/commonjs/mtcnn/ONet.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { ONetParams } from './types'; -export declare function ONet(x: tf.Tensor4D, params: ONetParams): { - scores: tf.Tensor1D; - regions: tf.Tensor2D; - points: tf.Tensor2D; -}; diff --git a/build/commonjs/mtcnn/ONet.js b/build/commonjs/mtcnn/ONet.js deleted file mode 100644 index a8ae44c7..00000000 --- a/build/commonjs/mtcnn/ONet.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var fullyConnectedLayer_1 = require("../common/fullyConnectedLayer"); -var prelu_1 = require("./prelu"); -var sharedLayers_1 = require("./sharedLayers"); -function ONet(x, params) { - return tf.tidy(function () { - var out = sharedLayers_1.sharedLayer(x, params); - out = tf.maxPool(out, [2, 2], [2, 2], 'same'); - out = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.convLayer(out, params.conv4, 'valid'); - out = prelu_1.prelu(out, params.prelu4_alpha); - var vectorized = tf.reshape(out, [out.shape[0], params.fc1.weights.shape[0]]); - var fc1 = fullyConnectedLayer_1.fullyConnectedLayer(vectorized, params.fc1); - var prelu5 = prelu_1.prelu(fc1, params.prelu5_alpha); - var fc2_1 = fullyConnectedLayer_1.fullyConnectedLayer(prelu5, params.fc2_1); - var max = tf.expandDims(tf.max(fc2_1, 1), 1); - var prob = tf.softmax(tf.sub(fc2_1, max), 1); - var regions = fullyConnectedLayer_1.fullyConnectedLayer(prelu5, params.fc2_2); - var points = fullyConnectedLayer_1.fullyConnectedLayer(prelu5, params.fc2_3); - var scores = tf.unstack(prob, 1)[1]; - return { scores: scores, regions: regions, points: points }; - }); -} -exports.ONet = ONet; -//# sourceMappingURL=ONet.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/ONet.js.map b/build/commonjs/mtcnn/ONet.js.map deleted file mode 100644 index 7d5b6ccb..00000000 --- a/build/commonjs/mtcnn/ONet.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ONet.js","sourceRoot":"","sources":["../../../src/mtcnn/ONet.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAC5C,2EAAuE;AAEvE,qEAAoE;AACpE,iCAAgC;AAChC,+CAA6C;AAG7C,SAAgB,IAAI,CAAC,CAAc,EAAE,MAAkB;IACrD,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,GAAG,GAAG,0BAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QAChC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QAC7C,GAAG,GAAG,sDAAwB,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACpE,GAAG,GAAG,aAAK,CAAc,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAElD,IAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAgB,CAAA;QAC9F,IAAM,GAAG,GAAG,yCAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QACvD,IAAM,MAAM,GAAG,aAAK,CAAc,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,yCAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QACvD,IAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAE9C,IAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAgB,CAAA;QAC7D,IAAM,OAAO,GAAG,yCAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QACzD,IAAM,MAAM,GAAG,yCAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QAExD,IAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAgB,CAAA;QACpD,OAAO,EAAE,MAAM,QAAA,EAAE,OAAO,SAAA,EAAE,MAAM,QAAA,EAAE,CAAA;IACpC,CAAC,CAAC,CAAA;AACJ,CAAC;AArBD,oBAqBC"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/PNet.d.ts b/build/commonjs/mtcnn/PNet.d.ts deleted file mode 100644 index 74e2c841..00000000 --- a/build/commonjs/mtcnn/PNet.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { PNetParams } from './types'; -export declare function PNet(x: tf.Tensor4D, params: PNetParams): { - prob: tf.Tensor4D; - regions: tf.Tensor4D; -}; diff --git a/build/commonjs/mtcnn/PNet.js b/build/commonjs/mtcnn/PNet.js deleted file mode 100644 index ffd40a2e..00000000 --- a/build/commonjs/mtcnn/PNet.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var sharedLayers_1 = require("./sharedLayers"); -function PNet(x, params) { - return tf.tidy(function () { - var out = sharedLayers_1.sharedLayer(x, params, true); - var conv = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.convLayer(out, params.conv4_1, 'valid'); - var max = tf.expandDims(tf.max(conv, 3), 3); - var prob = tf.softmax(tf.sub(conv, max), 3); - var regions = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.convLayer(out, params.conv4_2, 'valid'); - return { prob: prob, regions: regions }; - }); -} -exports.PNet = PNet; -//# sourceMappingURL=PNet.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/PNet.js.map b/build/commonjs/mtcnn/PNet.js.map deleted file mode 100644 index 9aa12658..00000000 --- a/build/commonjs/mtcnn/PNet.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"PNet.js","sourceRoot":"","sources":["../../../src/mtcnn/PNet.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAC5C,2EAAuE;AAEvE,+CAA6C;AAG7C,SAAgB,IAAI,CAAC,CAAc,EAAE,MAAkB;IACrD,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,GAAG,GAAG,0BAAW,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;QACtC,IAAM,IAAI,GAAG,sDAAwB,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC7E,IAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7C,IAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAgB,CAAA;QAC5D,IAAM,OAAO,GAAG,sDAAwB,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAEhF,OAAO,EAAE,IAAI,MAAA,EAAE,OAAO,SAAA,EAAE,CAAA;IAC1B,CAAC,CAAC,CAAA;AACJ,CAAC;AAXD,oBAWC"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/RNet.d.ts b/build/commonjs/mtcnn/RNet.d.ts deleted file mode 100644 index c6883ff7..00000000 --- a/build/commonjs/mtcnn/RNet.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { RNetParams } from './types'; -export declare function RNet(x: tf.Tensor4D, params: RNetParams): { - scores: tf.Tensor1D; - regions: tf.Tensor2D; -}; diff --git a/build/commonjs/mtcnn/RNet.js b/build/commonjs/mtcnn/RNet.js deleted file mode 100644 index e00a33e5..00000000 --- a/build/commonjs/mtcnn/RNet.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -var fullyConnectedLayer_1 = require("../common/fullyConnectedLayer"); -var prelu_1 = require("./prelu"); -var sharedLayers_1 = require("./sharedLayers"); -function RNet(x, params) { - return tf.tidy(function () { - var convOut = sharedLayers_1.sharedLayer(x, params); - var vectorized = tf.reshape(convOut, [convOut.shape[0], params.fc1.weights.shape[0]]); - var fc1 = fullyConnectedLayer_1.fullyConnectedLayer(vectorized, params.fc1); - var prelu4 = prelu_1.prelu(fc1, params.prelu4_alpha); - var fc2_1 = fullyConnectedLayer_1.fullyConnectedLayer(prelu4, params.fc2_1); - var max = tf.expandDims(tf.max(fc2_1, 1), 1); - var prob = tf.softmax(tf.sub(fc2_1, max), 1); - var regions = fullyConnectedLayer_1.fullyConnectedLayer(prelu4, params.fc2_2); - var scores = tf.unstack(prob, 1)[1]; - return { scores: scores, regions: regions }; - }); -} -exports.RNet = RNet; -//# sourceMappingURL=RNet.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/RNet.js.map b/build/commonjs/mtcnn/RNet.js.map deleted file mode 100644 index 1498985c..00000000 --- a/build/commonjs/mtcnn/RNet.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"RNet.js","sourceRoot":"","sources":["../../../src/mtcnn/RNet.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAE5C,qEAAoE;AACpE,iCAAgC;AAChC,+CAA6C;AAG7C,SAAgB,IAAI,CAAC,CAAc,EAAE,MAAkB;IACrD,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAM,OAAO,GAAG,0BAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QACtC,IAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAgB,CAAA;QACtG,IAAM,GAAG,GAAG,yCAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QACvD,IAAM,MAAM,GAAG,aAAK,CAAc,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,yCAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QACvD,IAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9C,IAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAgB,CAAA;QAC7D,IAAM,OAAO,GAAG,yCAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QAEzD,IAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAgB,CAAA;QACpD,OAAO,EAAE,MAAM,QAAA,EAAE,OAAO,SAAA,EAAE,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC;AAfD,oBAeC"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/bgrToRgbTensor.d.ts b/build/commonjs/mtcnn/bgrToRgbTensor.d.ts deleted file mode 100644 index 7b544bef..00000000 --- a/build/commonjs/mtcnn/bgrToRgbTensor.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export declare function bgrToRgbTensor(tensor: tf.Tensor4D): tf.Tensor4D; diff --git a/build/commonjs/mtcnn/bgrToRgbTensor.js b/build/commonjs/mtcnn/bgrToRgbTensor.js deleted file mode 100644 index 262ce6dd..00000000 --- a/build/commonjs/mtcnn/bgrToRgbTensor.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -function bgrToRgbTensor(tensor) { - return tf.tidy(function () { return tf.stack(tf.unstack(tensor, 3).reverse(), 3); }); -} -exports.bgrToRgbTensor = bgrToRgbTensor; -//# sourceMappingURL=bgrToRgbTensor.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/bgrToRgbTensor.js.map b/build/commonjs/mtcnn/bgrToRgbTensor.js.map deleted file mode 100644 index 1e912fa3..00000000 --- a/build/commonjs/mtcnn/bgrToRgbTensor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bgrToRgbTensor.js","sourceRoot":"","sources":["../../../src/mtcnn/bgrToRgbTensor.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAE5C,SAAgB,cAAc,CAAC,MAAmB;IAChD,OAAO,EAAE,CAAC,IAAI,CACZ,cAAM,OAAA,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAA5C,CAA4C,CACpC,CAAA;AAClB,CAAC;AAJD,wCAIC"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/config.d.ts b/build/commonjs/mtcnn/config.d.ts deleted file mode 100644 index 05a91437..00000000 --- a/build/commonjs/mtcnn/config.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare const CELL_STRIDE = 2; -export declare const CELL_SIZE = 12; diff --git a/build/commonjs/mtcnn/config.js b/build/commonjs/mtcnn/config.js deleted file mode 100644 index fa6824e6..00000000 --- a/build/commonjs/mtcnn/config.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CELL_STRIDE = 2; -exports.CELL_SIZE = 12; -//# sourceMappingURL=config.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/config.js.map b/build/commonjs/mtcnn/config.js.map deleted file mode 100644 index bae8cf34..00000000 --- a/build/commonjs/mtcnn/config.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/mtcnn/config.ts"],"names":[],"mappings":";;AAAa,QAAA,WAAW,GAAG,CAAC,CAAA;AACf,QAAA,SAAS,GAAG,EAAE,CAAA"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/extractImagePatches.d.ts b/build/commonjs/mtcnn/extractImagePatches.d.ts deleted file mode 100644 index 4e43a1b6..00000000 --- a/build/commonjs/mtcnn/extractImagePatches.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { Box, IDimensions } from 'tfjs-image-recognition-base'; -export declare function extractImagePatches(img: HTMLCanvasElement, boxes: Box[], { width, height }: IDimensions): Promise; diff --git a/build/commonjs/mtcnn/extractImagePatches.js b/build/commonjs/mtcnn/extractImagePatches.js deleted file mode 100644 index 67c41444..00000000 --- a/build/commonjs/mtcnn/extractImagePatches.js +++ /dev/null @@ -1,55 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var normalize_1 = require("./normalize"); -function extractImagePatches(img, boxes, _a) { - var width = _a.width, height = _a.height; - return tslib_1.__awaiter(this, void 0, void 0, function () { - var imgCtx, bitmaps, imagePatchesDatas; - var _this = this; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - imgCtx = tfjs_image_recognition_base_1.getContext2dOrThrow(img); - return [4 /*yield*/, Promise.all(boxes.map(function (box) { return tslib_1.__awaiter(_this, void 0, void 0, function () { - var _a, y, ey, x, ex, fromX, fromY, imgData; - return tslib_1.__generator(this, function (_b) { - _a = box.padAtBorders(img.height, img.width), y = _a.y, ey = _a.ey, x = _a.x, ex = _a.ex; - fromX = x - 1; - fromY = y - 1; - imgData = imgCtx.getImageData(fromX, fromY, (ex - fromX), (ey - fromY)); - return [2 /*return*/, tfjs_image_recognition_base_1.env.isNodejs() ? tfjs_image_recognition_base_1.createCanvasFromMedia(imgData) : createImageBitmap(imgData)]; - }); - }); }))]; - case 1: - bitmaps = _b.sent(); - imagePatchesDatas = []; - bitmaps.forEach(function (bmp) { - var patch = tfjs_image_recognition_base_1.createCanvas({ width: width, height: height }); - var patchCtx = tfjs_image_recognition_base_1.getContext2dOrThrow(patch); - patchCtx.drawImage(bmp, 0, 0, width, height); - var data = patchCtx.getImageData(0, 0, width, height).data; - var currData = []; - // RGBA -> BGR - for (var i = 0; i < data.length; i += 4) { - currData.push(data[i + 2]); - currData.push(data[i + 1]); - currData.push(data[i]); - } - imagePatchesDatas.push(currData); - }); - return [2 /*return*/, imagePatchesDatas.map(function (data) { - var t = tf.tidy(function () { - var imagePatchTensor = tf.transpose(tf.tensor4d(data, [1, width, height, 3]), [0, 2, 1, 3]).toFloat(); - return normalize_1.normalize(imagePatchTensor); - }); - return t; - })]; - } - }); - }); -} -exports.extractImagePatches = extractImagePatches; -//# sourceMappingURL=extractImagePatches.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/extractImagePatches.js.map b/build/commonjs/mtcnn/extractImagePatches.js.map deleted file mode 100644 index fceefae4..00000000 --- a/build/commonjs/mtcnn/extractImagePatches.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractImagePatches.js","sourceRoot":"","sources":["../../../src/mtcnn/extractImagePatches.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAC5C,2EAOqC;AAErC,yCAAwC;AAExC,SAAsB,mBAAmB,CACvC,GAAsB,EACtB,KAAY,EACZ,EAA8B;QAA5B,gBAAK,EAAE,kBAAM;;;;;;;oBAIT,MAAM,GAAG,iDAAmB,CAAC,GAAG,CAAC,CAAA;oBAEvB,qBAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAM,GAAG;;;gCAE7C,KAAmB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAxD,CAAC,OAAA,EAAE,EAAE,QAAA,EAAE,CAAC,OAAA,EAAE,EAAE,QAAA,CAA4C;gCAE1D,KAAK,GAAG,CAAC,GAAG,CAAC,CAAA;gCACb,KAAK,GAAG,CAAC,GAAG,CAAC,CAAA;gCACb,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAA;gCAE7E,sBAAO,iCAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,mDAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAA;;6BACpF,CAAC,CAAC,EAAA;;oBATG,OAAO,GAAG,SASb;oBAEG,iBAAiB,GAAe,EAAE,CAAA;oBAExC,OAAO,CAAC,OAAO,CAAC,UAAA,GAAG;wBACjB,IAAM,KAAK,GAAG,0CAAY,CAAC,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAC,CAAA;wBAC7C,IAAM,QAAQ,GAAG,iDAAmB,CAAC,KAAK,CAAC,CAAA;wBAC3C,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;wBACpC,IAAA,sDAAI,CAA+C;wBAE3D,IAAM,QAAQ,GAAG,EAAE,CAAA;wBACnB,cAAc;wBACd,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAE,CAAC,EAAE;4BACpC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;4BAC1B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;4BAC1B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;yBACvB;wBACD,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;oBAClC,CAAC,CAAC,CAAA;oBAGF,sBAAO,iBAAiB,CAAC,GAAG,CAAC,UAAA,IAAI;4BAC/B,IAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;gCAChB,IAAM,gBAAgB,GAAG,EAAE,CAAC,SAAS,CACnC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EACxC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACb,CAAC,OAAO,EAAiB,CAAA;gCAE1B,OAAO,qBAAS,CAAC,gBAAgB,CAAC,CAAA;4BACpC,CAAC,CAAC,CAAA;4BACF,OAAO,CAAC,CAAA;wBACV,CAAC,CAAC,EAAA;;;;CACH;AAlDD,kDAkDC"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/extractParams.d.ts b/build/commonjs/mtcnn/extractParams.d.ts deleted file mode 100644 index 14d45d2b..00000000 --- a/build/commonjs/mtcnn/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/commonjs/mtcnn/extractParams.js b/build/commonjs/mtcnn/extractParams.js deleted file mode 100644 index 55b51a41..00000000 --- a/build/commonjs/mtcnn/extractParams.js +++ /dev/null @@ -1,68 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -function extractorsFactory(extractWeights, paramMappings) { - var extractConvParams = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractConvParamsFactory(extractWeights, paramMappings); - var extractFCParams = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractFCParamsFactory(extractWeights, paramMappings); - function extractPReluParams(size, paramPath) { - var alpha = tf.tensor1d(extractWeights(size)); - paramMappings.push({ paramPath: paramPath }); - return alpha; - } - function extractSharedParams(numFilters, mappedPrefix, isRnet) { - if (isRnet === void 0) { isRnet = false; } - var conv1 = extractConvParams(numFilters[0], numFilters[1], 3, mappedPrefix + "/conv1"); - var prelu1_alpha = extractPReluParams(numFilters[1], mappedPrefix + "/prelu1_alpha"); - var conv2 = extractConvParams(numFilters[1], numFilters[2], 3, mappedPrefix + "/conv2"); - var prelu2_alpha = extractPReluParams(numFilters[2], mappedPrefix + "/prelu2_alpha"); - var conv3 = extractConvParams(numFilters[2], numFilters[3], isRnet ? 2 : 3, mappedPrefix + "/conv3"); - var prelu3_alpha = extractPReluParams(numFilters[3], mappedPrefix + "/prelu3_alpha"); - return { conv1: conv1, prelu1_alpha: prelu1_alpha, conv2: conv2, prelu2_alpha: prelu2_alpha, conv3: conv3, prelu3_alpha: prelu3_alpha }; - } - function extractPNetParams() { - var sharedParams = extractSharedParams([3, 10, 16, 32], 'pnet'); - var conv4_1 = extractConvParams(32, 2, 1, 'pnet/conv4_1'); - var conv4_2 = extractConvParams(32, 4, 1, 'pnet/conv4_2'); - return tslib_1.__assign({}, sharedParams, { conv4_1: conv4_1, conv4_2: conv4_2 }); - } - function extractRNetParams() { - var sharedParams = extractSharedParams([3, 28, 48, 64], 'rnet', true); - var fc1 = extractFCParams(576, 128, 'rnet/fc1'); - var prelu4_alpha = extractPReluParams(128, 'rnet/prelu4_alpha'); - var fc2_1 = extractFCParams(128, 2, 'rnet/fc2_1'); - var fc2_2 = extractFCParams(128, 4, 'rnet/fc2_2'); - return tslib_1.__assign({}, sharedParams, { fc1: fc1, prelu4_alpha: prelu4_alpha, fc2_1: fc2_1, fc2_2: fc2_2 }); - } - function extractONetParams() { - var sharedParams = extractSharedParams([3, 32, 64, 64], 'onet'); - var conv4 = extractConvParams(64, 128, 2, 'onet/conv4'); - var prelu4_alpha = extractPReluParams(128, 'onet/prelu4_alpha'); - var fc1 = extractFCParams(1152, 256, 'onet/fc1'); - var prelu5_alpha = extractPReluParams(256, 'onet/prelu5_alpha'); - var fc2_1 = extractFCParams(256, 2, 'onet/fc2_1'); - var fc2_2 = extractFCParams(256, 4, 'onet/fc2_2'); - var fc2_3 = extractFCParams(256, 10, 'onet/fc2_3'); - return tslib_1.__assign({}, sharedParams, { conv4: conv4, prelu4_alpha: prelu4_alpha, fc1: fc1, prelu5_alpha: prelu5_alpha, fc2_1: fc2_1, fc2_2: fc2_2, fc2_3: fc2_3 }); - } - return { - extractPNetParams: extractPNetParams, - extractRNetParams: extractRNetParams, - extractONetParams: extractONetParams - }; -} -function extractParams(weights) { - var _a = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var paramMappings = []; - var _b = extractorsFactory(extractWeights, paramMappings), extractPNetParams = _b.extractPNetParams, extractRNetParams = _b.extractRNetParams, extractONetParams = _b.extractONetParams; - var pnet = extractPNetParams(); - var rnet = extractRNetParams(); - var onet = extractONetParams(); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { params: { pnet: pnet, rnet: rnet, onet: onet }, paramMappings: paramMappings }; -} -exports.extractParams = extractParams; -//# sourceMappingURL=extractParams.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/extractParams.js.map b/build/commonjs/mtcnn/extractParams.js.map deleted file mode 100644 index abed7e30..00000000 --- a/build/commonjs/mtcnn/extractParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/mtcnn/extractParams.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/extractParamsFromWeigthMap.d.ts b/build/commonjs/mtcnn/extractParamsFromWeigthMap.d.ts deleted file mode 100644 index 7bf5a66d..00000000 --- a/build/commonjs/mtcnn/extractParamsFromWeigthMap.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/commonjs/mtcnn/extractParamsFromWeigthMap.js b/build/commonjs/mtcnn/extractParamsFromWeigthMap.js deleted file mode 100644 index d8814f74..00000000 --- a/build/commonjs/mtcnn/extractParamsFromWeigthMap.js +++ /dev/null @@ -1,70 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -function extractorsFactory(weightMap, paramMappings) { - var extractWeightEntry = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings); - function extractConvParams(prefix) { - var filters = extractWeightEntry(prefix + "/weights", 4, prefix + "/filters"); - var bias = extractWeightEntry(prefix + "/bias", 1); - return { filters: filters, bias: bias }; - } - function extractFCParams(prefix) { - var weights = extractWeightEntry(prefix + "/weights", 2); - var bias = extractWeightEntry(prefix + "/bias", 1); - return { weights: weights, bias: bias }; - } - function extractPReluParams(paramPath) { - return extractWeightEntry(paramPath, 1); - } - function extractSharedParams(prefix) { - var conv1 = extractConvParams(prefix + "/conv1"); - var prelu1_alpha = extractPReluParams(prefix + "/prelu1_alpha"); - var conv2 = extractConvParams(prefix + "/conv2"); - var prelu2_alpha = extractPReluParams(prefix + "/prelu2_alpha"); - var conv3 = extractConvParams(prefix + "/conv3"); - var prelu3_alpha = extractPReluParams(prefix + "/prelu3_alpha"); - return { conv1: conv1, prelu1_alpha: prelu1_alpha, conv2: conv2, prelu2_alpha: prelu2_alpha, conv3: conv3, prelu3_alpha: prelu3_alpha }; - } - function extractPNetParams() { - var sharedParams = extractSharedParams('pnet'); - var conv4_1 = extractConvParams('pnet/conv4_1'); - var conv4_2 = extractConvParams('pnet/conv4_2'); - return tslib_1.__assign({}, sharedParams, { conv4_1: conv4_1, conv4_2: conv4_2 }); - } - function extractRNetParams() { - var sharedParams = extractSharedParams('rnet'); - var fc1 = extractFCParams('rnet/fc1'); - var prelu4_alpha = extractPReluParams('rnet/prelu4_alpha'); - var fc2_1 = extractFCParams('rnet/fc2_1'); - var fc2_2 = extractFCParams('rnet/fc2_2'); - return tslib_1.__assign({}, sharedParams, { fc1: fc1, prelu4_alpha: prelu4_alpha, fc2_1: fc2_1, fc2_2: fc2_2 }); - } - function extractONetParams() { - var sharedParams = extractSharedParams('onet'); - var conv4 = extractConvParams('onet/conv4'); - var prelu4_alpha = extractPReluParams('onet/prelu4_alpha'); - var fc1 = extractFCParams('onet/fc1'); - var prelu5_alpha = extractPReluParams('onet/prelu5_alpha'); - var fc2_1 = extractFCParams('onet/fc2_1'); - var fc2_2 = extractFCParams('onet/fc2_2'); - var fc2_3 = extractFCParams('onet/fc2_3'); - return tslib_1.__assign({}, sharedParams, { conv4: conv4, prelu4_alpha: prelu4_alpha, fc1: fc1, prelu5_alpha: prelu5_alpha, fc2_1: fc2_1, fc2_2: fc2_2, fc2_3: fc2_3 }); - } - return { - extractPNetParams: extractPNetParams, - extractRNetParams: extractRNetParams, - extractONetParams: extractONetParams - }; -} -function extractParamsFromWeigthMap(weightMap) { - var paramMappings = []; - var _a = extractorsFactory(weightMap, paramMappings), extractPNetParams = _a.extractPNetParams, extractRNetParams = _a.extractRNetParams, extractONetParams = _a.extractONetParams; - var pnet = extractPNetParams(); - var rnet = extractRNetParams(); - var onet = extractONetParams(); - tfjs_image_recognition_base_1.TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: { pnet: pnet, rnet: rnet, onet: onet }, paramMappings: paramMappings }; -} -exports.extractParamsFromWeigthMap = extractParamsFromWeigthMap; -//# sourceMappingURL=extractParamsFromWeigthMap.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/extractParamsFromWeigthMap.js.map b/build/commonjs/mtcnn/extractParamsFromWeigthMap.js.map deleted file mode 100644 index b2f27068..00000000 --- a/build/commonjs/mtcnn/extractParamsFromWeigthMap.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParamsFromWeigthMap.js","sourceRoot":"","sources":["../../../src/mtcnn/extractParamsFromWeigthMap.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/getSizesForScale.d.ts b/build/commonjs/mtcnn/getSizesForScale.d.ts deleted file mode 100644 index 4ab739a5..00000000 --- a/build/commonjs/mtcnn/getSizesForScale.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare function getSizesForScale(scale: number, [height, width]: number[]): { - height: number; - width: number; -}; diff --git a/build/commonjs/mtcnn/getSizesForScale.js b/build/commonjs/mtcnn/getSizesForScale.js deleted file mode 100644 index b2cd4cee..00000000 --- a/build/commonjs/mtcnn/getSizesForScale.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function getSizesForScale(scale, _a) { - var height = _a[0], width = _a[1]; - return { - height: Math.floor(height * scale), - width: Math.floor(width * scale) - }; -} -exports.getSizesForScale = getSizesForScale; -//# sourceMappingURL=getSizesForScale.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/getSizesForScale.js.map b/build/commonjs/mtcnn/getSizesForScale.js.map deleted file mode 100644 index dd806853..00000000 --- a/build/commonjs/mtcnn/getSizesForScale.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"getSizesForScale.js","sourceRoot":"","sources":["../../../src/mtcnn/getSizesForScale.ts"],"names":[],"mappings":";;AAAA,SAAgB,gBAAgB,CAAC,KAAa,EAAE,EAAyB;QAAxB,cAAM,EAAE,aAAK;IAC5D,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QAClC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;KACjC,CAAA;AACH,CAAC;AALD,4CAKC"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/index.d.ts b/build/commonjs/mtcnn/index.d.ts deleted file mode 100644 index 8e8e10ee..00000000 --- a/build/commonjs/mtcnn/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Mtcnn } from './Mtcnn'; -export * from './Mtcnn'; -export * from './MtcnnOptions'; -export declare function createMtcnn(weights: Float32Array): Mtcnn; diff --git a/build/commonjs/mtcnn/index.js b/build/commonjs/mtcnn/index.js deleted file mode 100644 index 6e03c6a2..00000000 --- a/build/commonjs/mtcnn/index.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Mtcnn_1 = require("./Mtcnn"); -tslib_1.__exportStar(require("./Mtcnn"), exports); -tslib_1.__exportStar(require("./MtcnnOptions"), exports); -function createMtcnn(weights) { - var net = new Mtcnn_1.Mtcnn(); - net.extractWeights(weights); - return net; -} -exports.createMtcnn = createMtcnn; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/index.js.map b/build/commonjs/mtcnn/index.js.map deleted file mode 100644 index f100b37d..00000000 --- a/build/commonjs/mtcnn/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mtcnn/index.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAEhC,kDAAwB;AACxB,yDAA+B;AAE/B,SAAgB,WAAW,CAAC,OAAqB;IAC/C,IAAM,GAAG,GAAG,IAAI,aAAK,EAAE,CAAA;IACvB,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC;AAJD,kCAIC"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/normalize.d.ts b/build/commonjs/mtcnn/normalize.d.ts deleted file mode 100644 index 1a14045d..00000000 --- a/build/commonjs/mtcnn/normalize.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export declare function normalize(x: tf.Tensor4D): tf.Tensor4D; diff --git a/build/commonjs/mtcnn/normalize.js b/build/commonjs/mtcnn/normalize.js deleted file mode 100644 index e0cff3f7..00000000 --- a/build/commonjs/mtcnn/normalize.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -function normalize(x) { - return tf.tidy(function () { return tf.mul(tf.sub(x, tf.scalar(127.5)), tf.scalar(0.0078125)); }); -} -exports.normalize = normalize; -//# sourceMappingURL=normalize.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/normalize.js.map b/build/commonjs/mtcnn/normalize.js.map deleted file mode 100644 index a15cd672..00000000 --- a/build/commonjs/mtcnn/normalize.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../../src/mtcnn/normalize.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAE5C,SAAgB,SAAS,CAAC,CAAc;IACtC,OAAO,EAAE,CAAC,IAAI,CACZ,cAAM,OAAA,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAzD,CAAyD,CAChE,CAAA;AACH,CAAC;AAJD,8BAIC"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/prelu.d.ts b/build/commonjs/mtcnn/prelu.d.ts deleted file mode 100644 index 3019168f..00000000 --- a/build/commonjs/mtcnn/prelu.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export declare function prelu(x: T, alpha: tf.Tensor1D): T; diff --git a/build/commonjs/mtcnn/prelu.js b/build/commonjs/mtcnn/prelu.js deleted file mode 100644 index c6c2e457..00000000 --- a/build/commonjs/mtcnn/prelu.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -function prelu(x, alpha) { - return tf.tidy(function () { - return tf.add(tf.relu(x), tf.mul(alpha, tf.neg(tf.relu(tf.neg(x))))); - }); -} -exports.prelu = prelu; -//# sourceMappingURL=prelu.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/prelu.js.map b/build/commonjs/mtcnn/prelu.js.map deleted file mode 100644 index 6012b53e..00000000 --- a/build/commonjs/mtcnn/prelu.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"prelu.js","sourceRoot":"","sources":["../../../src/mtcnn/prelu.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAE5C,SAAgB,KAAK,CAAsB,CAAI,EAAE,KAAkB;IACjE,OAAO,EAAE,CAAC,IAAI,CAAC;QACb,OAAA,EAAE,CAAC,GAAG,CACJ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EACV,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1C;IAHD,CAGC,CACF,CAAA;AACH,CAAC;AAPD,sBAOC"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/pyramidDown.d.ts b/build/commonjs/mtcnn/pyramidDown.d.ts deleted file mode 100644 index 58073049..00000000 --- a/build/commonjs/mtcnn/pyramidDown.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function pyramidDown(minFaceSize: number, scaleFactor: number, dims: number[]): number[]; diff --git a/build/commonjs/mtcnn/pyramidDown.js b/build/commonjs/mtcnn/pyramidDown.js deleted file mode 100644 index 44ab651a..00000000 --- a/build/commonjs/mtcnn/pyramidDown.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var config_1 = require("./config"); -function pyramidDown(minFaceSize, scaleFactor, dims) { - var height = dims[0], width = dims[1]; - var m = config_1.CELL_SIZE / minFaceSize; - var scales = []; - var minLayer = Math.min(height, width) * m; - var exp = 0; - while (minLayer >= 12) { - scales.push(m * Math.pow(scaleFactor, exp)); - minLayer = minLayer * scaleFactor; - exp += 1; - } - return scales; -} -exports.pyramidDown = pyramidDown; -//# sourceMappingURL=pyramidDown.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/pyramidDown.js.map b/build/commonjs/mtcnn/pyramidDown.js.map deleted file mode 100644 index 0712d3e3..00000000 --- a/build/commonjs/mtcnn/pyramidDown.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"pyramidDown.js","sourceRoot":"","sources":["../../../src/mtcnn/pyramidDown.ts"],"names":[],"mappings":";;AAAA,mCAAqC;AAErC,SAAgB,WAAW,CAAC,WAAmB,EAAE,WAAmB,EAAE,IAAc;IAE3E,IAAA,gBAAM,EAAE,eAAK,CAAQ;IAC5B,IAAM,CAAC,GAAG,kBAAS,GAAG,WAAW,CAAA;IAEjC,IAAM,MAAM,GAAG,EAAE,CAAA;IAEjB,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,OAAO,QAAQ,IAAI,EAAE,EAAE;QACrB,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAA;QAC3C,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAA;QACjC,GAAG,IAAI,CAAC,CAAA;KACT;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAhBD,kCAgBC"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/sharedLayers.d.ts b/build/commonjs/mtcnn/sharedLayers.d.ts deleted file mode 100644 index afc63db2..00000000 --- a/build/commonjs/mtcnn/sharedLayers.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { SharedParams } from './types'; -export declare function sharedLayer(x: tf.Tensor4D, params: SharedParams, isPnet?: boolean): tf.Tensor; diff --git a/build/commonjs/mtcnn/sharedLayers.js b/build/commonjs/mtcnn/sharedLayers.js deleted file mode 100644 index 1f337a7e..00000000 --- a/build/commonjs/mtcnn/sharedLayers.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var prelu_1 = require("./prelu"); -function sharedLayer(x, params, isPnet) { - if (isPnet === void 0) { isPnet = false; } - return tf.tidy(function () { - var out = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.convLayer(x, params.conv1, 'valid'); - out = prelu_1.prelu(out, params.prelu1_alpha); - out = tf.maxPool(out, isPnet ? [2, 2] : [3, 3], [2, 2], 'same'); - out = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.convLayer(out, params.conv2, 'valid'); - out = prelu_1.prelu(out, params.prelu2_alpha); - out = isPnet ? out : tf.maxPool(out, [3, 3], [2, 2], 'valid'); - out = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.convLayer(out, params.conv3, 'valid'); - out = prelu_1.prelu(out, params.prelu3_alpha); - return out; - }); -} -exports.sharedLayer = sharedLayer; -//# sourceMappingURL=sharedLayers.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/sharedLayers.js.map b/build/commonjs/mtcnn/sharedLayers.js.map deleted file mode 100644 index fe4d9ef6..00000000 --- a/build/commonjs/mtcnn/sharedLayers.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"sharedLayers.js","sourceRoot":"","sources":["../../../src/mtcnn/sharedLayers.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAC5C,2EAAuE;AAEvE,iCAAgC;AAGhC,SAAgB,WAAW,CAAC,CAAc,EAAE,MAAoB,EAAE,MAAuB;IAAvB,uBAAA,EAAA,cAAuB;IACvF,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,GAAG,GAAG,sDAAwB,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACtE,GAAG,GAAG,aAAK,CAAc,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAClD,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QAC9D,GAAG,GAAG,sDAAwB,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACpE,GAAG,GAAG,aAAK,CAAc,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAClD,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QAC7D,GAAG,GAAG,sDAAwB,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACpE,GAAG,GAAG,aAAK,CAAc,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAElD,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC;AAdD,kCAcC"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/stage1.d.ts b/build/commonjs/mtcnn/stage1.d.ts deleted file mode 100644 index f096cea1..00000000 --- a/build/commonjs/mtcnn/stage1.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { BoundingBox } from 'tfjs-image-recognition-base'; -import { PNetParams } from './types'; -export declare function stage1(imgTensor: tf.Tensor4D, scales: number[], scoreThreshold: number, params: PNetParams, stats: any): { - boxes: BoundingBox[]; - scores: number[]; -}; diff --git a/build/commonjs/mtcnn/stage1.js b/build/commonjs/mtcnn/stage1.js deleted file mode 100644 index 8671eac9..00000000 --- a/build/commonjs/mtcnn/stage1.js +++ /dev/null @@ -1,96 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var config_1 = require("./config"); -var getSizesForScale_1 = require("./getSizesForScale"); -var MtcnnBox_1 = require("./MtcnnBox"); -var normalize_1 = require("./normalize"); -var PNet_1 = require("./PNet"); -function rescaleAndNormalize(x, scale) { - return tf.tidy(function () { - var _a = getSizesForScale_1.getSizesForScale(scale, x.shape.slice(1)), height = _a.height, width = _a.width; - var resized = tf.image.resizeBilinear(x, [height, width]); - var normalized = normalize_1.normalize(resized); - return tf.transpose(normalized, [0, 2, 1, 3]); - }); -} -function extractBoundingBoxes(scoresTensor, regionsTensor, scale, scoreThreshold) { - // TODO: fix this!, maybe better to use tf.gather here - var indices = []; - var scoresData = scoresTensor.arraySync(); - for (var y = 0; y < scoresTensor.shape[0]; y++) { - for (var x = 0; x < scoresTensor.shape[1]; x++) { - if (scoresData[y][x] >= scoreThreshold) { - indices.push(new tfjs_image_recognition_base_1.Point(x, y)); - } - } - } - var boundingBoxes = indices.map(function (idx) { - var cell = new tfjs_image_recognition_base_1.BoundingBox(Math.round((idx.y * config_1.CELL_STRIDE + 1) / scale), Math.round((idx.x * config_1.CELL_STRIDE + 1) / scale), Math.round((idx.y * config_1.CELL_STRIDE + config_1.CELL_SIZE) / scale), Math.round((idx.x * config_1.CELL_STRIDE + config_1.CELL_SIZE) / scale)); - var score = scoresData[idx.y][idx.x]; - var regionsData = regionsTensor.arraySync(); - var region = new MtcnnBox_1.MtcnnBox(regionsData[idx.y][idx.x][0], regionsData[idx.y][idx.x][1], regionsData[idx.y][idx.x][2], regionsData[idx.y][idx.x][3]); - return { - cell: cell, - score: score, - region: region - }; - }); - return boundingBoxes; -} -function stage1(imgTensor, scales, scoreThreshold, params, stats) { - stats.stage1 = []; - var pnetOutputs = scales.map(function (scale) { return tf.tidy(function () { - var statsForScale = { scale: scale }; - var resized = rescaleAndNormalize(imgTensor, scale); - var ts = Date.now(); - var _a = PNet_1.PNet(resized, params), prob = _a.prob, regions = _a.regions; - statsForScale.pnet = Date.now() - ts; - var scoresTensor = tf.unstack(tf.unstack(prob, 3)[1])[0]; - var regionsTensor = tf.unstack(regions)[0]; - return { - scoresTensor: scoresTensor, - regionsTensor: regionsTensor, - scale: scale, - statsForScale: statsForScale - }; - }); }); - var boxesForScale = pnetOutputs.map(function (_a) { - var scoresTensor = _a.scoresTensor, regionsTensor = _a.regionsTensor, scale = _a.scale, statsForScale = _a.statsForScale; - var boundingBoxes = extractBoundingBoxes(scoresTensor, regionsTensor, scale, scoreThreshold); - scoresTensor.dispose(); - regionsTensor.dispose(); - if (!boundingBoxes.length) { - stats.stage1.push(statsForScale); - return []; - } - var ts = Date.now(); - var indices = tfjs_image_recognition_base_1.nonMaxSuppression(boundingBoxes.map(function (bbox) { return bbox.cell; }), boundingBoxes.map(function (bbox) { return bbox.score; }), 0.5); - statsForScale.nms = Date.now() - ts; - statsForScale.numBoxes = indices.length; - stats.stage1.push(statsForScale); - return indices.map(function (boxIdx) { return boundingBoxes[boxIdx]; }); - }); - var allBoxes = boxesForScale.reduce(function (all, boxes) { return all.concat(boxes); }, []); - var finalBoxes = []; - var finalScores = []; - if (allBoxes.length > 0) { - var ts = Date.now(); - var indices = tfjs_image_recognition_base_1.nonMaxSuppression(allBoxes.map(function (bbox) { return bbox.cell; }), allBoxes.map(function (bbox) { return bbox.score; }), 0.7); - stats.stage1_nms = Date.now() - ts; - finalScores = indices.map(function (idx) { return allBoxes[idx].score; }); - finalBoxes = indices - .map(function (idx) { return allBoxes[idx]; }) - .map(function (_a) { - var cell = _a.cell, region = _a.region; - return new tfjs_image_recognition_base_1.BoundingBox(cell.left + (region.left * cell.width), cell.top + (region.top * cell.height), cell.right + (region.right * cell.width), cell.bottom + (region.bottom * cell.height)).toSquare().round(); - }); - } - return { - boxes: finalBoxes, - scores: finalScores - }; -} -exports.stage1 = stage1; -//# sourceMappingURL=stage1.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/stage1.js.map b/build/commonjs/mtcnn/stage1.js.map deleted file mode 100644 index fb9d904c..00000000 --- a/build/commonjs/mtcnn/stage1.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"stage1.js","sourceRoot":"","sources":["../../../src/mtcnn/stage1.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/stage2.d.ts b/build/commonjs/mtcnn/stage2.d.ts deleted file mode 100644 index de3a4c61..00000000 --- a/build/commonjs/mtcnn/stage2.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Box } from 'tfjs-image-recognition-base'; -import { RNetParams } from './types'; -export declare function stage2(img: HTMLCanvasElement, inputBoxes: Box[], scoreThreshold: number, params: RNetParams, stats: any): Promise<{ - boxes: Box[]; - scores: number[]; -}>; diff --git a/build/commonjs/mtcnn/stage2.js b/build/commonjs/mtcnn/stage2.js deleted file mode 100644 index 0e174059..00000000 --- a/build/commonjs/mtcnn/stage2.js +++ /dev/null @@ -1,70 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var extractImagePatches_1 = require("./extractImagePatches"); -var MtcnnBox_1 = require("./MtcnnBox"); -var RNet_1 = require("./RNet"); -function stage2(img, inputBoxes, scoreThreshold, params, stats) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var ts, rnetInputs, rnetOuts, scoresTensor, scores, _a, _b, indices, filteredBoxes, filteredScores, finalBoxes, finalScores, indicesNms, regions_1; - return tslib_1.__generator(this, function (_c) { - switch (_c.label) { - case 0: - ts = Date.now(); - return [4 /*yield*/, extractImagePatches_1.extractImagePatches(img, inputBoxes, { width: 24, height: 24 })]; - case 1: - rnetInputs = _c.sent(); - stats.stage2_extractImagePatches = Date.now() - ts; - ts = Date.now(); - rnetOuts = rnetInputs.map(function (rnetInput) { - var out = RNet_1.RNet(rnetInput, params); - rnetInput.dispose(); - return out; - }); - stats.stage2_rnet = Date.now() - ts; - scoresTensor = rnetOuts.length > 1 - ? tf.concat(rnetOuts.map(function (out) { return out.scores; })) - : rnetOuts[0].scores; - _b = (_a = Array).from; - return [4 /*yield*/, scoresTensor.data()]; - case 2: - scores = _b.apply(_a, [_c.sent()]); - scoresTensor.dispose(); - indices = scores - .map(function (score, idx) { return ({ score: score, idx: idx }); }) - .filter(function (c) { return c.score > scoreThreshold; }) - .map(function (_a) { - var idx = _a.idx; - return idx; - }); - filteredBoxes = indices.map(function (idx) { return inputBoxes[idx]; }); - filteredScores = indices.map(function (idx) { return scores[idx]; }); - finalBoxes = []; - finalScores = []; - if (filteredBoxes.length > 0) { - ts = Date.now(); - indicesNms = tfjs_image_recognition_base_1.nonMaxSuppression(filteredBoxes, filteredScores, 0.7); - stats.stage2_nms = Date.now() - ts; - regions_1 = indicesNms.map(function (idx) { - var regionsData = rnetOuts[indices[idx]].regions.arraySync(); - return new MtcnnBox_1.MtcnnBox(regionsData[0][0], regionsData[0][1], regionsData[0][2], regionsData[0][3]); - }); - finalScores = indicesNms.map(function (idx) { return filteredScores[idx]; }); - finalBoxes = indicesNms.map(function (idx, i) { return filteredBoxes[idx].calibrate(regions_1[i]); }); - } - rnetOuts.forEach(function (t) { - t.regions.dispose(); - t.scores.dispose(); - }); - return [2 /*return*/, { - boxes: finalBoxes, - scores: finalScores - }]; - } - }); - }); -} -exports.stage2 = stage2; -//# sourceMappingURL=stage2.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/stage2.js.map b/build/commonjs/mtcnn/stage2.js.map deleted file mode 100644 index d8428476..00000000 --- a/build/commonjs/mtcnn/stage2.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"stage2.js","sourceRoot":"","sources":["../../../src/mtcnn/stage2.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/stage3.d.ts b/build/commonjs/mtcnn/stage3.d.ts deleted file mode 100644 index 607d3047..00000000 --- a/build/commonjs/mtcnn/stage3.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { BoundingBox, Box, Point } from 'tfjs-image-recognition-base'; -import { ONetParams } from './types'; -export declare function stage3(img: HTMLCanvasElement, inputBoxes: BoundingBox[], scoreThreshold: number, params: ONetParams, stats: any): Promise<{ - boxes: Box[]; - scores: number[]; - points: Point[][]; -}>; diff --git a/build/commonjs/mtcnn/stage3.js b/build/commonjs/mtcnn/stage3.js deleted file mode 100644 index 374b7d4d..00000000 --- a/build/commonjs/mtcnn/stage3.js +++ /dev/null @@ -1,80 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var extractImagePatches_1 = require("./extractImagePatches"); -var MtcnnBox_1 = require("./MtcnnBox"); -var ONet_1 = require("./ONet"); -function stage3(img, inputBoxes, scoreThreshold, params, stats) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var ts, onetInputs, onetOuts, scoresTensor, scores, _a, _b, indices, filteredRegions, filteredBoxes, filteredScores, finalBoxes, finalScores, points, indicesNms; - return tslib_1.__generator(this, function (_c) { - switch (_c.label) { - case 0: - ts = Date.now(); - return [4 /*yield*/, extractImagePatches_1.extractImagePatches(img, inputBoxes, { width: 48, height: 48 })]; - case 1: - onetInputs = _c.sent(); - stats.stage3_extractImagePatches = Date.now() - ts; - ts = Date.now(); - onetOuts = onetInputs.map(function (onetInput) { - var out = ONet_1.ONet(onetInput, params); - onetInput.dispose(); - return out; - }); - stats.stage3_onet = Date.now() - ts; - scoresTensor = onetOuts.length > 1 - ? tf.concat(onetOuts.map(function (out) { return out.scores; })) - : onetOuts[0].scores; - _b = (_a = Array).from; - return [4 /*yield*/, scoresTensor.data()]; - case 2: - scores = _b.apply(_a, [_c.sent()]); - scoresTensor.dispose(); - indices = scores - .map(function (score, idx) { return ({ score: score, idx: idx }); }) - .filter(function (c) { return c.score > scoreThreshold; }) - .map(function (_a) { - var idx = _a.idx; - return idx; - }); - filteredRegions = indices.map(function (idx) { - var regionsData = onetOuts[idx].regions.arraySync(); - return new MtcnnBox_1.MtcnnBox(regionsData[0][0], regionsData[0][1], regionsData[0][2], regionsData[0][3]); - }); - filteredBoxes = indices - .map(function (idx, i) { return inputBoxes[idx].calibrate(filteredRegions[i]); }); - filteredScores = indices.map(function (idx) { return scores[idx]; }); - finalBoxes = []; - finalScores = []; - points = []; - if (filteredBoxes.length > 0) { - ts = Date.now(); - indicesNms = tfjs_image_recognition_base_1.nonMaxSuppression(filteredBoxes, filteredScores, 0.7, false); - stats.stage3_nms = Date.now() - ts; - finalBoxes = indicesNms.map(function (idx) { return filteredBoxes[idx]; }); - finalScores = indicesNms.map(function (idx) { return filteredScores[idx]; }); - points = indicesNms.map(function (idx, i) { - return Array(5).fill(0).map(function (_, ptIdx) { - var pointsData = onetOuts[idx].points.arraySync(); - return new tfjs_image_recognition_base_1.Point(((pointsData[0][ptIdx] * (finalBoxes[i].width + 1)) + finalBoxes[i].left), ((pointsData[0][ptIdx + 5] * (finalBoxes[i].height + 1)) + finalBoxes[i].top)); - }); - }); - } - onetOuts.forEach(function (t) { - t.regions.dispose(); - t.scores.dispose(); - t.points.dispose(); - }); - return [2 /*return*/, { - boxes: finalBoxes, - scores: finalScores, - points: points - }]; - } - }); - }); -} -exports.stage3 = stage3; -//# sourceMappingURL=stage3.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/stage3.js.map b/build/commonjs/mtcnn/stage3.js.map deleted file mode 100644 index 0f41f2a3..00000000 --- a/build/commonjs/mtcnn/stage3.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"stage3.js","sourceRoot":"","sources":["../../../src/mtcnn/stage3.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAC5C,2EAAyF;AAEzF,6DAA4D;AAC5D,uCAAsC;AACtC,+BAA8B;AAG9B,SAAsB,MAAM,CAC1B,GAAsB,EACtB,UAAyB,EACzB,cAAsB,EACtB,MAAkB,EAClB,KAAU;;;;;;oBAGN,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;oBACA,qBAAM,yCAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAA;;oBAAlF,UAAU,GAAG,SAAqE;oBACxF,KAAK,CAAC,0BAA0B,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;oBAElD,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;oBACT,QAAQ,GAAG,UAAU,CAAC,GAAG,CAC7B,UAAA,SAAS;wBACP,IAAM,GAAG,GAAG,WAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;wBACnC,SAAS,CAAC,OAAO,EAAE,CAAA;wBACnB,OAAO,GAAG,CAAA;oBACZ,CAAC,CACF,CAAA;oBACD,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;oBAE7B,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;wBACtC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,MAAM,EAAV,CAAU,CAAC,CAAC;wBAC5C,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;oBACP,KAAA,CAAA,KAAA,KAAK,CAAA,CAAC,IAAI,CAAA;oBAAC,qBAAM,YAAY,CAAC,IAAI,EAAE,EAAA;;oBAA7C,MAAM,GAAG,cAAW,SAAyB,EAAC;oBACpD,YAAY,CAAC,OAAO,EAAE,CAAA;oBAEhB,OAAO,GAAG,MAAM;yBACnB,GAAG,CAAC,UAAC,KAAK,EAAE,GAAG,IAAK,OAAA,CAAC,EAAE,KAAK,OAAA,EAAE,GAAG,KAAA,EAAE,CAAC,EAAhB,CAAgB,CAAC;yBACrC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,GAAG,cAAc,EAAxB,CAAwB,CAAC;yBACrC,GAAG,CAAC,UAAC,EAAO;4BAAL,YAAG;wBAAO,OAAA,GAAG;oBAAH,CAAG,CAAC,CAAA;oBAElB,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG;wBACrC,IAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;wBACtD,OAAO,IAAI,mBAAQ,CACjB,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACjB,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACjB,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACjB,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACpB,CAAA;oBAAA,CAAC,CAAC,CAAA;oBACG,aAAa,GAAG,OAAO;yBAC1B,GAAG,CAAC,UAAC,GAAG,EAAE,CAAC,IAAK,OAAA,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAA7C,CAA6C,CAAC,CAAA;oBAC3D,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,MAAM,CAAC,GAAG,CAAC,EAAX,CAAW,CAAC,CAAA;oBAElD,UAAU,GAAU,EAAE,CAAA;oBACtB,WAAW,GAAa,EAAE,CAAA;oBAC1B,MAAM,GAAc,EAAE,CAAA;oBAE1B,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;wBAE5B,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;wBACT,UAAU,GAAG,+CAAiB,CAClC,aAAa,EACb,cAAc,EACd,GAAG,EACH,KAAK,CACN,CAAA;wBACD,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;wBAElC,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,aAAa,CAAC,GAAG,CAAC,EAAlB,CAAkB,CAAC,CAAA;wBACtD,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,cAAc,CAAC,GAAG,CAAC,EAAnB,CAAmB,CAAC,CAAA;wBACxD,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,UAAC,GAAG,EAAE,CAAC;4BAC7B,OAAA,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAC,CAAC,EAAE,KAAK;gCAC1B,IAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA;gCACnD,OAAO,IAAI,mCAAK,CACd,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EACzE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAC5E,CAAA;4BACH,CAAC,CACF;wBAPD,CAOC,CACF,CAAA;qBACF;oBAED,QAAQ,CAAC,OAAO,CAAC,UAAA,CAAC;wBAChB,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;wBACnB,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;wBAClB,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;oBACpB,CAAC,CAAC,CAAA;oBAEF,sBAAO;4BACL,KAAK,EAAE,UAAU;4BACjB,MAAM,EAAE,WAAW;4BACnB,MAAM,QAAA;yBACP,EAAA;;;;CAEF;AAtFD,wBAsFC"} \ No newline at end of file diff --git a/build/commonjs/mtcnn/types.d.ts b/build/commonjs/mtcnn/types.d.ts deleted file mode 100644 index b7f89f6a..00000000 --- a/build/commonjs/mtcnn/types.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { FaceLandmarks5 } from '../classes/FaceLandmarks5'; -import { WithFaceDetection, WithFaceLandmarks } from '../factories'; -export declare type SharedParams = { - conv1: TfjsImageRecognitionBase.ConvParams; - prelu1_alpha: tf.Tensor1D; - conv2: TfjsImageRecognitionBase.ConvParams; - prelu2_alpha: tf.Tensor1D; - conv3: TfjsImageRecognitionBase.ConvParams; - prelu3_alpha: tf.Tensor1D; -}; -export declare type PNetParams = SharedParams & { - conv4_1: TfjsImageRecognitionBase.ConvParams; - conv4_2: TfjsImageRecognitionBase.ConvParams; -}; -export declare type RNetParams = SharedParams & { - fc1: TfjsImageRecognitionBase.FCParams; - prelu4_alpha: tf.Tensor1D; - fc2_1: TfjsImageRecognitionBase.FCParams; - fc2_2: TfjsImageRecognitionBase.FCParams; -}; -export declare type ONetParams = SharedParams & { - conv4: TfjsImageRecognitionBase.ConvParams; - prelu4_alpha: tf.Tensor1D; - fc1: TfjsImageRecognitionBase.FCParams; - prelu5_alpha: tf.Tensor1D; - fc2_1: TfjsImageRecognitionBase.FCParams; - fc2_2: TfjsImageRecognitionBase.FCParams; - fc2_3: TfjsImageRecognitionBase.FCParams; -}; -export declare type NetParams = { - pnet: PNetParams; - rnet: RNetParams; - onet: ONetParams; -}; -export declare type MtcnnResult = WithFaceLandmarks, FaceLandmarks5>; diff --git a/build/commonjs/mtcnn/types.js b/build/commonjs/mtcnn/types.js deleted file mode 100644 index 11e638d1..00000000 --- a/build/commonjs/mtcnn/types.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/types.js.map b/build/commonjs/mtcnn/types.js.map deleted file mode 100644 index a06d2049..00000000 --- a/build/commonjs/mtcnn/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/mtcnn/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/build/commonjs/resizeResults.d.ts b/build/commonjs/resizeResults.d.ts deleted file mode 100644 index e4fdddf3..00000000 --- a/build/commonjs/resizeResults.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { IDimensions } from 'tfjs-image-recognition-base'; -export declare function resizeResults(results: T, { width, height }: IDimensions): T; diff --git a/build/commonjs/resizeResults.js b/build/commonjs/resizeResults.js deleted file mode 100644 index 390affee..00000000 --- a/build/commonjs/resizeResults.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var FaceDetection_1 = require("./classes/FaceDetection"); -var FaceLandmarks_1 = require("./classes/FaceLandmarks"); -var WithFaceDetection_1 = require("./factories/WithFaceDetection"); -var WithFaceLandmarks_1 = require("./factories/WithFaceLandmarks"); -function resizeResults(results, _a) { - var width = _a.width, height = _a.height; - if (Array.isArray(results)) { - return results.map(function (obj) { return resizeResults(obj, { width: width, height: height }); }); - } - var hasLandmarks = results['unshiftedLandmarks'] && results['unshiftedLandmarks'] instanceof FaceLandmarks_1.FaceLandmarks; - var hasDetection = results['detection'] && results['detection'] instanceof FaceDetection_1.FaceDetection; - if (hasLandmarks) { - var resizedDetection = results['detection'].forSize(width, height); - var resizedLandmarks = results['unshiftedLandmarks'].forSize(resizedDetection.box.width, resizedDetection.box.height); - return WithFaceLandmarks_1.extendWithFaceLandmarks(WithFaceDetection_1.extendWithFaceDetection(results, resizedDetection), resizedLandmarks); - } - if (hasDetection) { - return WithFaceDetection_1.extendWithFaceDetection(results, results['detection'].forSize(width, height)); - } - if (results instanceof FaceLandmarks_1.FaceLandmarks || results instanceof FaceDetection_1.FaceDetection) { - return results.forSize(width, height); - } - return results; -} -exports.resizeResults = resizeResults; -//# sourceMappingURL=resizeResults.js.map \ No newline at end of file diff --git a/build/commonjs/resizeResults.js.map b/build/commonjs/resizeResults.js.map deleted file mode 100644 index 60738d43..00000000 --- a/build/commonjs/resizeResults.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"resizeResults.js","sourceRoot":"","sources":["../../src/resizeResults.ts"],"names":[],"mappings":";;AAEA,yDAAwD;AACxD,yDAAwD;AACxD,mEAAwE;AACxE,mEAAwE;AAExE,SAAgB,aAAa,CAAI,OAAU,EAAE,EAA8B;QAA5B,gBAAK,EAAE,kBAAM;IAE1D,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,aAAa,CAAC,GAAG,EAAE,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAC,EAArC,CAAqC,CAAa,CAAA;KAC7E;IAED,IAAM,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,oBAAoB,CAAC,YAAY,6BAAa,CAAA;IAC5G,IAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,YAAY,6BAAa,CAAA;IAE1F,IAAI,YAAY,EAAE;QAChB,IAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACpE,IAAM,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEvH,OAAO,2CAAuB,CAAC,2CAAuB,CAAC,OAAc,EAAE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,CAAA;KAC5G;IAED,IAAI,YAAY,EAAE;QAChB,OAAO,2CAAuB,CAAC,OAAc,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;KAC5F;IAED,IAAI,OAAO,YAAY,6BAAa,IAAI,OAAO,YAAY,6BAAa,EAAE;QACxE,OAAQ,OAAe,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;KAC/C;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAzBD,sCAyBC"} \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/SsdMobilenetv1.d.ts b/build/commonjs/ssdMobilenetv1/SsdMobilenetv1.d.ts deleted file mode 100644 index 5551a4e9..00000000 --- a/build/commonjs/ssdMobilenetv1/SsdMobilenetv1.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -import { ISsdMobilenetv1Options } from './SsdMobilenetv1Options'; -import { NetParams } from './types'; -export declare class SsdMobilenetv1 extends NeuralNetwork { - constructor(); - forwardInput(input: NetInput): { - boxes: tf.Tensor[]; - scores: tf.Tensor[]; - }; - forward(input: TNetInput): Promise<{ - boxes: tf.Tensor[]; - scores: tf.Tensor[]; - }>; - locateFaces(input: TNetInput, options?: ISsdMobilenetv1Options): Promise; - protected getDefaultModelName(): string; - protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; - protected extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; -} diff --git a/build/commonjs/ssdMobilenetv1/SsdMobilenetv1.js b/build/commonjs/ssdMobilenetv1/SsdMobilenetv1.js deleted file mode 100644 index ff02428f..00000000 --- a/build/commonjs/ssdMobilenetv1/SsdMobilenetv1.js +++ /dev/null @@ -1,108 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var FaceDetection_1 = require("../classes/FaceDetection"); -var extractParams_1 = require("./extractParams"); -var extractParamsFromWeigthMap_1 = require("./extractParamsFromWeigthMap"); -var mobileNetV1_1 = require("./mobileNetV1"); -var nonMaxSuppression_1 = require("./nonMaxSuppression"); -var outputLayer_1 = require("./outputLayer"); -var predictionLayer_1 = require("./predictionLayer"); -var SsdMobilenetv1Options_1 = require("./SsdMobilenetv1Options"); -var SsdMobilenetv1 = /** @class */ (function (_super) { - tslib_1.__extends(SsdMobilenetv1, _super); - function SsdMobilenetv1() { - return _super.call(this, 'SsdMobilenetv1') || this; - } - SsdMobilenetv1.prototype.forwardInput = function (input) { - var params = this.params; - if (!params) { - throw new Error('SsdMobilenetv1 - load model before inference'); - } - return tf.tidy(function () { - var batchTensor = input.toBatchTensor(512, false).toFloat(); - var x = tf.sub(tf.mul(batchTensor, tf.scalar(0.007843137718737125)), tf.scalar(1)); - var features = mobileNetV1_1.mobileNetV1(x, params.mobilenetv1); - var _a = predictionLayer_1.predictionLayer(features.out, features.conv11, params.prediction_layer), boxPredictions = _a.boxPredictions, classPredictions = _a.classPredictions; - return outputLayer_1.outputLayer(boxPredictions, classPredictions, params.output_layer); - }); - }; - SsdMobilenetv1.prototype.forward = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - SsdMobilenetv1.prototype.locateFaces = function (input, options) { - if (options === void 0) { options = {}; } - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a, maxResults, minConfidence, netInput, _b, _boxes, _scores, boxes, scores, i, scoresData, _c, _d, iouThreshold, indices, reshapedDims, inputSize, padX, padY, boxesData, results; - return tslib_1.__generator(this, function (_e) { - switch (_e.label) { - case 0: - _a = new SsdMobilenetv1Options_1.SsdMobilenetv1Options(options), maxResults = _a.maxResults, minConfidence = _a.minConfidence; - return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)]; - case 1: - netInput = _e.sent(); - _b = this.forwardInput(netInput), _boxes = _b.boxes, _scores = _b.scores; - boxes = _boxes[0]; - scores = _scores[0]; - for (i = 1; i < _boxes.length; i++) { - _boxes[i].dispose(); - _scores[i].dispose(); - } - _d = (_c = Array).from; - return [4 /*yield*/, scores.data()]; - case 2: - scoresData = _d.apply(_c, [_e.sent()]); - iouThreshold = 0.5; - indices = nonMaxSuppression_1.nonMaxSuppression(boxes, scoresData, maxResults, iouThreshold, minConfidence); - reshapedDims = netInput.getReshapedInputDimensions(0); - inputSize = netInput.inputSize; - padX = inputSize / reshapedDims.width; - padY = inputSize / reshapedDims.height; - boxesData = boxes.arraySync(); - results = indices - .map(function (idx) { - var _a = [ - Math.max(0, boxesData[idx][0]), - Math.min(1.0, boxesData[idx][2]) - ].map(function (val) { return val * padY; }), top = _a[0], bottom = _a[1]; - var _b = [ - Math.max(0, boxesData[idx][1]), - Math.min(1.0, boxesData[idx][3]) - ].map(function (val) { return val * padX; }), left = _b[0], right = _b[1]; - return new FaceDetection_1.FaceDetection(scoresData[idx], new tfjs_image_recognition_base_1.Rect(left, top, right - left, bottom - top), { - height: netInput.getInputHeight(0), - width: netInput.getInputWidth(0) - }); - }); - boxes.dispose(); - scores.dispose(); - return [2 /*return*/, results]; - } - }); - }); - }; - SsdMobilenetv1.prototype.getDefaultModelName = function () { - return 'ssd_mobilenetv1_model'; - }; - SsdMobilenetv1.prototype.extractParamsFromWeigthMap = function (weightMap) { - return extractParamsFromWeigthMap_1.extractParamsFromWeigthMap(weightMap); - }; - SsdMobilenetv1.prototype.extractParams = function (weights) { - return extractParams_1.extractParams(weights); - }; - return SsdMobilenetv1; -}(tfjs_image_recognition_base_1.NeuralNetwork)); -exports.SsdMobilenetv1 = SsdMobilenetv1; -//# sourceMappingURL=SsdMobilenetv1.js.map \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/SsdMobilenetv1.js.map b/build/commonjs/ssdMobilenetv1/SsdMobilenetv1.js.map deleted file mode 100644 index 5aab1ee9..00000000 --- a/build/commonjs/ssdMobilenetv1/SsdMobilenetv1.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"SsdMobilenetv1.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/SsdMobilenetv1.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/SsdMobilenetv1Options.d.ts b/build/commonjs/ssdMobilenetv1/SsdMobilenetv1Options.d.ts deleted file mode 100644 index bf75021c..00000000 --- a/build/commonjs/ssdMobilenetv1/SsdMobilenetv1Options.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export interface ISsdMobilenetv1Options { - minConfidence?: number; - maxResults?: number; -} -export declare class SsdMobilenetv1Options { - protected _name: string; - private _minConfidence; - private _maxResults; - constructor({ minConfidence, maxResults }?: ISsdMobilenetv1Options); - readonly minConfidence: number; - readonly maxResults: number; -} diff --git a/build/commonjs/ssdMobilenetv1/SsdMobilenetv1Options.js b/build/commonjs/ssdMobilenetv1/SsdMobilenetv1Options.js deleted file mode 100644 index e8e7be01..00000000 --- a/build/commonjs/ssdMobilenetv1/SsdMobilenetv1Options.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var SsdMobilenetv1Options = /** @class */ (function () { - function SsdMobilenetv1Options(_a) { - var _b = _a === void 0 ? {} : _a, minConfidence = _b.minConfidence, maxResults = _b.maxResults; - this._name = 'SsdMobilenetv1Options'; - this._minConfidence = minConfidence || 0.5; - this._maxResults = maxResults || 100; - if (typeof this._minConfidence !== 'number' || this._minConfidence <= 0 || this._minConfidence >= 1) { - throw new Error(this._name + " - expected minConfidence to be a number between 0 and 1"); - } - if (typeof this._maxResults !== 'number') { - throw new Error(this._name + " - expected maxResults to be a number"); - } - } - Object.defineProperty(SsdMobilenetv1Options.prototype, "minConfidence", { - get: function () { return this._minConfidence; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SsdMobilenetv1Options.prototype, "maxResults", { - get: function () { return this._maxResults; }, - enumerable: true, - configurable: true - }); - return SsdMobilenetv1Options; -}()); -exports.SsdMobilenetv1Options = SsdMobilenetv1Options; -//# sourceMappingURL=SsdMobilenetv1Options.js.map \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/SsdMobilenetv1Options.js.map b/build/commonjs/ssdMobilenetv1/SsdMobilenetv1Options.js.map deleted file mode 100644 index 03c196c8..00000000 --- a/build/commonjs/ssdMobilenetv1/SsdMobilenetv1Options.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"SsdMobilenetv1Options.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/SsdMobilenetv1Options.ts"],"names":[],"mappings":";;AAKA;IAME,+BAAY,EAA0D;YAA1D,4BAA0D,EAAxD,gCAAa,EAAE,0BAAU;QAL7B,UAAK,GAAW,uBAAuB,CAAA;QAM/C,IAAI,CAAC,cAAc,GAAG,aAAa,IAAI,GAAG,CAAA;QAC1C,IAAI,CAAC,WAAW,GAAG,UAAU,IAAI,GAAG,CAAA;QAEpC,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,EAAE;YACnG,MAAM,IAAI,KAAK,CAAI,IAAI,CAAC,KAAK,6DAA0D,CAAC,CAAA;SACzF;QAED,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE;YACxC,MAAM,IAAI,KAAK,CAAI,IAAI,CAAC,KAAK,0CAAuC,CAAC,CAAA;SACtE;IACH,CAAC;IAED,sBAAI,gDAAa;aAAjB,cAA8B,OAAO,IAAI,CAAC,cAAc,CAAA,CAAC,CAAC;;;OAAA;IAC1D,sBAAI,6CAAU;aAAd,cAA2B,OAAO,IAAI,CAAC,WAAW,CAAA,CAAC,CAAC;;;OAAA;IACtD,4BAAC;AAAD,CAAC,AArBD,IAqBC;AArBY,sDAAqB"} \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/boxPredictionLayer.d.ts b/build/commonjs/ssdMobilenetv1/boxPredictionLayer.d.ts deleted file mode 100644 index bed8cd15..00000000 --- a/build/commonjs/ssdMobilenetv1/boxPredictionLayer.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { BoxPredictionParams } from './types'; -export declare function boxPredictionLayer(x: tf.Tensor4D, params: BoxPredictionParams): { - boxPredictionEncoding: tf.Tensor; - classPrediction: tf.Tensor; -}; diff --git a/build/commonjs/ssdMobilenetv1/boxPredictionLayer.js b/build/commonjs/ssdMobilenetv1/boxPredictionLayer.js deleted file mode 100644 index f6d98856..00000000 --- a/build/commonjs/ssdMobilenetv1/boxPredictionLayer.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -function boxPredictionLayer(x, params) { - return tf.tidy(function () { - var batchSize = x.shape[0]; - var boxPredictionEncoding = tf.reshape(tfjs_image_recognition_base_1.TfjsImageRecognitionBase.convLayer(x, params.box_encoding_predictor), [batchSize, -1, 1, 4]); - var classPrediction = tf.reshape(tfjs_image_recognition_base_1.TfjsImageRecognitionBase.convLayer(x, params.class_predictor), [batchSize, -1, 3]); - return { - boxPredictionEncoding: boxPredictionEncoding, - classPrediction: classPrediction - }; - }); -} -exports.boxPredictionLayer = boxPredictionLayer; -//# sourceMappingURL=boxPredictionLayer.js.map \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/boxPredictionLayer.js.map b/build/commonjs/ssdMobilenetv1/boxPredictionLayer.js.map deleted file mode 100644 index 8b17f5f2..00000000 --- a/build/commonjs/ssdMobilenetv1/boxPredictionLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"boxPredictionLayer.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/boxPredictionLayer.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAC5C,2EAAuE;AAKvE,SAAgB,kBAAkB,CAChC,CAAc,EACd,MAA2B;IAE3B,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAE5B,IAAM,qBAAqB,GAAG,EAAE,CAAC,OAAO,CACtC,sDAAwB,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,sBAAsB,CAAC,EACpE,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACtB,CAAA;QACD,IAAM,eAAe,GAAG,EAAE,CAAC,OAAO,CAChC,sDAAwB,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,EAC7D,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CACnB,CAAA;QAED,OAAO;YACL,qBAAqB,uBAAA;YACrB,eAAe,iBAAA;SAChB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAtBD,gDAsBC"} \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/extractParams.d.ts b/build/commonjs/ssdMobilenetv1/extractParams.d.ts deleted file mode 100644 index 14d45d2b..00000000 --- a/build/commonjs/ssdMobilenetv1/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/commonjs/ssdMobilenetv1/extractParams.js b/build/commonjs/ssdMobilenetv1/extractParams.js deleted file mode 100644 index 7d8ad86b..00000000 --- a/build/commonjs/ssdMobilenetv1/extractParams.js +++ /dev/null @@ -1,162 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -function extractorsFactory(extractWeights, paramMappings) { - function extractDepthwiseConvParams(numChannels, mappedPrefix) { - var filters = tf.tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]); - var batch_norm_scale = tf.tensor1d(extractWeights(numChannels)); - var batch_norm_offset = tf.tensor1d(extractWeights(numChannels)); - var batch_norm_mean = tf.tensor1d(extractWeights(numChannels)); - var batch_norm_variance = tf.tensor1d(extractWeights(numChannels)); - paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/batch_norm_scale" }, { paramPath: mappedPrefix + "/batch_norm_offset" }, { paramPath: mappedPrefix + "/batch_norm_mean" }, { paramPath: mappedPrefix + "/batch_norm_variance" }); - return { - filters: filters, - batch_norm_scale: batch_norm_scale, - batch_norm_offset: batch_norm_offset, - batch_norm_mean: batch_norm_mean, - batch_norm_variance: batch_norm_variance - }; - } - function extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, isPointwiseConv) { - var filters = tf.tensor4d(extractWeights(channelsIn * channelsOut * filterSize * filterSize), [filterSize, filterSize, channelsIn, channelsOut]); - var bias = tf.tensor1d(extractWeights(channelsOut)); - paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/" + (isPointwiseConv ? 'batch_norm_offset' : 'bias') }); - return { filters: filters, bias: bias }; - } - function extractPointwiseConvParams(channelsIn, channelsOut, filterSize, mappedPrefix) { - var _a = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true), filters = _a.filters, bias = _a.bias; - return { - filters: filters, - batch_norm_offset: bias - }; - } - function extractConvPairParams(channelsIn, channelsOut, mappedPrefix) { - var depthwise_conv = extractDepthwiseConvParams(channelsIn, mappedPrefix + "/depthwise_conv"); - var pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, mappedPrefix + "/pointwise_conv"); - return { depthwise_conv: depthwise_conv, pointwise_conv: pointwise_conv }; - } - function extractMobilenetV1Params() { - var conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0'); - var conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1'); - var conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2'); - var conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3'); - var conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4'); - var conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5'); - var conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6'); - var conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7'); - var conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8'); - var conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9'); - var conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10'); - var conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11'); - var conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12'); - var conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13'); - return { - conv_0: conv_0, - conv_1: conv_1, - conv_2: conv_2, - conv_3: conv_3, - conv_4: conv_4, - conv_5: conv_5, - conv_6: conv_6, - conv_7: conv_7, - conv_8: conv_8, - conv_9: conv_9, - conv_10: conv_10, - conv_11: conv_11, - conv_12: conv_12, - conv_13: conv_13 - }; - } - function extractPredictionLayerParams() { - var conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0'); - var conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1'); - var conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2'); - var conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3'); - var conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4'); - var conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5'); - var conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6'); - var conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7'); - var box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor'); - var class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor'); - var box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor'); - var class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor'); - var box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor'); - var class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor'); - var box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor'); - var class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor'); - var box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor'); - var class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor'); - var box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor'); - var class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor'); - var box_predictor_0 = { - box_encoding_predictor: box_encoding_0_predictor, - class_predictor: class_predictor_0 - }; - var box_predictor_1 = { - box_encoding_predictor: box_encoding_1_predictor, - class_predictor: class_predictor_1 - }; - var box_predictor_2 = { - box_encoding_predictor: box_encoding_2_predictor, - class_predictor: class_predictor_2 - }; - var box_predictor_3 = { - box_encoding_predictor: box_encoding_3_predictor, - class_predictor: class_predictor_3 - }; - var box_predictor_4 = { - box_encoding_predictor: box_encoding_4_predictor, - class_predictor: class_predictor_4 - }; - var box_predictor_5 = { - box_encoding_predictor: box_encoding_5_predictor, - class_predictor: class_predictor_5 - }; - return { - conv_0: conv_0, - conv_1: conv_1, - conv_2: conv_2, - conv_3: conv_3, - conv_4: conv_4, - conv_5: conv_5, - conv_6: conv_6, - conv_7: conv_7, - box_predictor_0: box_predictor_0, - box_predictor_1: box_predictor_1, - box_predictor_2: box_predictor_2, - box_predictor_3: box_predictor_3, - box_predictor_4: box_predictor_4, - box_predictor_5: box_predictor_5 - }; - } - return { - extractMobilenetV1Params: extractMobilenetV1Params, - extractPredictionLayerParams: extractPredictionLayerParams - }; -} -function extractParams(weights) { - var paramMappings = []; - var _a = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var _b = extractorsFactory(extractWeights, paramMappings), extractMobilenetV1Params = _b.extractMobilenetV1Params, extractPredictionLayerParams = _b.extractPredictionLayerParams; - var mobilenetv1 = extractMobilenetV1Params(); - var prediction_layer = extractPredictionLayerParams(); - var extra_dim = tf.tensor3d(extractWeights(5118 * 4), [1, 5118, 4]); - var output_layer = { - extra_dim: extra_dim - }; - paramMappings.push({ paramPath: 'output_layer/extra_dim' }); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { - params: { - mobilenetv1: mobilenetv1, - prediction_layer: prediction_layer, - output_layer: output_layer - }, - paramMappings: paramMappings - }; -} -exports.extractParams = extractParams; -//# sourceMappingURL=extractParams.js.map \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/extractParams.js.map b/build/commonjs/ssdMobilenetv1/extractParams.js.map deleted file mode 100644 index 482117f1..00000000 --- a/build/commonjs/ssdMobilenetv1/extractParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/extractParams.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/extractParamsFromWeigthMap.d.ts b/build/commonjs/ssdMobilenetv1/extractParamsFromWeigthMap.d.ts deleted file mode 100644 index 7bf5a66d..00000000 --- a/build/commonjs/ssdMobilenetv1/extractParamsFromWeigthMap.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/commonjs/ssdMobilenetv1/extractParamsFromWeigthMap.js b/build/commonjs/ssdMobilenetv1/extractParamsFromWeigthMap.js deleted file mode 100644 index 295ac3a5..00000000 --- a/build/commonjs/ssdMobilenetv1/extractParamsFromWeigthMap.js +++ /dev/null @@ -1,102 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -function extractorsFactory(weightMap, paramMappings) { - var extractWeightEntry = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings); - function extractPointwiseConvParams(prefix, idx, mappedPrefix) { - var filters = extractWeightEntry(prefix + "/Conv2d_" + idx + "_pointwise/weights", 4, mappedPrefix + "/filters"); - var batch_norm_offset = extractWeightEntry(prefix + "/Conv2d_" + idx + "_pointwise/convolution_bn_offset", 1, mappedPrefix + "/batch_norm_offset"); - return { filters: filters, batch_norm_offset: batch_norm_offset }; - } - function extractConvPairParams(idx) { - var mappedPrefix = "mobilenetv1/conv_" + idx; - var prefixDepthwiseConv = "MobilenetV1/Conv2d_" + idx + "_depthwise"; - var mappedPrefixDepthwiseConv = mappedPrefix + "/depthwise_conv"; - var mappedPrefixPointwiseConv = mappedPrefix + "/pointwise_conv"; - var filters = extractWeightEntry(prefixDepthwiseConv + "/depthwise_weights", 4, mappedPrefixDepthwiseConv + "/filters"); - var batch_norm_scale = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/gamma", 1, mappedPrefixDepthwiseConv + "/batch_norm_scale"); - var batch_norm_offset = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/beta", 1, mappedPrefixDepthwiseConv + "/batch_norm_offset"); - var batch_norm_mean = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/moving_mean", 1, mappedPrefixDepthwiseConv + "/batch_norm_mean"); - var batch_norm_variance = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/moving_variance", 1, mappedPrefixDepthwiseConv + "/batch_norm_variance"); - return { - depthwise_conv: { - filters: filters, - batch_norm_scale: batch_norm_scale, - batch_norm_offset: batch_norm_offset, - batch_norm_mean: batch_norm_mean, - batch_norm_variance: batch_norm_variance - }, - pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv) - }; - } - function extractMobilenetV1Params() { - return { - conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'), - conv_1: extractConvPairParams(1), - conv_2: extractConvPairParams(2), - conv_3: extractConvPairParams(3), - conv_4: extractConvPairParams(4), - conv_5: extractConvPairParams(5), - conv_6: extractConvPairParams(6), - conv_7: extractConvPairParams(7), - conv_8: extractConvPairParams(8), - conv_9: extractConvPairParams(9), - conv_10: extractConvPairParams(10), - conv_11: extractConvPairParams(11), - conv_12: extractConvPairParams(12), - conv_13: extractConvPairParams(13) - }; - } - function extractConvParams(prefix, mappedPrefix) { - var filters = extractWeightEntry(prefix + "/weights", 4, mappedPrefix + "/filters"); - var bias = extractWeightEntry(prefix + "/biases", 1, mappedPrefix + "/bias"); - return { filters: filters, bias: bias }; - } - function extractBoxPredictorParams(idx) { - var box_encoding_predictor = extractConvParams("Prediction/BoxPredictor_" + idx + "/BoxEncodingPredictor", "prediction_layer/box_predictor_" + idx + "/box_encoding_predictor"); - var class_predictor = extractConvParams("Prediction/BoxPredictor_" + idx + "/ClassPredictor", "prediction_layer/box_predictor_" + idx + "/class_predictor"); - return { box_encoding_predictor: box_encoding_predictor, class_predictor: class_predictor }; - } - function extractPredictionLayerParams() { - return { - conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'), - conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'), - conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'), - conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'), - conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'), - conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'), - conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'), - conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'), - box_predictor_0: extractBoxPredictorParams(0), - box_predictor_1: extractBoxPredictorParams(1), - box_predictor_2: extractBoxPredictorParams(2), - box_predictor_3: extractBoxPredictorParams(3), - box_predictor_4: extractBoxPredictorParams(4), - box_predictor_5: extractBoxPredictorParams(5) - }; - } - return { - extractMobilenetV1Params: extractMobilenetV1Params, - extractPredictionLayerParams: extractPredictionLayerParams - }; -} -function extractParamsFromWeigthMap(weightMap) { - var paramMappings = []; - var _a = extractorsFactory(weightMap, paramMappings), extractMobilenetV1Params = _a.extractMobilenetV1Params, extractPredictionLayerParams = _a.extractPredictionLayerParams; - var extra_dim = weightMap['Output/extra_dim']; - paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' }); - if (!tfjs_image_recognition_base_1.isTensor3D(extra_dim)) { - throw new Error("expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have " + extra_dim); - } - var params = { - mobilenetv1: extractMobilenetV1Params(), - prediction_layer: extractPredictionLayerParams(), - output_layer: { - extra_dim: extra_dim - } - }; - tfjs_image_recognition_base_1.TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: params, paramMappings: paramMappings }; -} -exports.extractParamsFromWeigthMap = extractParamsFromWeigthMap; -//# sourceMappingURL=extractParamsFromWeigthMap.js.map \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/extractParamsFromWeigthMap.js.map b/build/commonjs/ssdMobilenetv1/extractParamsFromWeigthMap.js.map deleted file mode 100644 index 3649d067..00000000 --- a/build/commonjs/ssdMobilenetv1/extractParamsFromWeigthMap.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParamsFromWeigthMap.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/extractParamsFromWeigthMap.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/index.d.ts b/build/commonjs/ssdMobilenetv1/index.d.ts deleted file mode 100644 index b83f4792..00000000 --- a/build/commonjs/ssdMobilenetv1/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { SsdMobilenetv1 } from './SsdMobilenetv1'; -export * from './SsdMobilenetv1'; -export * from './SsdMobilenetv1Options'; -export declare function createSsdMobilenetv1(weights: Float32Array): SsdMobilenetv1; -export declare function createFaceDetectionNet(weights: Float32Array): SsdMobilenetv1; -export declare class FaceDetectionNet extends SsdMobilenetv1 { -} diff --git a/build/commonjs/ssdMobilenetv1/index.js b/build/commonjs/ssdMobilenetv1/index.js deleted file mode 100644 index 648d3667..00000000 --- a/build/commonjs/ssdMobilenetv1/index.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var SsdMobilenetv1_1 = require("./SsdMobilenetv1"); -tslib_1.__exportStar(require("./SsdMobilenetv1"), exports); -tslib_1.__exportStar(require("./SsdMobilenetv1Options"), exports); -function createSsdMobilenetv1(weights) { - var net = new SsdMobilenetv1_1.SsdMobilenetv1(); - net.extractWeights(weights); - return net; -} -exports.createSsdMobilenetv1 = createSsdMobilenetv1; -function createFaceDetectionNet(weights) { - return createSsdMobilenetv1(weights); -} -exports.createFaceDetectionNet = createFaceDetectionNet; -// alias for backward compatibily -var FaceDetectionNet = /** @class */ (function (_super) { - tslib_1.__extends(FaceDetectionNet, _super); - function FaceDetectionNet() { - return _super !== null && _super.apply(this, arguments) || this; - } - return FaceDetectionNet; -}(SsdMobilenetv1_1.SsdMobilenetv1)); -exports.FaceDetectionNet = FaceDetectionNet; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/index.js.map b/build/commonjs/ssdMobilenetv1/index.js.map deleted file mode 100644 index 996f9483..00000000 --- a/build/commonjs/ssdMobilenetv1/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/index.ts"],"names":[],"mappings":";;;AAAA,mDAAkD;AAElD,2DAAiC;AACjC,kEAAwC;AAExC,SAAgB,oBAAoB,CAAC,OAAqB;IACxD,IAAM,GAAG,GAAG,IAAI,+BAAc,EAAE,CAAA;IAChC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC;AAJD,oDAIC;AAED,SAAgB,sBAAsB,CAAC,OAAqB;IAC1D,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAA;AACtC,CAAC;AAFD,wDAEC;AAED,iCAAiC;AACjC;IAAsC,4CAAc;IAApD;;IAAsD,CAAC;IAAD,uBAAC;AAAD,CAAC,AAAvD,CAAsC,+BAAc,GAAG;AAA1C,4CAAgB"} \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/mobileNetV1.d.ts b/build/commonjs/ssdMobilenetv1/mobileNetV1.d.ts deleted file mode 100644 index 05f5c5fe..00000000 --- a/build/commonjs/ssdMobilenetv1/mobileNetV1.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { MobileNetV1 } from './types'; -export declare function mobileNetV1(x: tf.Tensor4D, params: MobileNetV1.Params): { - out: tf.Tensor; - conv11: any; -}; diff --git a/build/commonjs/ssdMobilenetv1/mobileNetV1.js b/build/commonjs/ssdMobilenetv1/mobileNetV1.js deleted file mode 100644 index 36839e82..00000000 --- a/build/commonjs/ssdMobilenetv1/mobileNetV1.js +++ /dev/null @@ -1,54 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -var pointwiseConvLayer_1 = require("./pointwiseConvLayer"); -var epsilon = 0.0010000000474974513; -function depthwiseConvLayer(x, params, strides) { - return tf.tidy(function () { - var out = tf.depthwiseConv2d(x, params.filters, strides, 'same'); - out = tf.batchNorm(out, params.batch_norm_mean, params.batch_norm_variance, params.batch_norm_offset, params.batch_norm_scale, epsilon); - return tf.clipByValue(out, 0, 6); - }); -} -function getStridesForLayerIdx(layerIdx) { - return [2, 4, 6, 12].some(function (idx) { return idx === layerIdx; }) ? [2, 2] : [1, 1]; -} -function mobileNetV1(x, params) { - return tf.tidy(function () { - var conv11 = null; - var out = pointwiseConvLayer_1.pointwiseConvLayer(x, params.conv_0, [2, 2]); - var convPairParams = [ - params.conv_1, - params.conv_2, - params.conv_3, - params.conv_4, - params.conv_5, - params.conv_6, - params.conv_7, - params.conv_8, - params.conv_9, - params.conv_10, - params.conv_11, - params.conv_12, - params.conv_13 - ]; - convPairParams.forEach(function (param, i) { - var layerIdx = i + 1; - var depthwiseConvStrides = getStridesForLayerIdx(layerIdx); - out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides); - out = pointwiseConvLayer_1.pointwiseConvLayer(out, param.pointwise_conv, [1, 1]); - if (layerIdx === 11) { - conv11 = out; - } - }); - if (conv11 === null) { - throw new Error('mobileNetV1 - output of conv layer 11 is null'); - } - return { - out: out, - conv11: conv11 - }; - }); -} -exports.mobileNetV1 = mobileNetV1; -//# sourceMappingURL=mobileNetV1.js.map \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/mobileNetV1.js.map b/build/commonjs/ssdMobilenetv1/mobileNetV1.js.map deleted file mode 100644 index 261e152b..00000000 --- a/build/commonjs/ssdMobilenetv1/mobileNetV1.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mobileNetV1.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/mobileNetV1.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAE5C,2DAA0D;AAG1D,IAAM,OAAO,GAAG,qBAAqB,CAAA;AAErC,SAAS,kBAAkB,CACzB,CAAc,EACd,MAAuC,EACvC,OAAyB;IAEzB,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAChE,GAAG,GAAG,EAAE,CAAC,SAAS,CAChB,GAAG,EACH,MAAM,CAAC,eAAe,EACtB,MAAM,CAAC,mBAAmB,EAC1B,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,gBAAgB,EACvB,OAAO,CACR,CAAA;QACD,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAElC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,KAAK,QAAQ,EAAhB,CAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACtE,CAAC;AAED,SAAgB,WAAW,CAAC,CAAc,EAAE,MAA0B;IACpE,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,MAAM,GAAG,IAAI,CAAA;QACjB,IAAI,GAAG,GAAG,uCAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEtD,IAAM,cAAc,GAAG;YACrB,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,OAAO;YACd,MAAM,CAAC,OAAO;YACd,MAAM,CAAC,OAAO;YACd,MAAM,CAAC,OAAO;SACf,CAAA;QAED,cAAc,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,CAAC;YAC9B,IAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAA;YACtB,IAAM,oBAAoB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAA;YAC5D,GAAG,GAAG,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAA;YACzE,GAAG,GAAG,uCAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC3D,IAAI,QAAQ,KAAK,EAAE,EAAE;gBACnB,MAAM,GAAG,GAAG,CAAA;aACb;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;SACjE;QAED,OAAO;YACL,GAAG,KAAA;YACH,MAAM,EAAE,MAAa;SACtB,CAAA;IAEH,CAAC,CAAC,CAAA;AACJ,CAAC;AA1CD,kCA0CC"} \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/nonMaxSuppression.d.ts b/build/commonjs/ssdMobilenetv1/nonMaxSuppression.d.ts deleted file mode 100644 index 6b215a26..00000000 --- a/build/commonjs/ssdMobilenetv1/nonMaxSuppression.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export declare function nonMaxSuppression(boxes: tf.Tensor2D, scores: number[], maxOutputSize: number, iouThreshold: number, scoreThreshold: number): number[]; diff --git a/build/commonjs/ssdMobilenetv1/nonMaxSuppression.js b/build/commonjs/ssdMobilenetv1/nonMaxSuppression.js deleted file mode 100644 index 1847c306..00000000 --- a/build/commonjs/ssdMobilenetv1/nonMaxSuppression.js +++ /dev/null @@ -1,57 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function nonMaxSuppression(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold) { - var numBoxes = boxes.shape[0]; - var outputSize = Math.min(maxOutputSize, numBoxes); - var candidates = scores - .map(function (score, boxIndex) { return ({ score: score, boxIndex: boxIndex }); }) - .filter(function (c) { return c.score > scoreThreshold; }) - .sort(function (c1, c2) { return c2.score - c1.score; }); - var suppressFunc = function (x) { return x <= iouThreshold ? 1 : 0; }; - var selected = []; - candidates.forEach(function (c) { - if (selected.length >= outputSize) { - return; - } - var originalScore = c.score; - for (var j = selected.length - 1; j >= 0; --j) { - var iou = IOU(boxes, c.boxIndex, selected[j]); - if (iou === 0.0) { - continue; - } - c.score *= suppressFunc(iou); - if (c.score <= scoreThreshold) { - break; - } - } - if (originalScore === c.score) { - selected.push(c.boxIndex); - } - }); - return selected; -} -exports.nonMaxSuppression = nonMaxSuppression; -function IOU(boxes, i, j) { - var boxesData = boxes.arraySync(); - var yminI = Math.min(boxesData[i][0], boxesData[i][2]); - var xminI = Math.min(boxesData[i][1], boxesData[i][3]); - var ymaxI = Math.max(boxesData[i][0], boxesData[i][2]); - var xmaxI = Math.max(boxesData[i][1], boxesData[i][3]); - var yminJ = Math.min(boxesData[j][0], boxesData[j][2]); - var xminJ = Math.min(boxesData[j][1], boxesData[j][3]); - var ymaxJ = Math.max(boxesData[j][0], boxesData[j][2]); - var xmaxJ = Math.max(boxesData[j][1], boxesData[j][3]); - var areaI = (ymaxI - yminI) * (xmaxI - xminI); - var areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ); - if (areaI <= 0 || areaJ <= 0) { - return 0.0; - } - var intersectionYmin = Math.max(yminI, yminJ); - var intersectionXmin = Math.max(xminI, xminJ); - var intersectionYmax = Math.min(ymaxI, ymaxJ); - var intersectionXmax = Math.min(xmaxI, xmaxJ); - var intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0) * - Math.max(intersectionXmax - intersectionXmin, 0.0); - return intersectionArea / (areaI + areaJ - intersectionArea); -} -//# sourceMappingURL=nonMaxSuppression.js.map \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/nonMaxSuppression.js.map b/build/commonjs/ssdMobilenetv1/nonMaxSuppression.js.map deleted file mode 100644 index b655a6a4..00000000 --- a/build/commonjs/ssdMobilenetv1/nonMaxSuppression.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"nonMaxSuppression.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/nonMaxSuppression.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/outputLayer.d.ts b/build/commonjs/ssdMobilenetv1/outputLayer.d.ts deleted file mode 100644 index 9ce8d135..00000000 --- a/build/commonjs/ssdMobilenetv1/outputLayer.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { OutputLayerParams } from './types'; -export declare function outputLayer(boxPredictions: tf.Tensor4D, classPredictions: tf.Tensor4D, params: OutputLayerParams): { - boxes: tf.Tensor[]; - scores: tf.Tensor[]; -}; diff --git a/build/commonjs/ssdMobilenetv1/outputLayer.js b/build/commonjs/ssdMobilenetv1/outputLayer.js deleted file mode 100644 index 63ec147c..00000000 --- a/build/commonjs/ssdMobilenetv1/outputLayer.js +++ /dev/null @@ -1,50 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -function getCenterCoordinatesAndSizesLayer(x) { - var vec = tf.unstack(tf.transpose(x, [1, 0])); - var sizes = [ - tf.sub(vec[2], vec[0]), - tf.sub(vec[3], vec[1]) - ]; - var centers = [ - tf.add(vec[0], tf.div(sizes[0], tf.scalar(2))), - tf.add(vec[1], tf.div(sizes[1], tf.scalar(2))) - ]; - return { - sizes: sizes, - centers: centers - }; -} -function decodeBoxesLayer(x0, x1) { - var _a = getCenterCoordinatesAndSizesLayer(x0), sizes = _a.sizes, centers = _a.centers; - var vec = tf.unstack(tf.transpose(x1, [1, 0])); - var div0_out = tf.div(tf.mul(tf.exp(tf.div(vec[2], tf.scalar(5))), sizes[0]), tf.scalar(2)); - var add0_out = tf.add(tf.mul(tf.div(vec[0], tf.scalar(10)), sizes[0]), centers[0]); - var div1_out = tf.div(tf.mul(tf.exp(tf.div(vec[3], tf.scalar(5))), sizes[1]), tf.scalar(2)); - var add1_out = tf.add(tf.mul(tf.div(vec[1], tf.scalar(10)), sizes[1]), centers[1]); - return tf.transpose(tf.stack([ - tf.sub(add0_out, div0_out), - tf.sub(add1_out, div1_out), - tf.add(add0_out, div0_out), - tf.add(add1_out, div1_out) - ]), [1, 0]); -} -function outputLayer(boxPredictions, classPredictions, params) { - return tf.tidy(function () { - var batchSize = boxPredictions.shape[0]; - var boxes = decodeBoxesLayer(tf.reshape(tf.tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]), tf.reshape(boxPredictions, [-1, 4])); - boxes = tf.reshape(boxes, [batchSize, (boxes.shape[0] / batchSize), 4]); - var scoresAndClasses = tf.sigmoid(tf.slice(classPredictions, [0, 0, 1], [-1, -1, -1])); - var scores = tf.slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]); - scores = tf.reshape(scores, [batchSize, scores.shape[1]]); - var boxesByBatch = tf.unstack(boxes); - var scoresByBatch = tf.unstack(scores); - return { - boxes: boxesByBatch, - scores: scoresByBatch - }; - }); -} -exports.outputLayer = outputLayer; -//# sourceMappingURL=outputLayer.js.map \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/outputLayer.js.map b/build/commonjs/ssdMobilenetv1/outputLayer.js.map deleted file mode 100644 index 138ef0bd..00000000 --- a/build/commonjs/ssdMobilenetv1/outputLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"outputLayer.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/outputLayer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/pointwiseConvLayer.d.ts b/build/commonjs/ssdMobilenetv1/pointwiseConvLayer.d.ts deleted file mode 100644 index f7a92d55..00000000 --- a/build/commonjs/ssdMobilenetv1/pointwiseConvLayer.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { PointwiseConvParams } from './types'; -export declare function pointwiseConvLayer(x: tf.Tensor4D, params: PointwiseConvParams, strides: [number, number]): tf.Tensor; diff --git a/build/commonjs/ssdMobilenetv1/pointwiseConvLayer.js b/build/commonjs/ssdMobilenetv1/pointwiseConvLayer.js deleted file mode 100644 index 71ace7c1..00000000 --- a/build/commonjs/ssdMobilenetv1/pointwiseConvLayer.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -function pointwiseConvLayer(x, params, strides) { - return tf.tidy(function () { - var out = tf.conv2d(x, params.filters, strides, 'same'); - out = tf.add(out, params.batch_norm_offset); - return tf.clipByValue(out, 0, 6); - }); -} -exports.pointwiseConvLayer = pointwiseConvLayer; -//# sourceMappingURL=pointwiseConvLayer.js.map \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/pointwiseConvLayer.js.map b/build/commonjs/ssdMobilenetv1/pointwiseConvLayer.js.map deleted file mode 100644 index 817ac5be..00000000 --- a/build/commonjs/ssdMobilenetv1/pointwiseConvLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"pointwiseConvLayer.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/pointwiseConvLayer.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAI5C,SAAgB,kBAAkB,CAChC,CAAc,EACd,MAA2B,EAC3B,OAAyB;IAEzB,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QACvD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAA;QAC3C,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAElC,CAAC,CAAC,CAAA;AACJ,CAAC;AAZD,gDAYC"} \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/predictionLayer.d.ts b/build/commonjs/ssdMobilenetv1/predictionLayer.d.ts deleted file mode 100644 index 3f136062..00000000 --- a/build/commonjs/ssdMobilenetv1/predictionLayer.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { PredictionLayerParams } from './types'; -export declare function predictionLayer(x: tf.Tensor4D, conv11: tf.Tensor4D, params: PredictionLayerParams): { - boxPredictions: tf.Tensor; - classPredictions: tf.Tensor; -}; diff --git a/build/commonjs/ssdMobilenetv1/predictionLayer.js b/build/commonjs/ssdMobilenetv1/predictionLayer.js deleted file mode 100644 index 33847b68..00000000 --- a/build/commonjs/ssdMobilenetv1/predictionLayer.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -var boxPredictionLayer_1 = require("./boxPredictionLayer"); -var pointwiseConvLayer_1 = require("./pointwiseConvLayer"); -function predictionLayer(x, conv11, params) { - return tf.tidy(function () { - var conv0 = pointwiseConvLayer_1.pointwiseConvLayer(x, params.conv_0, [1, 1]); - var conv1 = pointwiseConvLayer_1.pointwiseConvLayer(conv0, params.conv_1, [2, 2]); - var conv2 = pointwiseConvLayer_1.pointwiseConvLayer(conv1, params.conv_2, [1, 1]); - var conv3 = pointwiseConvLayer_1.pointwiseConvLayer(conv2, params.conv_3, [2, 2]); - var conv4 = pointwiseConvLayer_1.pointwiseConvLayer(conv3, params.conv_4, [1, 1]); - var conv5 = pointwiseConvLayer_1.pointwiseConvLayer(conv4, params.conv_5, [2, 2]); - var conv6 = pointwiseConvLayer_1.pointwiseConvLayer(conv5, params.conv_6, [1, 1]); - var conv7 = pointwiseConvLayer_1.pointwiseConvLayer(conv6, params.conv_7, [2, 2]); - var boxPrediction0 = boxPredictionLayer_1.boxPredictionLayer(conv11, params.box_predictor_0); - var boxPrediction1 = boxPredictionLayer_1.boxPredictionLayer(x, params.box_predictor_1); - var boxPrediction2 = boxPredictionLayer_1.boxPredictionLayer(conv1, params.box_predictor_2); - var boxPrediction3 = boxPredictionLayer_1.boxPredictionLayer(conv3, params.box_predictor_3); - var boxPrediction4 = boxPredictionLayer_1.boxPredictionLayer(conv5, params.box_predictor_4); - var boxPrediction5 = boxPredictionLayer_1.boxPredictionLayer(conv7, params.box_predictor_5); - var boxPredictions = tf.concat([ - boxPrediction0.boxPredictionEncoding, - boxPrediction1.boxPredictionEncoding, - boxPrediction2.boxPredictionEncoding, - boxPrediction3.boxPredictionEncoding, - boxPrediction4.boxPredictionEncoding, - boxPrediction5.boxPredictionEncoding - ], 1); - var classPredictions = tf.concat([ - boxPrediction0.classPrediction, - boxPrediction1.classPrediction, - boxPrediction2.classPrediction, - boxPrediction3.classPrediction, - boxPrediction4.classPrediction, - boxPrediction5.classPrediction - ], 1); - return { - boxPredictions: boxPredictions, - classPredictions: classPredictions - }; - }); -} -exports.predictionLayer = predictionLayer; -//# sourceMappingURL=predictionLayer.js.map \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/predictionLayer.js.map b/build/commonjs/ssdMobilenetv1/predictionLayer.js.map deleted file mode 100644 index 432be637..00000000 --- a/build/commonjs/ssdMobilenetv1/predictionLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"predictionLayer.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/predictionLayer.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAE5C,2DAA0D;AAC1D,2DAA0D;AAG1D,SAAgB,eAAe,CAC7B,CAAc,EACd,MAAmB,EACnB,MAA6B;IAE7B,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAM,KAAK,GAAG,uCAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1D,IAAM,KAAK,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAE9D,IAAM,cAAc,GAAG,uCAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACzE,IAAM,cAAc,GAAG,uCAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACpE,IAAM,cAAc,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACxE,IAAM,cAAc,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACxE,IAAM,cAAc,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACxE,IAAM,cAAc,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QAExE,IAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;YAC/B,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;SACrC,EAAE,CAAC,CAAgB,CAAA;QAEpB,IAAM,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC;YACjC,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;SAC/B,EAAE,CAAC,CAAgB,CAAA;QAEpB,OAAO;YACL,cAAc,gBAAA;YACd,gBAAgB,kBAAA;SACjB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AA9CD,0CA8CC"} \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/types.d.ts b/build/commonjs/ssdMobilenetv1/types.d.ts deleted file mode 100644 index c303dc6a..00000000 --- a/build/commonjs/ssdMobilenetv1/types.d.ts +++ /dev/null @@ -1,63 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export declare type PointwiseConvParams = { - filters: tf.Tensor4D; - batch_norm_offset: tf.Tensor1D; -}; -export declare namespace MobileNetV1 { - type DepthwiseConvParams = { - filters: tf.Tensor4D; - batch_norm_scale: tf.Tensor1D; - batch_norm_offset: tf.Tensor1D; - batch_norm_mean: tf.Tensor1D; - batch_norm_variance: tf.Tensor1D; - }; - type ConvPairParams = { - depthwise_conv: DepthwiseConvParams; - pointwise_conv: PointwiseConvParams; - }; - type Params = { - conv_0: PointwiseConvParams; - conv_1: ConvPairParams; - conv_2: ConvPairParams; - conv_3: ConvPairParams; - conv_4: ConvPairParams; - conv_5: ConvPairParams; - conv_6: ConvPairParams; - conv_7: ConvPairParams; - conv_8: ConvPairParams; - conv_9: ConvPairParams; - conv_10: ConvPairParams; - conv_11: ConvPairParams; - conv_12: ConvPairParams; - conv_13: ConvPairParams; - }; -} -export declare type BoxPredictionParams = { - box_encoding_predictor: TfjsImageRecognitionBase.ConvParams; - class_predictor: TfjsImageRecognitionBase.ConvParams; -}; -export declare type PredictionLayerParams = { - conv_0: PointwiseConvParams; - conv_1: PointwiseConvParams; - conv_2: PointwiseConvParams; - conv_3: PointwiseConvParams; - conv_4: PointwiseConvParams; - conv_5: PointwiseConvParams; - conv_6: PointwiseConvParams; - conv_7: PointwiseConvParams; - box_predictor_0: BoxPredictionParams; - box_predictor_1: BoxPredictionParams; - box_predictor_2: BoxPredictionParams; - box_predictor_3: BoxPredictionParams; - box_predictor_4: BoxPredictionParams; - box_predictor_5: BoxPredictionParams; -}; -export declare type OutputLayerParams = { - extra_dim: tf.Tensor3D; -}; -export declare type NetParams = { - mobilenetv1: MobileNetV1.Params; - prediction_layer: PredictionLayerParams; - output_layer: OutputLayerParams; -}; diff --git a/build/commonjs/ssdMobilenetv1/types.js b/build/commonjs/ssdMobilenetv1/types.js deleted file mode 100644 index 11e638d1..00000000 --- a/build/commonjs/ssdMobilenetv1/types.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/types.js.map b/build/commonjs/ssdMobilenetv1/types.js.map deleted file mode 100644 index 977d82a6..00000000 --- a/build/commonjs/ssdMobilenetv1/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/build/commonjs/tinyFaceDetector/TinyFaceDetector.d.ts b/build/commonjs/tinyFaceDetector/TinyFaceDetector.d.ts deleted file mode 100644 index 5cef3f56..00000000 --- a/build/commonjs/tinyFaceDetector/TinyFaceDetector.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { Point, TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes'; -export declare class TinyFaceDetector extends TfjsImageRecognitionBase.TinyYolov2 { - constructor(); - readonly anchors: Point[]; - locateFaces(input: TNetInput, forwardParams: TfjsImageRecognitionBase.ITinyYolov2Options): Promise; - protected getDefaultModelName(): string; - protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: TfjsImageRecognitionBase.TinyYolov2NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; - }; -} diff --git a/build/commonjs/tinyFaceDetector/TinyFaceDetector.js b/build/commonjs/tinyFaceDetector/TinyFaceDetector.js deleted file mode 100644 index 1c889fb8..00000000 --- a/build/commonjs/tinyFaceDetector/TinyFaceDetector.js +++ /dev/null @@ -1,52 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var classes_1 = require("../classes"); -var const_1 = require("./const"); -var TinyFaceDetector = /** @class */ (function (_super) { - tslib_1.__extends(TinyFaceDetector, _super); - function TinyFaceDetector() { - var _this = this; - var config = { - withSeparableConvs: true, - iouThreshold: const_1.IOU_THRESHOLD, - classes: ['face'], - anchors: const_1.BOX_ANCHORS, - meanRgb: const_1.MEAN_RGB, - isFirstLayerConv2d: true, - filterSizes: [3, 16, 32, 64, 128, 256, 512] - }; - _this = _super.call(this, config) || this; - return _this; - } - Object.defineProperty(TinyFaceDetector.prototype, "anchors", { - get: function () { - return this.config.anchors; - }, - enumerable: true, - configurable: true - }); - TinyFaceDetector.prototype.locateFaces = function (input, forwardParams) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var objectDetections; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.detect(input, forwardParams)]; - case 1: - objectDetections = _a.sent(); - return [2 /*return*/, objectDetections.map(function (det) { return new classes_1.FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }); })]; - } - }); - }); - }; - TinyFaceDetector.prototype.getDefaultModelName = function () { - return 'tiny_face_detector_model'; - }; - TinyFaceDetector.prototype.extractParamsFromWeigthMap = function (weightMap) { - return _super.prototype.extractParamsFromWeigthMap.call(this, weightMap); - }; - return TinyFaceDetector; -}(tfjs_image_recognition_base_1.TfjsImageRecognitionBase.TinyYolov2)); -exports.TinyFaceDetector = TinyFaceDetector; -//# sourceMappingURL=TinyFaceDetector.js.map \ No newline at end of file diff --git a/build/commonjs/tinyFaceDetector/TinyFaceDetector.js.map b/build/commonjs/tinyFaceDetector/TinyFaceDetector.js.map deleted file mode 100644 index 06969501..00000000 --- a/build/commonjs/tinyFaceDetector/TinyFaceDetector.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TinyFaceDetector.js","sourceRoot":"","sources":["../../../src/tinyFaceDetector/TinyFaceDetector.ts"],"names":[],"mappings":";;;AACA,2EAAyF;AAEzF,sCAA2C;AAC3C,iCAA+D;AAE/D;IAAsC,4CAAmC;IAEvE;QAAA,iBAYC;QAXC,IAAM,MAAM,GAAG;YACb,kBAAkB,EAAE,IAAI;YACxB,YAAY,EAAE,qBAAa;YAC3B,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,OAAO,EAAE,mBAAW;YACpB,OAAO,EAAE,gBAAQ;YACjB,kBAAkB,EAAE,IAAI;YACxB,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;SAC5C,CAAA;QAED,QAAA,kBAAM,MAAM,CAAC,SAAA;;IACf,CAAC;IAED,sBAAW,qCAAO;aAAlB;YACE,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QAC5B,CAAC;;;OAAA;IAEY,sCAAW,GAAxB,UAAyB,KAAgB,EAAE,aAA0D;;;;;4BAC1E,qBAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,EAAA;;wBAA1D,gBAAgB,GAAG,SAAuC;wBAChE,sBAAO,gBAAgB,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,IAAI,uBAAa,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,EAAjG,CAAiG,CAAC,EAAA;;;;KACtI;IAES,8CAAmB,GAA7B;QACE,OAAO,0BAA0B,CAAA;IACnC,CAAC;IAES,qDAA0B,GAApC,UAAqC,SAA4B;QAC/D,OAAO,iBAAM,0BAA0B,YAAC,SAAS,CAAC,CAAA;IACpD,CAAC;IACH,uBAAC;AAAD,CAAC,AAhCD,CAAsC,sDAAwB,CAAC,UAAU,GAgCxE;AAhCY,4CAAgB"} \ No newline at end of file diff --git a/build/commonjs/tinyFaceDetector/TinyFaceDetectorOptions.d.ts b/build/commonjs/tinyFaceDetector/TinyFaceDetectorOptions.d.ts deleted file mode 100644 index c367c5fa..00000000 --- a/build/commonjs/tinyFaceDetector/TinyFaceDetectorOptions.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export interface ITinyFaceDetectorOptions extends TfjsImageRecognitionBase.ITinyYolov2Options { -} -export declare class TinyFaceDetectorOptions extends TfjsImageRecognitionBase.TinyYolov2Options { - protected _name: string; -} diff --git a/build/commonjs/tinyFaceDetector/TinyFaceDetectorOptions.js b/build/commonjs/tinyFaceDetector/TinyFaceDetectorOptions.js deleted file mode 100644 index adca75bf..00000000 --- a/build/commonjs/tinyFaceDetector/TinyFaceDetectorOptions.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var TinyFaceDetectorOptions = /** @class */ (function (_super) { - tslib_1.__extends(TinyFaceDetectorOptions, _super); - function TinyFaceDetectorOptions() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this._name = 'TinyFaceDetectorOptions'; - return _this; - } - return TinyFaceDetectorOptions; -}(tfjs_image_recognition_base_1.TfjsImageRecognitionBase.TinyYolov2Options)); -exports.TinyFaceDetectorOptions = TinyFaceDetectorOptions; -//# sourceMappingURL=TinyFaceDetectorOptions.js.map \ No newline at end of file diff --git a/build/commonjs/tinyFaceDetector/TinyFaceDetectorOptions.js.map b/build/commonjs/tinyFaceDetector/TinyFaceDetectorOptions.js.map deleted file mode 100644 index 664abe06..00000000 --- a/build/commonjs/tinyFaceDetector/TinyFaceDetectorOptions.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TinyFaceDetectorOptions.js","sourceRoot":"","sources":["../../../src/tinyFaceDetector/TinyFaceDetectorOptions.ts"],"names":[],"mappings":";;;AAAA,2EAAuE;AAIvE;IAA6C,mDAA0C;IAAvF;QAAA,qEAEC;QADW,WAAK,GAAW,yBAAyB,CAAA;;IACrD,CAAC;IAAD,8BAAC;AAAD,CAAC,AAFD,CAA6C,sDAAwB,CAAC,iBAAiB,GAEtF;AAFY,0DAAuB"} \ No newline at end of file diff --git a/build/commonjs/tinyFaceDetector/const.d.ts b/build/commonjs/tinyFaceDetector/const.d.ts deleted file mode 100644 index 11a84e48..00000000 --- a/build/commonjs/tinyFaceDetector/const.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Point } from 'tfjs-image-recognition-base'; -export declare const IOU_THRESHOLD = 0.4; -export declare const BOX_ANCHORS: Point[]; -export declare const MEAN_RGB: [number, number, number]; diff --git a/build/commonjs/tinyFaceDetector/const.js b/build/commonjs/tinyFaceDetector/const.js deleted file mode 100644 index 0cd3f8cc..00000000 --- a/build/commonjs/tinyFaceDetector/const.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -exports.IOU_THRESHOLD = 0.4; -exports.BOX_ANCHORS = [ - new tfjs_image_recognition_base_1.Point(1.603231, 2.094468), - new tfjs_image_recognition_base_1.Point(6.041143, 7.080126), - new tfjs_image_recognition_base_1.Point(2.882459, 3.518061), - new tfjs_image_recognition_base_1.Point(4.266906, 5.178857), - new tfjs_image_recognition_base_1.Point(9.041765, 10.66308) -]; -exports.MEAN_RGB = [117.001, 114.697, 97.404]; -//# sourceMappingURL=const.js.map \ No newline at end of file diff --git a/build/commonjs/tinyFaceDetector/const.js.map b/build/commonjs/tinyFaceDetector/const.js.map deleted file mode 100644 index 017ff38f..00000000 --- a/build/commonjs/tinyFaceDetector/const.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../src/tinyFaceDetector/const.ts"],"names":[],"mappings":";;AAAA,2EAAoD;AAEvC,QAAA,aAAa,GAAG,GAAG,CAAA;AAEnB,QAAA,WAAW,GAAG;IACzB,IAAI,mCAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,mCAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,mCAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,mCAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,mCAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC9B,CAAA;AAEY,QAAA,QAAQ,GAA6B,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA"} \ No newline at end of file diff --git a/build/commonjs/tinyFaceDetector/index.d.ts b/build/commonjs/tinyFaceDetector/index.d.ts deleted file mode 100644 index cde93ca0..00000000 --- a/build/commonjs/tinyFaceDetector/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { TinyFaceDetector } from './TinyFaceDetector'; -export * from './TinyFaceDetector'; -export * from './TinyFaceDetectorOptions'; -export declare function createTinyFaceDetector(weights: Float32Array): TinyFaceDetector; diff --git a/build/commonjs/tinyFaceDetector/index.js b/build/commonjs/tinyFaceDetector/index.js deleted file mode 100644 index 714c0e6c..00000000 --- a/build/commonjs/tinyFaceDetector/index.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TinyFaceDetector_1 = require("./TinyFaceDetector"); -tslib_1.__exportStar(require("./TinyFaceDetector"), exports); -tslib_1.__exportStar(require("./TinyFaceDetectorOptions"), exports); -function createTinyFaceDetector(weights) { - var net = new TinyFaceDetector_1.TinyFaceDetector(); - net.extractWeights(weights); - return net; -} -exports.createTinyFaceDetector = createTinyFaceDetector; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/commonjs/tinyFaceDetector/index.js.map b/build/commonjs/tinyFaceDetector/index.js.map deleted file mode 100644 index 723fa8c0..00000000 --- a/build/commonjs/tinyFaceDetector/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tinyFaceDetector/index.ts"],"names":[],"mappings":";;;AAAA,uDAAsD;AAEtD,6DAAmC;AACnC,oEAA0C;AAE1C,SAAgB,sBAAsB,CAAC,OAAqB;IAC1D,IAAM,GAAG,GAAG,IAAI,mCAAgB,EAAE,CAAA;IAClC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC;AAJD,wDAIC"} \ No newline at end of file diff --git a/build/commonjs/tinyYolov2/TinyYolov2.d.ts b/build/commonjs/tinyYolov2/TinyYolov2.d.ts deleted file mode 100644 index c4a286ef..00000000 --- a/build/commonjs/tinyYolov2/TinyYolov2.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { Point, TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes'; -export declare class TinyYolov2 extends TfjsImageRecognitionBase.TinyYolov2 { - constructor(withSeparableConvs?: boolean); - readonly withSeparableConvs: boolean; - readonly anchors: Point[]; - locateFaces(input: TNetInput, forwardParams: TfjsImageRecognitionBase.ITinyYolov2Options): Promise; - protected getDefaultModelName(): string; - protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: TfjsImageRecognitionBase.TinyYolov2NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; - }; -} diff --git a/build/commonjs/tinyYolov2/TinyYolov2.js b/build/commonjs/tinyYolov2/TinyYolov2.js deleted file mode 100644 index ae502d17..00000000 --- a/build/commonjs/tinyYolov2/TinyYolov2.js +++ /dev/null @@ -1,64 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var classes_1 = require("../classes"); -var const_1 = require("./const"); -var TinyYolov2 = /** @class */ (function (_super) { - tslib_1.__extends(TinyYolov2, _super); - function TinyYolov2(withSeparableConvs) { - if (withSeparableConvs === void 0) { withSeparableConvs = true; } - var _this = this; - var config = Object.assign({}, { - withSeparableConvs: withSeparableConvs, - iouThreshold: const_1.IOU_THRESHOLD, - classes: ['face'] - }, withSeparableConvs - ? { - anchors: const_1.BOX_ANCHORS_SEPARABLE, - meanRgb: const_1.MEAN_RGB_SEPARABLE - } - : { - anchors: const_1.BOX_ANCHORS, - withClassScores: true - }); - _this = _super.call(this, config) || this; - return _this; - } - Object.defineProperty(TinyYolov2.prototype, "withSeparableConvs", { - get: function () { - return this.config.withSeparableConvs; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TinyYolov2.prototype, "anchors", { - get: function () { - return this.config.anchors; - }, - enumerable: true, - configurable: true - }); - TinyYolov2.prototype.locateFaces = function (input, forwardParams) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var objectDetections; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.detect(input, forwardParams)]; - case 1: - objectDetections = _a.sent(); - return [2 /*return*/, objectDetections.map(function (det) { return new classes_1.FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }); })]; - } - }); - }); - }; - TinyYolov2.prototype.getDefaultModelName = function () { - return this.withSeparableConvs ? const_1.DEFAULT_MODEL_NAME_SEPARABLE_CONV : const_1.DEFAULT_MODEL_NAME; - }; - TinyYolov2.prototype.extractParamsFromWeigthMap = function (weightMap) { - return _super.prototype.extractParamsFromWeigthMap.call(this, weightMap); - }; - return TinyYolov2; -}(tfjs_image_recognition_base_1.TfjsImageRecognitionBase.TinyYolov2)); -exports.TinyYolov2 = TinyYolov2; -//# sourceMappingURL=TinyYolov2.js.map \ No newline at end of file diff --git a/build/commonjs/tinyYolov2/TinyYolov2.js.map b/build/commonjs/tinyYolov2/TinyYolov2.js.map deleted file mode 100644 index 76b40263..00000000 --- a/build/commonjs/tinyYolov2/TinyYolov2.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TinyYolov2.js","sourceRoot":"","sources":["../../../src/tinyYolov2/TinyYolov2.ts"],"names":[],"mappings":";;;AACA,2EAAyF;AAEzF,sCAA2C;AAC3C,iCAOiB;AAEjB;IAAgC,sCAAmC;IAEjE,oBAAY,kBAAkC;QAAlC,mCAAA,EAAA,yBAAkC;QAA9C,iBAkBC;QAjBC,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;YAC/B,kBAAkB,oBAAA;YAClB,YAAY,EAAE,qBAAa;YAC3B,OAAO,EAAE,CAAC,MAAM,CAAC;SAClB,EACD,kBAAkB;YAChB,CAAC,CAAC;gBACA,OAAO,EAAE,6BAAqB;gBAC9B,OAAO,EAAE,0BAAkB;aAC5B;YACD,CAAC,CAAC;gBACA,OAAO,EAAE,mBAAW;gBACpB,eAAe,EAAE,IAAI;aACtB,CACF,CAAA;QAED,QAAA,kBAAM,MAAM,CAAC,SAAA;;IACf,CAAC;IAED,sBAAW,0CAAkB;aAA7B;YACE,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAA;QACvC,CAAC;;;OAAA;IAED,sBAAW,+BAAO;aAAlB;YACE,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QAC5B,CAAC;;;OAAA;IAEY,gCAAW,GAAxB,UAAyB,KAAgB,EAAE,aAA0D;;;;;4BAC1E,qBAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,EAAA;;wBAA1D,gBAAgB,GAAG,SAAuC;wBAChE,sBAAO,gBAAgB,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,IAAI,uBAAa,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,EAAjG,CAAiG,CAAC,EAAA;;;;KACtI;IAES,wCAAmB,GAA7B;QACE,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,yCAAiC,CAAC,CAAC,CAAC,0BAAkB,CAAA;IACzF,CAAC;IAES,+CAA0B,GAApC,UAAqC,SAA4B;QAC/D,OAAO,iBAAM,0BAA0B,YAAC,SAAS,CAAC,CAAA;IACpD,CAAC;IACH,iBAAC;AAAD,CAAC,AA1CD,CAAgC,sDAAwB,CAAC,UAAU,GA0ClE;AA1CY,gCAAU"} \ No newline at end of file diff --git a/build/commonjs/tinyYolov2/const.d.ts b/build/commonjs/tinyYolov2/const.d.ts deleted file mode 100644 index e64e2478..00000000 --- a/build/commonjs/tinyYolov2/const.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Point } from 'tfjs-image-recognition-base'; -export declare const IOU_THRESHOLD = 0.4; -export declare const BOX_ANCHORS: Point[]; -export declare const BOX_ANCHORS_SEPARABLE: Point[]; -export declare const MEAN_RGB_SEPARABLE: [number, number, number]; -export declare const DEFAULT_MODEL_NAME = "tiny_yolov2_model"; -export declare const DEFAULT_MODEL_NAME_SEPARABLE_CONV = "tiny_yolov2_separable_conv_model"; diff --git a/build/commonjs/tinyYolov2/const.js b/build/commonjs/tinyYolov2/const.js deleted file mode 100644 index 72df0e30..00000000 --- a/build/commonjs/tinyYolov2/const.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -exports.IOU_THRESHOLD = 0.4; -exports.BOX_ANCHORS = [ - new tfjs_image_recognition_base_1.Point(0.738768, 0.874946), - new tfjs_image_recognition_base_1.Point(2.42204, 2.65704), - new tfjs_image_recognition_base_1.Point(4.30971, 7.04493), - new tfjs_image_recognition_base_1.Point(10.246, 4.59428), - new tfjs_image_recognition_base_1.Point(12.6868, 11.8741) -]; -exports.BOX_ANCHORS_SEPARABLE = [ - new tfjs_image_recognition_base_1.Point(1.603231, 2.094468), - new tfjs_image_recognition_base_1.Point(6.041143, 7.080126), - new tfjs_image_recognition_base_1.Point(2.882459, 3.518061), - new tfjs_image_recognition_base_1.Point(4.266906, 5.178857), - new tfjs_image_recognition_base_1.Point(9.041765, 10.66308) -]; -exports.MEAN_RGB_SEPARABLE = [117.001, 114.697, 97.404]; -exports.DEFAULT_MODEL_NAME = 'tiny_yolov2_model'; -exports.DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model'; -//# sourceMappingURL=const.js.map \ No newline at end of file diff --git a/build/commonjs/tinyYolov2/const.js.map b/build/commonjs/tinyYolov2/const.js.map deleted file mode 100644 index b0583b69..00000000 --- a/build/commonjs/tinyYolov2/const.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../src/tinyYolov2/const.ts"],"names":[],"mappings":";;AAAA,2EAAoD;AAEvC,QAAA,aAAa,GAAG,GAAG,CAAA;AAEnB,QAAA,WAAW,GAAG;IACzB,IAAI,mCAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,mCAAK,CAAC,OAAO,EAAE,OAAO,CAAC;IAC3B,IAAI,mCAAK,CAAC,OAAO,EAAE,OAAO,CAAC;IAC3B,IAAI,mCAAK,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1B,IAAI,mCAAK,CAAC,OAAO,EAAE,OAAO,CAAC;CAC5B,CAAA;AAEY,QAAA,qBAAqB,GAAG;IACnC,IAAI,mCAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,mCAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,mCAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,mCAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,mCAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC9B,CAAA;AAEY,QAAA,kBAAkB,GAA6B,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAEzE,QAAA,kBAAkB,GAAG,mBAAmB,CAAA;AACxC,QAAA,iCAAiC,GAAG,kCAAkC,CAAA"} \ No newline at end of file diff --git a/build/commonjs/tinyYolov2/index.d.ts b/build/commonjs/tinyYolov2/index.d.ts deleted file mode 100644 index 5721a203..00000000 --- a/build/commonjs/tinyYolov2/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { TinyYolov2 } from './TinyYolov2'; -export { TinyYolov2 }; -export declare function createTinyYolov2(weights: Float32Array, withSeparableConvs?: boolean): TinyYolov2; diff --git a/build/commonjs/tinyYolov2/index.js b/build/commonjs/tinyYolov2/index.js deleted file mode 100644 index 83c4ac92..00000000 --- a/build/commonjs/tinyYolov2/index.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var TinyYolov2_1 = require("./TinyYolov2"); -exports.TinyYolov2 = TinyYolov2_1.TinyYolov2; -function createTinyYolov2(weights, withSeparableConvs) { - if (withSeparableConvs === void 0) { withSeparableConvs = true; } - var net = new TinyYolov2_1.TinyYolov2(withSeparableConvs); - net.extractWeights(weights); - return net; -} -exports.createTinyYolov2 = createTinyYolov2; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/commonjs/tinyYolov2/index.js.map b/build/commonjs/tinyYolov2/index.js.map deleted file mode 100644 index 13c5f54e..00000000 --- a/build/commonjs/tinyYolov2/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tinyYolov2/index.ts"],"names":[],"mappings":";;AAAA,2CAA0C;AAEjC,qBAFA,uBAAU,CAEA;AAEnB,SAAgB,gBAAgB,CAAC,OAAqB,EAAE,kBAAkC;IAAlC,mCAAA,EAAA,yBAAkC;IACxF,IAAM,GAAG,GAAG,IAAI,uBAAU,CAAC,kBAAkB,CAAC,CAAA;IAC9C,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC;AAJD,4CAIC"} \ No newline at end of file diff --git a/build/es6/classes/FaceDetection.d.ts b/build/es6/classes/FaceDetection.d.ts deleted file mode 100644 index 0fed6f3f..00000000 --- a/build/es6/classes/FaceDetection.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Box, IDimensions, ObjectDetection, Rect } from 'tfjs-image-recognition-base'; -export interface IFaceDetecion { - score: number; - box: Box; -} -export declare class FaceDetection extends ObjectDetection implements IFaceDetecion { - constructor(score: number, relativeBox: Rect, imageDims: IDimensions); - forSize(width: number, height: number): FaceDetection; -} diff --git a/build/es6/classes/FaceDetection.js b/build/es6/classes/FaceDetection.js deleted file mode 100644 index 1484ffbd..00000000 --- a/build/es6/classes/FaceDetection.js +++ /dev/null @@ -1,14 +0,0 @@ -import * as tslib_1 from "tslib"; -import { ObjectDetection } from 'tfjs-image-recognition-base'; -var FaceDetection = /** @class */ (function (_super) { - tslib_1.__extends(FaceDetection, _super); - function FaceDetection(score, relativeBox, imageDims) { - return _super.call(this, score, score, '', relativeBox, imageDims) || this; - } - FaceDetection.prototype.forSize = function (width, height) { - return _super.prototype.forSize.call(this, width, height); - }; - return FaceDetection; -}(ObjectDetection)); -export { FaceDetection }; -//# sourceMappingURL=FaceDetection.js.map \ No newline at end of file diff --git a/build/es6/classes/FaceDetection.js.map b/build/es6/classes/FaceDetection.js.map deleted file mode 100644 index e5db7e4d..00000000 --- a/build/es6/classes/FaceDetection.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceDetection.js","sourceRoot":"","sources":["../../../src/classes/FaceDetection.ts"],"names":[],"mappings":";AAAA,OAAO,EAAoB,eAAe,EAAQ,MAAM,6BAA6B,CAAC;AAOtF;IAAmC,yCAAe;IAChD,uBACE,KAAa,EACb,WAAiB,EACjB,SAAsB;eAEtB,kBAAM,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC;IACjD,CAAC;IAEM,+BAAO,GAAd,UAAe,KAAa,EAAE,MAAc;QAC1C,OAAO,iBAAM,OAAO,YAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACrC,CAAC;IACH,oBAAC;AAAD,CAAC,AAZD,CAAmC,eAAe,GAYjD"} \ No newline at end of file diff --git a/build/es6/classes/FaceLandmarks.d.ts b/build/es6/classes/FaceLandmarks.d.ts deleted file mode 100644 index 48ea7c81..00000000 --- a/build/es6/classes/FaceLandmarks.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Dimensions, IDimensions, Point, Rect } from 'tfjs-image-recognition-base'; -import { FaceDetection } from './FaceDetection'; -export interface IFaceLandmarks { - positions: Point[]; - shift: Point; -} -export declare class FaceLandmarks implements IFaceLandmarks { - protected _shift: Point; - protected _positions: Point[]; - protected _imgDims: Dimensions; - constructor(relativeFaceLandmarkPositions: Point[], imgDims: IDimensions, shift?: Point); - readonly shift: Point; - readonly imageWidth: number; - readonly imageHeight: number; - readonly positions: Point[]; - readonly relativePositions: Point[]; - forSize(width: number, height: number): T; - shiftBy(x: number, y: number): T; - shiftByPoint(pt: Point): T; - /** - * Aligns the face landmarks after face detection from the relative positions of the faces - * bounding box, or it's current shift. This function should be used to align the face images - * after face detection has been performed, before they are passed to the face recognition net. - * This will make the computed face descriptor more accurate. - * - * @param detection (optional) The bounding box of the face or the face detection result. If - * no argument was passed the position of the face landmarks are assumed to be relative to - * it's current shift. - * @returns The bounding box of the aligned face. - */ - align(detection?: FaceDetection | Rect): Rect; - protected getRefPointsForAlignment(): Point[]; -} diff --git a/build/es6/classes/FaceLandmarks.js b/build/es6/classes/FaceLandmarks.js deleted file mode 100644 index 08676418..00000000 --- a/build/es6/classes/FaceLandmarks.js +++ /dev/null @@ -1,87 +0,0 @@ -import { Dimensions, getCenterPoint, Point, Rect } from 'tfjs-image-recognition-base'; -import { FaceDetection } from './FaceDetection'; -// face alignment constants -var relX = 0.5; -var relY = 0.43; -var relScale = 0.45; -var FaceLandmarks = /** @class */ (function () { - function FaceLandmarks(relativeFaceLandmarkPositions, imgDims, shift) { - if (shift === void 0) { shift = new Point(0, 0); } - var width = imgDims.width, height = imgDims.height; - this._imgDims = new Dimensions(width, height); - this._shift = shift; - this._positions = relativeFaceLandmarkPositions.map(function (pt) { return pt.mul(new Point(width, height)).add(shift); }); - } - Object.defineProperty(FaceLandmarks.prototype, "shift", { - get: function () { return new Point(this._shift.x, this._shift.y); }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceLandmarks.prototype, "imageWidth", { - get: function () { return this._imgDims.width; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceLandmarks.prototype, "imageHeight", { - get: function () { return this._imgDims.height; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceLandmarks.prototype, "positions", { - get: function () { return this._positions; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceLandmarks.prototype, "relativePositions", { - get: function () { - var _this = this; - return this._positions.map(function (pt) { return pt.sub(_this._shift).div(new Point(_this.imageWidth, _this.imageHeight)); }); - }, - enumerable: true, - configurable: true - }); - FaceLandmarks.prototype.forSize = function (width, height) { - return new this.constructor(this.relativePositions, { width: width, height: height }); - }; - FaceLandmarks.prototype.shiftBy = function (x, y) { - return new this.constructor(this.relativePositions, this._imgDims, new Point(x, y)); - }; - FaceLandmarks.prototype.shiftByPoint = function (pt) { - return this.shiftBy(pt.x, pt.y); - }; - /** - * Aligns the face landmarks after face detection from the relative positions of the faces - * bounding box, or it's current shift. This function should be used to align the face images - * after face detection has been performed, before they are passed to the face recognition net. - * This will make the computed face descriptor more accurate. - * - * @param detection (optional) The bounding box of the face or the face detection result. If - * no argument was passed the position of the face landmarks are assumed to be relative to - * it's current shift. - * @returns The bounding box of the aligned face. - */ - FaceLandmarks.prototype.align = function (detection) { - if (detection) { - var box = detection instanceof FaceDetection - ? detection.box.floor() - : detection; - return this.shiftBy(box.x, box.y).align(); - } - var centers = this.getRefPointsForAlignment(); - var leftEyeCenter = centers[0], rightEyeCenter = centers[1], mouthCenter = centers[2]; - var distToMouth = function (pt) { return mouthCenter.sub(pt).magnitude(); }; - var eyeToMouthDist = (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2; - var size = Math.floor(eyeToMouthDist / relScale); - var refPoint = getCenterPoint(centers); - // TODO: pad in case rectangle is out of image bounds - var x = Math.floor(Math.max(0, refPoint.x - (relX * size))); - var y = Math.floor(Math.max(0, refPoint.y - (relY * size))); - return new Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y)); - }; - FaceLandmarks.prototype.getRefPointsForAlignment = function () { - throw new Error('getRefPointsForAlignment not implemented by base class'); - }; - return FaceLandmarks; -}()); -export { FaceLandmarks }; -//# sourceMappingURL=FaceLandmarks.js.map \ No newline at end of file diff --git a/build/es6/classes/FaceLandmarks.js.map b/build/es6/classes/FaceLandmarks.js.map deleted file mode 100644 index 73758b9c..00000000 --- a/build/es6/classes/FaceLandmarks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceLandmarks.js","sourceRoot":"","sources":["../../../src/classes/FaceLandmarks.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/classes/FaceLandmarks5.d.ts b/build/es6/classes/FaceLandmarks5.d.ts deleted file mode 100644 index 554ce2f1..00000000 --- a/build/es6/classes/FaceLandmarks5.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Point } from 'tfjs-image-recognition-base'; -import { FaceLandmarks } from './FaceLandmarks'; -export declare class FaceLandmarks5 extends FaceLandmarks { - protected getRefPointsForAlignment(): Point[]; -} diff --git a/build/es6/classes/FaceLandmarks5.js b/build/es6/classes/FaceLandmarks5.js deleted file mode 100644 index 16b1a4e4..00000000 --- a/build/es6/classes/FaceLandmarks5.js +++ /dev/null @@ -1,20 +0,0 @@ -import * as tslib_1 from "tslib"; -import { getCenterPoint } from 'tfjs-image-recognition-base'; -import { FaceLandmarks } from './FaceLandmarks'; -var FaceLandmarks5 = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmarks5, _super); - function FaceLandmarks5() { - return _super !== null && _super.apply(this, arguments) || this; - } - FaceLandmarks5.prototype.getRefPointsForAlignment = function () { - var pts = this.positions; - return [ - pts[0], - pts[1], - getCenterPoint([pts[3], pts[4]]) - ]; - }; - return FaceLandmarks5; -}(FaceLandmarks)); -export { FaceLandmarks5 }; -//# sourceMappingURL=FaceLandmarks5.js.map \ No newline at end of file diff --git a/build/es6/classes/FaceLandmarks5.js.map b/build/es6/classes/FaceLandmarks5.js.map deleted file mode 100644 index 062b0cb9..00000000 --- a/build/es6/classes/FaceLandmarks5.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceLandmarks5.js","sourceRoot":"","sources":["../../../src/classes/FaceLandmarks5.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAS,MAAM,6BAA6B,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;IAAoC,0CAAa;IAAjD;;IAUA,CAAC;IARW,iDAAwB,GAAlC;QACE,IAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAA;QAC1B,OAAO;YACL,GAAG,CAAC,CAAC,CAAC;YACN,GAAG,CAAC,CAAC,CAAC;YACN,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACjC,CAAA;IACH,CAAC;IACH,qBAAC;AAAD,CAAC,AAVD,CAAoC,aAAa,GAUhD"} \ No newline at end of file diff --git a/build/es6/classes/FaceLandmarks68.d.ts b/build/es6/classes/FaceLandmarks68.d.ts deleted file mode 100644 index 5ac3974e..00000000 --- a/build/es6/classes/FaceLandmarks68.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Point } from 'tfjs-image-recognition-base'; -import { FaceLandmarks } from '../classes/FaceLandmarks'; -export declare class FaceLandmarks68 extends FaceLandmarks { - getJawOutline(): Point[]; - getLeftEyeBrow(): Point[]; - getRightEyeBrow(): Point[]; - getNose(): Point[]; - getLeftEye(): Point[]; - getRightEye(): Point[]; - getMouth(): Point[]; - protected getRefPointsForAlignment(): Point[]; -} diff --git a/build/es6/classes/FaceLandmarks68.js b/build/es6/classes/FaceLandmarks68.js deleted file mode 100644 index 4e81caf5..00000000 --- a/build/es6/classes/FaceLandmarks68.js +++ /dev/null @@ -1,40 +0,0 @@ -import * as tslib_1 from "tslib"; -import { getCenterPoint } from 'tfjs-image-recognition-base'; -import { FaceLandmarks } from '../classes/FaceLandmarks'; -var FaceLandmarks68 = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmarks68, _super); - function FaceLandmarks68() { - return _super !== null && _super.apply(this, arguments) || this; - } - FaceLandmarks68.prototype.getJawOutline = function () { - return this.positions.slice(0, 17); - }; - FaceLandmarks68.prototype.getLeftEyeBrow = function () { - return this.positions.slice(17, 22); - }; - FaceLandmarks68.prototype.getRightEyeBrow = function () { - return this.positions.slice(22, 27); - }; - FaceLandmarks68.prototype.getNose = function () { - return this.positions.slice(27, 36); - }; - FaceLandmarks68.prototype.getLeftEye = function () { - return this.positions.slice(36, 42); - }; - FaceLandmarks68.prototype.getRightEye = function () { - return this.positions.slice(42, 48); - }; - FaceLandmarks68.prototype.getMouth = function () { - return this.positions.slice(48, 68); - }; - FaceLandmarks68.prototype.getRefPointsForAlignment = function () { - return [ - this.getLeftEye(), - this.getRightEye(), - this.getMouth() - ].map(getCenterPoint); - }; - return FaceLandmarks68; -}(FaceLandmarks)); -export { FaceLandmarks68 }; -//# sourceMappingURL=FaceLandmarks68.js.map \ No newline at end of file diff --git a/build/es6/classes/FaceLandmarks68.js.map b/build/es6/classes/FaceLandmarks68.js.map deleted file mode 100644 index 4b2c8bf4..00000000 --- a/build/es6/classes/FaceLandmarks68.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceLandmarks68.js","sourceRoot":"","sources":["../../../src/classes/FaceLandmarks68.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAS,MAAM,6BAA6B,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD;IAAqC,2CAAa;IAAlD;;IAoCA,CAAC;IAnCQ,uCAAa,GAApB;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACpC,CAAC;IAEM,wCAAc,GAArB;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACrC,CAAC;IAEM,yCAAe,GAAtB;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACrC,CAAC;IAEM,iCAAO,GAAd;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACrC,CAAC;IAEM,oCAAU,GAAjB;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACrC,CAAC;IAEM,qCAAW,GAAlB;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACrC,CAAC;IAEM,kCAAQ,GAAf;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACrC,CAAC;IAES,kDAAwB,GAAlC;QACE,OAAO;YACL,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,QAAQ,EAAE;SAChB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IACvB,CAAC;IACH,sBAAC;AAAD,CAAC,AApCD,CAAqC,aAAa,GAoCjD"} \ No newline at end of file diff --git a/build/es6/classes/FaceMatch.d.ts b/build/es6/classes/FaceMatch.d.ts deleted file mode 100644 index 3c0befef..00000000 --- a/build/es6/classes/FaceMatch.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export interface IFaceMatch { - label: string; - distance: number; -} -export declare class FaceMatch implements IFaceMatch { - private _label; - private _distance; - constructor(label: string, distance: number); - readonly label: string; - readonly distance: number; - toString(withDistance?: boolean): string; -} diff --git a/build/es6/classes/FaceMatch.js b/build/es6/classes/FaceMatch.js deleted file mode 100644 index 525568b1..00000000 --- a/build/es6/classes/FaceMatch.js +++ /dev/null @@ -1,24 +0,0 @@ -import { round } from 'tfjs-image-recognition-base'; -var FaceMatch = /** @class */ (function () { - function FaceMatch(label, distance) { - this._label = label; - this._distance = distance; - } - Object.defineProperty(FaceMatch.prototype, "label", { - get: function () { return this._label; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceMatch.prototype, "distance", { - get: function () { return this._distance; }, - enumerable: true, - configurable: true - }); - FaceMatch.prototype.toString = function (withDistance) { - if (withDistance === void 0) { withDistance = true; } - return "" + this.label + (withDistance ? " (" + round(this.distance) + ")" : ''); - }; - return FaceMatch; -}()); -export { FaceMatch }; -//# sourceMappingURL=FaceMatch.js.map \ No newline at end of file diff --git a/build/es6/classes/FaceMatch.js.map b/build/es6/classes/FaceMatch.js.map deleted file mode 100644 index 0ca7ed77..00000000 --- a/build/es6/classes/FaceMatch.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceMatch.js","sourceRoot":"","sources":["../../../src/classes/FaceMatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAOpD;IAIE,mBAAY,KAAa,EAAE,QAAgB;QACzC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;IAC3B,CAAC;IAED,sBAAW,4BAAK;aAAhB,cAA6B,OAAO,IAAI,CAAC,MAAM,CAAA,CAAC,CAAC;;;OAAA;IACjD,sBAAW,+BAAQ;aAAnB,cAAgC,OAAO,IAAI,CAAC,SAAS,CAAA,CAAC,CAAC;;;OAAA;IAEhD,4BAAQ,GAAf,UAAgB,YAA4B;QAA5B,6BAAA,EAAA,mBAA4B;QAC1C,OAAO,KAAG,IAAI,CAAC,KAAK,IAAG,YAAY,CAAC,CAAC,CAAC,OAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAA;IAC3E,CAAC;IACH,gBAAC;AAAD,CAAC,AAfD,IAeC"} \ No newline at end of file diff --git a/build/es6/classes/LabeledFaceDescriptors.d.ts b/build/es6/classes/LabeledFaceDescriptors.d.ts deleted file mode 100644 index feb5da06..00000000 --- a/build/es6/classes/LabeledFaceDescriptors.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export declare class LabeledFaceDescriptors { - private _label; - private _descriptors; - constructor(label: string, descriptors: Float32Array[]); - readonly label: string; - readonly descriptors: Float32Array[]; -} diff --git a/build/es6/classes/LabeledFaceDescriptors.js b/build/es6/classes/LabeledFaceDescriptors.js deleted file mode 100644 index cb23a2b1..00000000 --- a/build/es6/classes/LabeledFaceDescriptors.js +++ /dev/null @@ -1,25 +0,0 @@ -var LabeledFaceDescriptors = /** @class */ (function () { - function LabeledFaceDescriptors(label, descriptors) { - if (!(typeof label === 'string')) { - throw new Error('LabeledFaceDescriptors - constructor expected label to be a string'); - } - if (!Array.isArray(descriptors) || descriptors.some(function (desc) { return !(desc instanceof Float32Array); })) { - throw new Error('LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array'); - } - this._label = label; - this._descriptors = descriptors; - } - Object.defineProperty(LabeledFaceDescriptors.prototype, "label", { - get: function () { return this._label; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(LabeledFaceDescriptors.prototype, "descriptors", { - get: function () { return this._descriptors; }, - enumerable: true, - configurable: true - }); - return LabeledFaceDescriptors; -}()); -export { LabeledFaceDescriptors }; -//# sourceMappingURL=LabeledFaceDescriptors.js.map \ No newline at end of file diff --git a/build/es6/classes/LabeledFaceDescriptors.js.map b/build/es6/classes/LabeledFaceDescriptors.js.map deleted file mode 100644 index c19354f0..00000000 --- a/build/es6/classes/LabeledFaceDescriptors.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"LabeledFaceDescriptors.js","sourceRoot":"","sources":["../../../src/classes/LabeledFaceDescriptors.ts"],"names":[],"mappings":"AAAA;IAIE,gCAAY,KAAa,EAAE,WAA2B;QACpD,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;SACtF;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,CAAC,CAAC,IAAI,YAAY,YAAY,CAAC,EAA/B,CAA+B,CAAC,EAAE;YAC5F,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAA;SAC5G;QAED,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAA;IACjC,CAAC;IAED,sBAAW,yCAAK;aAAhB,cAA6B,OAAO,IAAI,CAAC,MAAM,CAAA,CAAC,CAAC;;;OAAA;IACjD,sBAAW,+CAAW;aAAtB,cAA2C,OAAO,IAAI,CAAC,YAAY,CAAA,CAAC,CAAC;;;OAAA;IACvE,6BAAC;AAAD,CAAC,AAnBD,IAmBC"} \ No newline at end of file diff --git a/build/es6/classes/index.d.ts b/build/es6/classes/index.d.ts deleted file mode 100644 index 8d1b8ffe..00000000 --- a/build/es6/classes/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './FaceDetection'; -export * from './FaceLandmarks'; -export * from './FaceLandmarks5'; -export * from './FaceLandmarks68'; -export * from './FaceMatch'; -export * from './LabeledFaceDescriptors'; diff --git a/build/es6/classes/index.js b/build/es6/classes/index.js deleted file mode 100644 index d7e67f86..00000000 --- a/build/es6/classes/index.js +++ /dev/null @@ -1,7 +0,0 @@ -export * from './FaceDetection'; -export * from './FaceLandmarks'; -export * from './FaceLandmarks5'; -export * from './FaceLandmarks68'; -export * from './FaceMatch'; -export * from './LabeledFaceDescriptors'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/es6/classes/index.js.map b/build/es6/classes/index.js.map deleted file mode 100644 index 958aac03..00000000 --- a/build/es6/classes/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/classes/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC"} \ No newline at end of file diff --git a/build/es6/common/fullyConnectedLayer.d.ts b/build/es6/common/fullyConnectedLayer.d.ts deleted file mode 100644 index baf23083..00000000 --- a/build/es6/common/fullyConnectedLayer.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export declare function fullyConnectedLayer(x: tf.Tensor2D, params: TfjsImageRecognitionBase.FCParams): tf.Tensor2D; diff --git a/build/es6/common/fullyConnectedLayer.js b/build/es6/common/fullyConnectedLayer.js deleted file mode 100644 index 1bf3c127..00000000 --- a/build/es6/common/fullyConnectedLayer.js +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export function fullyConnectedLayer(x, params) { - return tf.tidy(function () { - return tf.add(tf.matMul(x, params.weights), params.bias); - }); -} -//# sourceMappingURL=fullyConnectedLayer.js.map \ No newline at end of file diff --git a/build/es6/common/fullyConnectedLayer.js.map b/build/es6/common/fullyConnectedLayer.js.map deleted file mode 100644 index 45c7b43b..00000000 --- a/build/es6/common/fullyConnectedLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"fullyConnectedLayer.js","sourceRoot":"","sources":["../../../src/common/fullyConnectedLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAG5C,MAAM,UAAU,mBAAmB,CACjC,CAAc,EACd,MAAyC;IAEzC,OAAO,EAAE,CAAC,IAAI,CAAC;QACb,OAAA,EAAE,CAAC,GAAG,CACJ,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAC5B,MAAM,CAAC,IAAI,CACZ;IAHD,CAGC,CACF,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/build/es6/dom/drawContour.d.ts b/build/es6/dom/drawContour.d.ts deleted file mode 100644 index 78664e6b..00000000 --- a/build/es6/dom/drawContour.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Point } from 'tfjs-image-recognition-base'; -export declare function drawContour(ctx: CanvasRenderingContext2D, points: Point[], isClosed?: boolean): void; diff --git a/build/es6/dom/drawContour.js b/build/es6/dom/drawContour.js deleted file mode 100644 index 30ec264d..00000000 --- a/build/es6/dom/drawContour.js +++ /dev/null @@ -1,21 +0,0 @@ -export function drawContour(ctx, points, isClosed) { - if (isClosed === void 0) { isClosed = false; } - ctx.beginPath(); - points.slice(1).forEach(function (_a, prevIdx) { - var x = _a.x, y = _a.y; - var from = points[prevIdx]; - ctx.moveTo(from.x, from.y); - ctx.lineTo(x, y); - }); - if (isClosed) { - var from = points[points.length - 1]; - var to = points[0]; - if (!from || !to) { - return; - } - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - } - ctx.stroke(); -} -//# sourceMappingURL=drawContour.js.map \ No newline at end of file diff --git a/build/es6/dom/drawContour.js.map b/build/es6/dom/drawContour.js.map deleted file mode 100644 index 427fed11..00000000 --- a/build/es6/dom/drawContour.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"drawContour.js","sourceRoot":"","sources":["../../../src/dom/drawContour.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CACzB,GAA6B,EAC7B,MAAe,EACf,QAAyB;IAAzB,yBAAA,EAAA,gBAAyB;IAEzB,GAAG,CAAC,SAAS,EAAE,CAAA;IAEf,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAC,EAAQ,EAAE,OAAO;YAAf,QAAC,EAAE,QAAC;QAC7B,IAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;QAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAClB,CAAC,CAAC,CAAA;IAEF,IAAI,QAAQ,EAAE;QACZ,IAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACtC,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE;YAChB,OAAM;SACP;QAED,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;KACvB;IAED,GAAG,CAAC,MAAM,EAAE,CAAA;AACd,CAAC"} \ No newline at end of file diff --git a/build/es6/dom/drawFaceExpressions.d.ts b/build/es6/dom/drawFaceExpressions.d.ts deleted file mode 100644 index 50eaee66..00000000 --- a/build/es6/dom/drawFaceExpressions.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { DrawFaceExpressionsInput, DrawFaceExpressionsOptions } from './types'; -export declare function drawFaceExpressions(canvasArg: string | HTMLCanvasElement, faceExpressions: DrawFaceExpressionsInput | DrawFaceExpressionsInput[], options?: DrawFaceExpressionsOptions): void; diff --git a/build/es6/dom/drawFaceExpressions.js b/build/es6/dom/drawFaceExpressions.js deleted file mode 100644 index 432fe4c2..00000000 --- a/build/es6/dom/drawFaceExpressions.js +++ /dev/null @@ -1,31 +0,0 @@ -import { drawText, env, getContext2dOrThrow, getDefaultDrawOptions, resolveInput, round } from 'tfjs-image-recognition-base'; -export function drawFaceExpressions(canvasArg, faceExpressions, options) { - var canvas = resolveInput(canvasArg); - if (!(canvas instanceof env.getEnv().Canvas)) { - throw new Error('drawFaceExpressions - expected canvas to be of type: HTMLCanvasElement'); - } - var drawOptions = Object.assign(getDefaultDrawOptions(options), (options || {})); - var ctx = getContext2dOrThrow(canvas); - var _a = drawOptions.primaryColor, primaryColor = _a === void 0 ? 'red' : _a, _b = drawOptions.secondaryColor, secondaryColor = _b === void 0 ? 'blue' : _b, _c = drawOptions.primaryFontSize, primaryFontSize = _c === void 0 ? 22 : _c, _d = drawOptions.secondaryFontSize, secondaryFontSize = _d === void 0 ? 16 : _d, _e = drawOptions.minConfidence, minConfidence = _e === void 0 ? 0.2 : _e; - var faceExpressionsArray = Array.isArray(faceExpressions) - ? faceExpressions - : [faceExpressions]; - faceExpressionsArray.forEach(function (_a) { - var position = _a.position, expressions = _a.expressions; - var x = position.x, y = position.y; - var height = position.height || 0; - var sorted = expressions.sort(function (a, b) { return b.probability - a.probability; }); - var resultsToDisplay = sorted.filter(function (expr) { return expr.probability > minConfidence; }); - var offset = (y + height + resultsToDisplay.length * primaryFontSize) > canvas.height - ? -(resultsToDisplay.length * primaryFontSize) - : 0; - resultsToDisplay.forEach(function (expr, i) { - var text = expr.expression + " (" + round(expr.probability) + ")"; - drawText(ctx, x, y + height + (i * primaryFontSize) + offset, text, { - textColor: i === 0 ? primaryColor : secondaryColor, - fontSize: i === 0 ? primaryFontSize : secondaryFontSize - }); - }); - }); -} -//# sourceMappingURL=drawFaceExpressions.js.map \ No newline at end of file diff --git a/build/es6/dom/drawFaceExpressions.js.map b/build/es6/dom/drawFaceExpressions.js.map deleted file mode 100644 index 4cf9d2d6..00000000 --- a/build/es6/dom/drawFaceExpressions.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"drawFaceExpressions.js","sourceRoot":"","sources":["../../../src/dom/drawFaceExpressions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAK7H,MAAM,UAAU,mBAAmB,CACjC,SAAqC,EACrC,eAAsE,EACtE,OAAoC;IAEpC,IAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,CAAC,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;QAC5C,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAA;KAC1F;IAED,IAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAC/B,qBAAqB,CAAC,OAAO,CAAC,EAC9B,CAAC,OAAO,IAAI,EAAE,CAAC,CAChB,CAAA;IAED,IAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAErC,IAAA,6BAAoB,EAApB,yCAAoB,EACpB,+BAAuB,EAAvB,4CAAuB,EACvB,gCAAoB,EAApB,yCAAoB,EACpB,kCAAsB,EAAtB,2CAAsB,EACtB,8BAAmB,EAAnB,wCAAmB,CACN;IAEf,IAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;QACzD,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAA;IAErB,oBAAoB,CAAC,OAAO,CAAC,UAAC,EAAyB;YAAvB,sBAAQ,EAAE,4BAAW;QAC3C,IAAA,cAAC,EAAE,cAAC,CAAa;QACzB,IAAM,MAAM,GAAI,QAAkB,CAAC,MAAM,IAAI,CAAC,CAAA;QAC9C,IAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,EAA7B,CAA6B,CAAC,CAAA;QACxE,IAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,WAAW,GAAG,aAAa,EAAhC,CAAgC,CAAC,CAAA;QAEhF,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,gBAAgB,CAAC,MAAM,GAAG,eAAe,CAAC,GAAG,MAAM,CAAC,MAAM;YACnF,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,GAAG,eAAe,CAAC;YAC9C,CAAC,CAAC,CAAC,CAAA;QACL,gBAAgB,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,CAAC;YAC/B,IAAM,IAAI,GAAM,IAAI,CAAC,UAAU,UAAK,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAG,CAAA;YAC9D,QAAQ,CACN,GAAG,EACH,CAAC,EACD,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,GAAG,MAAM,EAC3C,IAAI,EACJ;gBACE,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc;gBAClD,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB;aACxD,CACF,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AAGJ,CAAC"} \ No newline at end of file diff --git a/build/es6/dom/drawLandmarks.d.ts b/build/es6/dom/drawLandmarks.d.ts deleted file mode 100644 index 4a372873..00000000 --- a/build/es6/dom/drawLandmarks.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { FaceLandmarks } from '../classes/FaceLandmarks'; -import { DrawLandmarksOptions } from './types'; -export declare function drawLandmarks(canvasArg: string | HTMLCanvasElement, faceLandmarks: FaceLandmarks | FaceLandmarks[], options?: DrawLandmarksOptions): void; diff --git a/build/es6/dom/drawLandmarks.js b/build/es6/dom/drawLandmarks.js deleted file mode 100644 index d8579c0b..00000000 --- a/build/es6/dom/drawLandmarks.js +++ /dev/null @@ -1,33 +0,0 @@ -import { env, getContext2dOrThrow, getDefaultDrawOptions, resolveInput } from 'tfjs-image-recognition-base'; -import { FaceLandmarks68 } from '../classes/FaceLandmarks68'; -import { drawContour } from './drawContour'; -export function drawLandmarks(canvasArg, faceLandmarks, options) { - var canvas = resolveInput(canvasArg); - if (!(canvas instanceof env.getEnv().Canvas)) { - throw new Error('drawLandmarks - expected canvas to be of type: HTMLCanvasElement'); - } - var drawOptions = Object.assign(getDefaultDrawOptions(options), (options || {})); - var drawLines = Object.assign({ drawLines: false }, (options || {})).drawLines; - var ctx = getContext2dOrThrow(canvas); - var lineWidth = drawOptions.lineWidth, _a = drawOptions.color, color = _a === void 0 ? 'blue' : _a; - var faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks]; - faceLandmarksArray.forEach(function (landmarks) { - if (drawLines && landmarks instanceof FaceLandmarks68) { - ctx.strokeStyle = color; - ctx.lineWidth = lineWidth; - drawContour(ctx, landmarks.getJawOutline()); - drawContour(ctx, landmarks.getLeftEyeBrow()); - drawContour(ctx, landmarks.getRightEyeBrow()); - drawContour(ctx, landmarks.getNose()); - drawContour(ctx, landmarks.getLeftEye(), true); - drawContour(ctx, landmarks.getRightEye(), true); - drawContour(ctx, landmarks.getMouth(), true); - return; - } - // else draw points - var ptOffset = lineWidth / 2; - ctx.fillStyle = color; - landmarks.positions.forEach(function (pt) { return ctx.fillRect(pt.x - ptOffset, pt.y - ptOffset, lineWidth, lineWidth); }); - }); -} -//# sourceMappingURL=drawLandmarks.js.map \ No newline at end of file diff --git a/build/es6/dom/drawLandmarks.js.map b/build/es6/dom/drawLandmarks.js.map deleted file mode 100644 index 055f595e..00000000 --- a/build/es6/dom/drawLandmarks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"drawLandmarks.js","sourceRoot":"","sources":["../../../src/dom/drawLandmarks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG5G,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,MAAM,UAAU,aAAa,CAC3B,SAAqC,EACrC,aAA8C,EAC9C,OAA8B;IAE9B,IAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,CAAC,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;QAC5C,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;KACpF;IAED,IAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAC/B,qBAAqB,CAAC,OAAO,CAAC,EAC9B,CAAC,OAAO,IAAI,EAAE,CAAC,CAChB,CAAA;IAEO,IAAA,0EAAS,CAAyD;IAE1E,IAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAC/B,IAAA,iCAAS,EAAE,sBAAc,EAAd,mCAAc,CAAgB;IAEjD,IAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;IAEzF,kBAAkB,CAAC,OAAO,CAAC,UAAA,SAAS;QAClC,IAAI,SAAS,IAAI,SAAS,YAAY,eAAe,EAAE;YACrD,GAAG,CAAC,WAAW,GAAG,KAAK,CAAA;YACvB,GAAG,CAAC,SAAS,GAAG,SAAS,CAAA;YACzB,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,aAAa,EAAE,CAAC,CAAA;YAC3C,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,cAAc,EAAE,CAAC,CAAA;YAC5C,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,eAAe,EAAE,CAAC,CAAA;YAC7C,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAA;YACrC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,CAAA;YAC9C,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAA;YAC/C,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAA;YAC5C,OAAM;SACP;QAED,mBAAmB;QACnB,IAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAA;QAC9B,GAAG,CAAC,SAAS,GAAG,KAAK,CAAA;QACrB,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,UAAA,EAAE,IAAI,OAAA,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,EAApE,CAAoE,CAAC,CAAA;IACzG,CAAC,CAAC,CAAA;AACJ,CAAC"} \ No newline at end of file diff --git a/build/es6/dom/extractFaceTensors.d.ts b/build/es6/dom/extractFaceTensors.d.ts deleted file mode 100644 index 429ea46e..00000000 --- a/build/es6/dom/extractFaceTensors.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { Rect } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -/** - * Extracts the tensors of the image regions containing the detected faces. - * Useful if you want to compute the face descriptors for the face images. - * Using this method is faster then extracting a canvas for each face and - * converting them to tensors individually. - * - * @param imageTensor The image tensor that face detection has been performed on. - * @param detections The face detection results or face bounding boxes for that image. - * @returns Tensors of the corresponding image region for each detected face. - */ -export declare function extractFaceTensors(imageTensor: tf.Tensor3D | tf.Tensor4D, detections: Array): Promise; diff --git a/build/es6/dom/extractFaceTensors.js b/build/es6/dom/extractFaceTensors.js deleted file mode 100644 index 621b83a3..00000000 --- a/build/es6/dom/extractFaceTensors.js +++ /dev/null @@ -1,39 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { isTensor4D, isTensor3D } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -/** - * Extracts the tensors of the image regions containing the detected faces. - * Useful if you want to compute the face descriptors for the face images. - * Using this method is faster then extracting a canvas for each face and - * converting them to tensors individually. - * - * @param imageTensor The image tensor that face detection has been performed on. - * @param detections The face detection results or face bounding boxes for that image. - * @returns Tensors of the corresponding image region for each detected face. - */ -export function extractFaceTensors(imageTensor, detections) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - if (!isTensor3D(imageTensor) && !isTensor4D(imageTensor)) { - throw new Error('extractFaceTensors - expected image tensor to be 3D or 4D'); - } - if (isTensor4D(imageTensor) && imageTensor.shape[0] > 1) { - throw new Error('extractFaceTensors - batchSize > 1 not supported'); - } - return [2 /*return*/, tf.tidy(function () { - var _a = imageTensor.shape.slice(isTensor4D(imageTensor) ? 1 : 0), imgHeight = _a[0], imgWidth = _a[1], numChannels = _a[2]; - var boxes = detections.map(function (det) { return det instanceof FaceDetection - ? det.forSize(imgWidth, imgHeight).box - : det; }) - .map(function (box) { return box.clipAtImageBorders(imgWidth, imgHeight); }); - var faceTensors = boxes.map(function (_a) { - var x = _a.x, y = _a.y, width = _a.width, height = _a.height; - return tf.slice3d(imageTensor.as3D(imgHeight, imgWidth, numChannels), [y, x, 0], [height, width, numChannels]); - }); - return faceTensors; - })]; - }); - }); -} -//# sourceMappingURL=extractFaceTensors.js.map \ No newline at end of file diff --git a/build/es6/dom/extractFaceTensors.js.map b/build/es6/dom/extractFaceTensors.js.map deleted file mode 100644 index 5f9d5647..00000000 --- a/build/es6/dom/extractFaceTensors.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractFaceTensors.js","sourceRoot":"","sources":["../../../src/dom/extractFaceTensors.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAQ,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE3E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD;;;;;;;;;GASG;AACH,MAAM,UAAgB,kBAAkB,CACtC,WAAsC,EACtC,UAAuC;;;YAGvC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;gBACxD,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;aAC7E;YAED,IAAI,UAAU,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;gBACvD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;aACpE;YAED,sBAAO,EAAE,CAAC,IAAI,CAAC;oBACP,IAAA,6DAA6F,EAA5F,iBAAS,EAAE,gBAAQ,EAAE,mBAAuE,CAAA;oBAEnG,IAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAC1B,UAAA,GAAG,IAAI,OAAA,GAAG,YAAY,aAAa;wBACjC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,GAAG;wBACtC,CAAC,CAAC,GAAG,EAFA,CAEA,CACR;yBACE,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,EAA3C,CAA2C,CAAC,CAAA;oBAE1D,IAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,UAAC,EAAuB;4BAArB,QAAC,EAAE,QAAC,EAAE,gBAAK,EAAE,kBAAM;wBAClD,OAAA,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;oBAAvG,CAAuG,CACxG,CAAA;oBAED,OAAO,WAAW,CAAA;gBACpB,CAAC,CAAC,EAAA;;;CACH"} \ No newline at end of file diff --git a/build/es6/dom/extractFaces.d.ts b/build/es6/dom/extractFaces.d.ts deleted file mode 100644 index d7bf0e60..00000000 --- a/build/es6/dom/extractFaces.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Rect, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -/** - * Extracts the image regions containing the detected faces. - * - * @param input The image that face detection has been performed on. - * @param detections The face detection results or face bounding boxes for that image. - * @returns The Canvases of the corresponding image region for each detected face. - */ -export declare function extractFaces(input: TNetInput, detections: Array): Promise; diff --git a/build/es6/dom/extractFaces.js b/build/es6/dom/extractFaces.js deleted file mode 100644 index 49dc59f0..00000000 --- a/build/es6/dom/extractFaces.js +++ /dev/null @@ -1,54 +0,0 @@ -import * as tslib_1 from "tslib"; -import { createCanvas, env, getContext2dOrThrow, imageTensorToCanvas, toNetInput, } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -/** - * Extracts the image regions containing the detected faces. - * - * @param input The image that face detection has been performed on. - * @param detections The face detection results or face bounding boxes for that image. - * @returns The Canvases of the corresponding image region for each detected face. - */ -export function extractFaces(input, detections) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var Canvas, canvas, netInput, tensorOrCanvas, _a, ctx, boxes; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - Canvas = env.getEnv().Canvas; - canvas = input; - if (!!(input instanceof Canvas)) return [3 /*break*/, 5]; - return [4 /*yield*/, toNetInput(input)]; - case 1: - netInput = _b.sent(); - if (netInput.batchSize > 1) { - throw new Error('extractFaces - batchSize > 1 not supported'); - } - tensorOrCanvas = netInput.getInput(0); - if (!(tensorOrCanvas instanceof Canvas)) return [3 /*break*/, 2]; - _a = tensorOrCanvas; - return [3 /*break*/, 4]; - case 2: return [4 /*yield*/, imageTensorToCanvas(tensorOrCanvas)]; - case 3: - _a = _b.sent(); - _b.label = 4; - case 4: - canvas = _a; - _b.label = 5; - case 5: - ctx = getContext2dOrThrow(canvas); - boxes = detections.map(function (det) { return det instanceof FaceDetection - ? det.forSize(canvas.width, canvas.height).box.floor() - : det; }) - .map(function (box) { return box.clipAtImageBorders(canvas.width, canvas.height); }); - return [2 /*return*/, boxes.map(function (_a) { - var x = _a.x, y = _a.y, width = _a.width, height = _a.height; - var faceImg = createCanvas({ width: width, height: height }); - getContext2dOrThrow(faceImg) - .putImageData(ctx.getImageData(x, y, width, height), 0, 0); - return faceImg; - })]; - } - }); - }); -} -//# sourceMappingURL=extractFaces.js.map \ No newline at end of file diff --git a/build/es6/dom/extractFaces.js.map b/build/es6/dom/extractFaces.js.map deleted file mode 100644 index 375cdc4c..00000000 --- a/build/es6/dom/extractFaces.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractFaces.js","sourceRoot":"","sources":["../../../src/dom/extractFaces.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,YAAY,EACZ,GAAG,EACH,mBAAmB,EACnB,mBAAmB,EAGnB,UAAU,GACX,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,UAAgB,YAAY,CAChC,KAAgB,EAChB,UAAuC;;;;;;oBAG/B,MAAM,GAAK,GAAG,CAAC,MAAM,EAAE,OAAjB,CAAiB;oBAE3B,MAAM,GAAG,KAA0B,CAAA;yBAEnC,CAAC,CAAC,KAAK,YAAY,MAAM,CAAC,EAA1B,wBAA0B;oBACX,qBAAM,UAAU,CAAC,KAAK,CAAC,EAAA;;oBAAlC,QAAQ,GAAG,SAAuB;oBAExC,IAAI,QAAQ,CAAC,SAAS,GAAG,CAAC,EAAE;wBAC1B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;qBAC9D;oBAEK,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;yBAClC,CAAA,cAAc,YAAY,MAAM,CAAA,EAAhC,wBAAgC;oBACrC,KAAA,cAAc,CAAA;;wBACd,qBAAM,mBAAmB,CAAC,cAAc,CAAC,EAAA;;oBAAzC,KAAA,SAAyC,CAAA;;;oBAF7C,MAAM,KAEuC,CAAA;;;oBAGzC,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;oBACjC,KAAK,GAAG,UAAU,CAAC,GAAG,CAC1B,UAAA,GAAG,IAAI,OAAA,GAAG,YAAY,aAAa;wBACjC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE;wBACtD,CAAC,CAAC,GAAG,EAFA,CAEA,CACR;yBACE,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAnD,CAAmD,CAAC,CAAA;oBAElE,sBAAO,KAAK,CAAC,GAAG,CAAC,UAAC,EAAuB;gCAArB,QAAC,EAAE,QAAC,EAAE,gBAAK,EAAE,kBAAM;4BACrC,IAAM,OAAO,GAAG,YAAY,CAAC,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAC,CAAA;4BAC/C,mBAAmB,CAAC,OAAO,CAAC;iCACzB,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;4BAC5D,OAAO,OAAO,CAAA;wBAChB,CAAC,CAAC,EAAA;;;;CACH"} \ No newline at end of file diff --git a/build/es6/dom/index.d.ts b/build/es6/dom/index.d.ts deleted file mode 100644 index 9b8d66e1..00000000 --- a/build/es6/dom/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './drawContour'; -export * from './drawLandmarks'; -export * from './drawFaceExpressions'; -export * from './extractFaces'; -export * from './extractFaceTensors'; -export * from './types'; diff --git a/build/es6/dom/index.js b/build/es6/dom/index.js deleted file mode 100644 index e9715d70..00000000 --- a/build/es6/dom/index.js +++ /dev/null @@ -1,6 +0,0 @@ -export * from './drawContour'; -export * from './drawLandmarks'; -export * from './drawFaceExpressions'; -export * from './extractFaces'; -export * from './extractFaceTensors'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/es6/dom/index.js.map b/build/es6/dom/index.js.map deleted file mode 100644 index d3da0f1e..00000000 --- a/build/es6/dom/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dom/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA"} \ No newline at end of file diff --git a/build/es6/dom/types.d.ts b/build/es6/dom/types.d.ts deleted file mode 100644 index e1f3d6f6..00000000 --- a/build/es6/dom/types.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { IPoint, IRect } from 'tfjs-image-recognition-base'; -import { WithFaceExpressions } from '../factories/WithFaceExpressions'; -export declare type DrawLandmarksOptions = { - lineWidth?: number; - color?: string; - drawLines?: boolean; -}; -export declare type DrawFaceExpressionsOptions = { - primaryColor?: string; - secondaryColor?: string; - primaryFontSize?: number; - secondaryFontSize?: number; - minConfidence?: number; -}; -export declare type DrawFaceExpressionsInput = WithFaceExpressions<{ - position: IPoint | IRect; -}>; diff --git a/build/es6/dom/types.js b/build/es6/dom/types.js deleted file mode 100644 index 5b2306a4..00000000 --- a/build/es6/dom/types.js +++ /dev/null @@ -1 +0,0 @@ -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/es6/dom/types.js.map b/build/es6/dom/types.js.map deleted file mode 100644 index 81849c01..00000000 --- a/build/es6/dom/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dom/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/build/es6/euclideanDistance.d.ts b/build/es6/euclideanDistance.d.ts deleted file mode 100644 index d555de27..00000000 --- a/build/es6/euclideanDistance.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function euclideanDistance(arr1: number[] | Float32Array, arr2: number[] | Float32Array): number; diff --git a/build/es6/euclideanDistance.js b/build/es6/euclideanDistance.js deleted file mode 100644 index 34289679..00000000 --- a/build/es6/euclideanDistance.js +++ /dev/null @@ -1,10 +0,0 @@ -export function euclideanDistance(arr1, arr2) { - if (arr1.length !== arr2.length) - throw new Error('euclideanDistance: arr1.length !== arr2.length'); - var desc1 = Array.from(arr1); - var desc2 = Array.from(arr2); - return Math.sqrt(desc1 - .map(function (val, i) { return val - desc2[i]; }) - .reduce(function (res, diff) { return res + Math.pow(diff, 2); }, 0)); -} -//# sourceMappingURL=euclideanDistance.js.map \ No newline at end of file diff --git a/build/es6/euclideanDistance.js.map b/build/es6/euclideanDistance.js.map deleted file mode 100644 index 1347c1d4..00000000 --- a/build/es6/euclideanDistance.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"euclideanDistance.js","sourceRoot":"","sources":["../../src/euclideanDistance.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,IAA6B,EAAE,IAA6B;IAC5F,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;QAC7B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;IAEnE,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9B,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAE9B,OAAO,IAAI,CAAC,IAAI,CACd,KAAK;SACF,GAAG,CAAC,UAAC,GAAG,EAAE,CAAC,IAAK,OAAA,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAd,CAAc,CAAC;SAC/B,MAAM,CAAC,UAAC,GAAG,EAAE,IAAI,IAAK,OAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAvB,CAAuB,EAAE,CAAC,CAAC,CACrD,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/build/es6/faceExpressionNet/FaceExpressionNet.d.ts b/build/es6/faceExpressionNet/FaceExpressionNet.d.ts deleted file mode 100644 index c65e2801..00000000 --- a/build/es6/faceExpressionNet/FaceExpressionNet.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor'; -import { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types'; -import { FaceProcessor } from '../faceProcessor/FaceProcessor'; -import { FaceExpressionPrediction } from './types'; -export declare class FaceExpressionNet extends FaceProcessor { - static getFaceExpressionLabel(faceExpression: string): number; - static decodeProbabilites(probabilities: number[] | Float32Array): FaceExpressionPrediction[]; - constructor(faceFeatureExtractor?: FaceFeatureExtractor); - forwardInput(input: NetInput | tf.Tensor4D): tf.Tensor2D; - forward(input: TNetInput): Promise; - predictExpressions(input: TNetInput): Promise; - protected getDefaultModelName(): string; - protected getClassifierChannelsIn(): number; - protected getClassifierChannelsOut(): number; -} diff --git a/build/es6/faceExpressionNet/FaceExpressionNet.js b/build/es6/faceExpressionNet/FaceExpressionNet.js deleted file mode 100644 index dc5e186d..00000000 --- a/build/es6/faceExpressionNet/FaceExpressionNet.js +++ /dev/null @@ -1,92 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { toNetInput } from 'tfjs-image-recognition-base'; -import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor'; -import { FaceProcessor } from '../faceProcessor/FaceProcessor'; -import { faceExpressionLabels } from './types'; -var FaceExpressionNet = /** @class */ (function (_super) { - tslib_1.__extends(FaceExpressionNet, _super); - function FaceExpressionNet(faceFeatureExtractor) { - if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new FaceFeatureExtractor(); } - return _super.call(this, 'FaceExpressionNet', faceFeatureExtractor) || this; - } - FaceExpressionNet.getFaceExpressionLabel = function (faceExpression) { - var label = faceExpressionLabels[faceExpression]; - if (typeof label !== 'number') { - throw new Error("getFaceExpressionLabel - no label for faceExpression: " + faceExpression); - } - return label; - }; - FaceExpressionNet.decodeProbabilites = function (probabilities) { - if (probabilities.length !== 7) { - throw new Error("decodeProbabilites - expected probabilities.length to be 7, have: " + probabilities.length); - } - return Object.keys(faceExpressionLabels) - .map(function (expression) { return ({ expression: expression, probability: probabilities[faceExpressionLabels[expression]] }); }); - }; - FaceExpressionNet.prototype.forwardInput = function (input) { - var _this = this; - return tf.tidy(function () { return tf.softmax(_this.runNet(input)); }); - }; - FaceExpressionNet.prototype.forward = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - FaceExpressionNet.prototype.predictExpressions = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var netInput, out, probabilitesByBatch, predictionsByBatch; - var _this = this; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, toNetInput(input)]; - case 1: - netInput = _a.sent(); - return [4 /*yield*/, this.forwardInput(netInput)]; - case 2: - out = _a.sent(); - return [4 /*yield*/, Promise.all(tf.unstack(out).map(function (t) { return tslib_1.__awaiter(_this, void 0, void 0, function () { - var data; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, t.data()]; - case 1: - data = _a.sent(); - t.dispose(); - return [2 /*return*/, data]; - } - }); - }); }))]; - case 3: - probabilitesByBatch = _a.sent(); - out.dispose(); - predictionsByBatch = probabilitesByBatch - .map(function (propablities) { return FaceExpressionNet.decodeProbabilites(propablities); }); - return [2 /*return*/, netInput.isBatchInput - ? predictionsByBatch - : predictionsByBatch[0]]; - } - }); - }); - }; - FaceExpressionNet.prototype.getDefaultModelName = function () { - return 'face_expression_model'; - }; - FaceExpressionNet.prototype.getClassifierChannelsIn = function () { - return 256; - }; - FaceExpressionNet.prototype.getClassifierChannelsOut = function () { - return 7; - }; - return FaceExpressionNet; -}(FaceProcessor)); -export { FaceExpressionNet }; -//# sourceMappingURL=FaceExpressionNet.js.map \ No newline at end of file diff --git a/build/es6/faceExpressionNet/FaceExpressionNet.js.map b/build/es6/faceExpressionNet/FaceExpressionNet.js.map deleted file mode 100644 index f1e5effb..00000000 --- a/build/es6/faceExpressionNet/FaceExpressionNet.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceExpressionNet.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/FaceExpressionNet.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/faceExpressionNet/index.d.ts b/build/es6/faceExpressionNet/index.d.ts deleted file mode 100644 index 1c3a169f..00000000 --- a/build/es6/faceExpressionNet/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './FaceExpressionNet'; -export * from './types'; diff --git a/build/es6/faceExpressionNet/index.js b/build/es6/faceExpressionNet/index.js deleted file mode 100644 index 8efb717d..00000000 --- a/build/es6/faceExpressionNet/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export * from './FaceExpressionNet'; -export * from './types'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/es6/faceExpressionNet/index.js.map b/build/es6/faceExpressionNet/index.js.map deleted file mode 100644 index 18ac3b03..00000000 --- a/build/es6/faceExpressionNet/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,SAAS,CAAC"} \ No newline at end of file diff --git a/build/es6/faceExpressionNet/types.d.ts b/build/es6/faceExpressionNet/types.d.ts deleted file mode 100644 index 154e48b2..00000000 --- a/build/es6/faceExpressionNet/types.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -export declare const faceExpressionLabels: { - neutral: number; - happy: number; - sad: number; - angry: number; - fearful: number; - disgusted: number; - surprised: number; -}; -export declare type FaceExpression = 'neutral' | 'happy' | 'sad' | 'angry' | 'fearful' | 'disgusted' | 'surprised'; -export declare type FaceExpressionPrediction = { - expression: FaceExpression; - probability: number; -}; diff --git a/build/es6/faceExpressionNet/types.js b/build/es6/faceExpressionNet/types.js deleted file mode 100644 index e82802d1..00000000 --- a/build/es6/faceExpressionNet/types.js +++ /dev/null @@ -1,10 +0,0 @@ -export var faceExpressionLabels = { - neutral: 0, - happy: 1, - sad: 2, - angry: 3, - fearful: 4, - disgusted: 5, - surprised: 6 -}; -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/es6/faceExpressionNet/types.js.map b/build/es6/faceExpressionNet/types.js.map deleted file mode 100644 index 105de29b..00000000 --- a/build/es6/faceExpressionNet/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,oBAAoB,GAAG;IAClC,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;IACR,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,CAAC;IACZ,SAAS,EAAC,CAAC;CACZ,CAAA"} \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/FaceFeatureExtractor.d.ts b/build/es6/faceFeatureExtractor/FaceFeatureExtractor.d.ts deleted file mode 100644 index 35b86231..00000000 --- a/build/es6/faceFeatureExtractor/FaceFeatureExtractor.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceFeatureExtractorParams, IFaceFeatureExtractor } from './types'; -export declare class FaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor { - constructor(); - forwardInput(input: NetInput): tf.Tensor4D; - forward(input: TNetInput): Promise; - protected getDefaultModelName(): string; - protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: FaceFeatureExtractorParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; - protected extractParams(weights: Float32Array): { - params: FaceFeatureExtractorParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; -} diff --git a/build/es6/faceFeatureExtractor/FaceFeatureExtractor.js b/build/es6/faceFeatureExtractor/FaceFeatureExtractor.js deleted file mode 100644 index ca6f0933..00000000 --- a/build/es6/faceFeatureExtractor/FaceFeatureExtractor.js +++ /dev/null @@ -1,54 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { NeuralNetwork, normalize, toNetInput } from 'tfjs-image-recognition-base'; -import { denseBlock4 } from './denseBlock'; -import { extractParams } from './extractParams'; -import { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap'; -var FaceFeatureExtractor = /** @class */ (function (_super) { - tslib_1.__extends(FaceFeatureExtractor, _super); - function FaceFeatureExtractor() { - return _super.call(this, 'FaceFeatureExtractor') || this; - } - FaceFeatureExtractor.prototype.forwardInput = function (input) { - var params = this.params; - if (!params) { - throw new Error('FaceFeatureExtractor - load model before inference'); - } - return tf.tidy(function () { - var batchTensor = input.toBatchTensor(112, true); - var meanRgb = [122.782, 117.001, 104.298]; - var normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)); - var out = denseBlock4(normalized, params.dense0, true); - out = denseBlock4(out, params.dense1); - out = denseBlock4(out, params.dense2); - out = denseBlock4(out, params.dense3); - out = tf.avgPool(out, [7, 7], [2, 2], 'valid'); - return out; - }); - }; - FaceFeatureExtractor.prototype.forward = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - FaceFeatureExtractor.prototype.getDefaultModelName = function () { - return 'face_feature_extractor_model'; - }; - FaceFeatureExtractor.prototype.extractParamsFromWeigthMap = function (weightMap) { - return extractParamsFromWeigthMap(weightMap); - }; - FaceFeatureExtractor.prototype.extractParams = function (weights) { - return extractParams(weights); - }; - return FaceFeatureExtractor; -}(NeuralNetwork)); -export { FaceFeatureExtractor }; -//# sourceMappingURL=FaceFeatureExtractor.js.map \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/FaceFeatureExtractor.js.map b/build/es6/faceFeatureExtractor/FaceFeatureExtractor.js.map deleted file mode 100644 index 2ceab2f4..00000000 --- a/build/es6/faceFeatureExtractor/FaceFeatureExtractor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceFeatureExtractor.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/FaceFeatureExtractor.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAY,aAAa,EAAE,SAAS,EAAa,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAExG,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAG1E;IAA0C,gDAAyC;IAEjF;eACE,kBAAM,sBAAsB,CAAC;IAC/B,CAAC;IAEM,2CAAY,GAAnB,UAAoB,KAAe;QAEzB,IAAA,oBAAM,CAAS;QAEvB,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;SACtE;QAED,OAAO,EAAE,CAAC,IAAI,CAAC;YACb,IAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAClD,IAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;YAC3C,IAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAgB,CAAA;YAErF,IAAI,GAAG,GAAG,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACtD,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YAE9C,OAAO,GAAG,CAAA;QACZ,CAAC,CAAC,CAAA;IACJ,CAAC;IAEY,sCAAO,GAApB,UAAqB,KAAgB;;;;;;wBAC5B,KAAA,IAAI,CAAC,YAAY,CAAA;wBAAC,qBAAM,UAAU,CAAC,KAAK,CAAC,EAAA;4BAAhD,sBAAO,SAAA,IAAI,GAAc,SAAuB,EAAC,EAAA;;;;KAClD;IAES,kDAAmB,GAA7B;QACE,OAAO,8BAA8B,CAAA;IACvC,CAAC;IAES,yDAA0B,GAApC,UAAqC,SAA4B;QAC/D,OAAO,0BAA0B,CAAC,SAAS,CAAC,CAAA;IAC9C,CAAC;IAES,4CAAa,GAAvB,UAAwB,OAAqB;QAC3C,OAAO,aAAa,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC;IACH,2BAAC;AAAD,CAAC,AA5CD,CAA0C,aAAa,GA4CtD"} \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/TinyFaceFeatureExtractor.d.ts b/build/es6/faceFeatureExtractor/TinyFaceFeatureExtractor.d.ts deleted file mode 100644 index 4e9957ca..00000000 --- a/build/es6/faceFeatureExtractor/TinyFaceFeatureExtractor.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base'; -import { IFaceFeatureExtractor, TinyFaceFeatureExtractorParams } from './types'; -export declare class TinyFaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor { - constructor(); - forwardInput(input: NetInput): tf.Tensor4D; - forward(input: TNetInput): Promise; - protected getDefaultModelName(): string; - protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: TinyFaceFeatureExtractorParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; - protected extractParams(weights: Float32Array): { - params: TinyFaceFeatureExtractorParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; -} diff --git a/build/es6/faceFeatureExtractor/TinyFaceFeatureExtractor.js b/build/es6/faceFeatureExtractor/TinyFaceFeatureExtractor.js deleted file mode 100644 index 51f6f96e..00000000 --- a/build/es6/faceFeatureExtractor/TinyFaceFeatureExtractor.js +++ /dev/null @@ -1,53 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { NeuralNetwork, normalize, toNetInput } from 'tfjs-image-recognition-base'; -import { denseBlock3 } from './denseBlock'; -import { extractParamsFromWeigthMapTiny } from './extractParamsFromWeigthMapTiny'; -import { extractParamsTiny } from './extractParamsTiny'; -var TinyFaceFeatureExtractor = /** @class */ (function (_super) { - tslib_1.__extends(TinyFaceFeatureExtractor, _super); - function TinyFaceFeatureExtractor() { - return _super.call(this, 'TinyFaceFeatureExtractor') || this; - } - TinyFaceFeatureExtractor.prototype.forwardInput = function (input) { - var params = this.params; - if (!params) { - throw new Error('TinyFaceFeatureExtractor - load model before inference'); - } - return tf.tidy(function () { - var batchTensor = input.toBatchTensor(112, true); - var meanRgb = [122.782, 117.001, 104.298]; - var normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)); - var out = denseBlock3(normalized, params.dense0, true); - out = denseBlock3(out, params.dense1); - out = denseBlock3(out, params.dense2); - out = tf.avgPool(out, [14, 14], [2, 2], 'valid'); - return out; - }); - }; - TinyFaceFeatureExtractor.prototype.forward = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - TinyFaceFeatureExtractor.prototype.getDefaultModelName = function () { - return 'face_feature_extractor_tiny_model'; - }; - TinyFaceFeatureExtractor.prototype.extractParamsFromWeigthMap = function (weightMap) { - return extractParamsFromWeigthMapTiny(weightMap); - }; - TinyFaceFeatureExtractor.prototype.extractParams = function (weights) { - return extractParamsTiny(weights); - }; - return TinyFaceFeatureExtractor; -}(NeuralNetwork)); -export { TinyFaceFeatureExtractor }; -//# sourceMappingURL=TinyFaceFeatureExtractor.js.map \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/TinyFaceFeatureExtractor.js.map b/build/es6/faceFeatureExtractor/TinyFaceFeatureExtractor.js.map deleted file mode 100644 index c5757270..00000000 --- a/build/es6/faceFeatureExtractor/TinyFaceFeatureExtractor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TinyFaceFeatureExtractor.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAY,aAAa,EAAE,SAAS,EAAa,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAExG,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD;IAA8C,oDAA6C;IAEzF;eACE,kBAAM,0BAA0B,CAAC;IACnC,CAAC;IAEM,+CAAY,GAAnB,UAAoB,KAAe;QAEzB,IAAA,oBAAM,CAAS;QAEvB,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;SAC1E;QAED,OAAO,EAAE,CAAC,IAAI,CAAC;YACb,IAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAClD,IAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;YAC3C,IAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAgB,CAAA;YAErF,IAAI,GAAG,GAAG,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACtD,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YAEhD,OAAO,GAAG,CAAA;QACZ,CAAC,CAAC,CAAA;IACJ,CAAC;IAEY,0CAAO,GAApB,UAAqB,KAAgB;;;;;;wBAC5B,KAAA,IAAI,CAAC,YAAY,CAAA;wBAAC,qBAAM,UAAU,CAAC,KAAK,CAAC,EAAA;4BAAhD,sBAAO,SAAA,IAAI,GAAc,SAAuB,EAAC,EAAA;;;;KAClD;IAES,sDAAmB,GAA7B;QACE,OAAO,mCAAmC,CAAA;IAC5C,CAAC;IAES,6DAA0B,GAApC,UAAqC,SAA4B;QAC/D,OAAO,8BAA8B,CAAC,SAAS,CAAC,CAAA;IAClD,CAAC;IAES,gDAAa,GAAvB,UAAwB,OAAqB;QAC3C,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAA;IACnC,CAAC;IACH,+BAAC;AAAD,CAAC,AA3CD,CAA8C,aAAa,GA2C1D"} \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/denseBlock.d.ts b/build/es6/faceFeatureExtractor/denseBlock.d.ts deleted file mode 100644 index 685af3ba..00000000 --- a/build/es6/faceFeatureExtractor/denseBlock.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { DenseBlock3Params, DenseBlock4Params } from './types'; -export declare function denseBlock3(x: tf.Tensor4D, denseBlockParams: DenseBlock3Params, isFirstLayer?: boolean): tf.Tensor4D; -export declare function denseBlock4(x: tf.Tensor4D, denseBlockParams: DenseBlock4Params, isFirstLayer?: boolean, isScaleDown?: boolean): tf.Tensor4D; diff --git a/build/es6/faceFeatureExtractor/denseBlock.js b/build/es6/faceFeatureExtractor/denseBlock.js deleted file mode 100644 index d2f2a320..00000000 --- a/build/es6/faceFeatureExtractor/denseBlock.js +++ /dev/null @@ -1,30 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { depthwiseSeparableConv } from './depthwiseSeparableConv'; -export function denseBlock3(x, denseBlockParams, isFirstLayer) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - return tf.tidy(function () { - var out1 = tf.relu(isFirstLayer - ? tf.add(tf.conv2d(x, denseBlockParams.conv0.filters, [2, 2], 'same'), denseBlockParams.conv0.bias) - : depthwiseSeparableConv(x, denseBlockParams.conv0, [2, 2])); - var out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]); - var in3 = tf.relu(tf.add(out1, out2)); - var out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]); - return tf.relu(tf.add(out1, tf.add(out2, out3))); - }); -} -export function denseBlock4(x, denseBlockParams, isFirstLayer, isScaleDown) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - if (isScaleDown === void 0) { isScaleDown = true; } - return tf.tidy(function () { - var out1 = tf.relu(isFirstLayer - ? tf.add(tf.conv2d(x, denseBlockParams.conv0.filters, isScaleDown ? [2, 2] : [1, 1], 'same'), denseBlockParams.conv0.bias) - : depthwiseSeparableConv(x, denseBlockParams.conv0, isScaleDown ? [2, 2] : [1, 1])); - var out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]); - var in3 = tf.relu(tf.add(out1, out2)); - var out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]); - var in4 = tf.relu(tf.add(out1, tf.add(out2, out3))); - var out4 = depthwiseSeparableConv(in4, denseBlockParams.conv3, [1, 1]); - return tf.relu(tf.add(out1, tf.add(out2, tf.add(out3, out4)))); - }); -} -//# sourceMappingURL=denseBlock.js.map \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/denseBlock.js.map b/build/es6/faceFeatureExtractor/denseBlock.js.map deleted file mode 100644 index a06e45bd..00000000 --- a/build/es6/faceFeatureExtractor/denseBlock.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"denseBlock.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/denseBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAG5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,MAAM,UAAU,WAAW,CACzB,CAAc,EACd,gBAAmC,EACnC,YAA6B;IAA7B,6BAAA,EAAA,oBAA6B;IAE7B,OAAO,EAAE,CAAC,IAAI,CAAC;QACb,IAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAClB,YAAY;YACV,CAAC,CAAC,EAAE,CAAC,GAAG,CACN,EAAE,CAAC,MAAM,CAAC,CAAC,EAAG,gBAAgB,CAAC,KAA6C,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,EACrG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAC5B;YACD,CAAC,CAAC,sBAAsB,CAAC,CAAC,EAAE,gBAAgB,CAAC,KAAqD,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAC/F,CAAA;QAChB,IAAM,IAAI,GAAG,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEzE,IAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAgB,CAAA;QACtD,IAAM,IAAI,GAAG,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAExE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAgB,CAAA;IACjE,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,CAAc,EACd,gBAAmC,EACnC,YAA6B,EAC7B,WAA2B;IAD3B,6BAAA,EAAA,oBAA6B;IAC7B,4BAAA,EAAA,kBAA2B;IAE3B,OAAO,EAAE,CAAC,IAAI,CAAC;QACb,IAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAClB,YAAY;YACV,CAAC,CAAC,EAAE,CAAC,GAAG,CACN,EAAE,CAAC,MAAM,CAAC,CAAC,EAAG,gBAAgB,CAAC,KAA6C,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,EAC5H,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAC5B;YACD,CAAC,CAAC,sBAAsB,CAAC,CAAC,EAAE,gBAAgB,CAAC,KAAqD,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACtH,CAAA;QAChB,IAAM,IAAI,GAAG,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEzE,IAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAgB,CAAA;QACtD,IAAM,IAAI,GAAG,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAExE,IAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAgB,CAAA;QACpE,IAAM,IAAI,GAAG,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAExE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAgB,CAAA;IAC/E,CAAC,CAAC,CAAA;AACJ,CAAC"} \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/depthwiseSeparableConv.d.ts b/build/es6/faceFeatureExtractor/depthwiseSeparableConv.d.ts deleted file mode 100644 index 10ada1a9..00000000 --- a/build/es6/faceFeatureExtractor/depthwiseSeparableConv.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export declare function depthwiseSeparableConv(x: tf.Tensor4D, params: TfjsImageRecognitionBase.SeparableConvParams, stride: [number, number]): tf.Tensor4D; diff --git a/build/es6/faceFeatureExtractor/depthwiseSeparableConv.js b/build/es6/faceFeatureExtractor/depthwiseSeparableConv.js deleted file mode 100644 index 7c8669d2..00000000 --- a/build/es6/faceFeatureExtractor/depthwiseSeparableConv.js +++ /dev/null @@ -1,9 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export function depthwiseSeparableConv(x, params, stride) { - return tf.tidy(function () { - var out = tf.separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same'); - out = tf.add(out, params.bias); - return out; - }); -} -//# sourceMappingURL=depthwiseSeparableConv.js.map \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/depthwiseSeparableConv.js.map b/build/es6/faceFeatureExtractor/depthwiseSeparableConv.js.map deleted file mode 100644 index 0710be72..00000000 --- a/build/es6/faceFeatureExtractor/depthwiseSeparableConv.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"depthwiseSeparableConv.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/depthwiseSeparableConv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAG5C,MAAM,UAAU,sBAAsB,CACpC,CAAc,EACd,MAAoD,EACpD,MAAwB;IAExB,OAAO,EAAE,CAAC,IAAI,CAAC;QACb,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QACjG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9B,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC"} \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/extractParams.d.ts b/build/es6/faceFeatureExtractor/extractParams.d.ts deleted file mode 100644 index acbea252..00000000 --- a/build/es6/faceFeatureExtractor/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { FaceFeatureExtractorParams } from './types'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export declare function extractParams(weights: Float32Array): { - params: FaceFeatureExtractorParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/es6/faceFeatureExtractor/extractParams.js b/build/es6/faceFeatureExtractor/extractParams.js deleted file mode 100644 index 08e989fd..00000000 --- a/build/es6/faceFeatureExtractor/extractParams.js +++ /dev/null @@ -1,19 +0,0 @@ -import { extractorsFactory } from './extractorsFactory'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export function extractParams(weights) { - var paramMappings = []; - var _a = TfjsImageRecognitionBase.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var extractDenseBlock4Params = extractorsFactory(extractWeights, paramMappings).extractDenseBlock4Params; - var dense0 = extractDenseBlock4Params(3, 32, 'dense0', true); - var dense1 = extractDenseBlock4Params(32, 64, 'dense1'); - var dense2 = extractDenseBlock4Params(64, 128, 'dense2'); - var dense3 = extractDenseBlock4Params(128, 256, 'dense3'); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { - paramMappings: paramMappings, - params: { dense0: dense0, dense1: dense1, dense2: dense2, dense3: dense3 } - }; -} -//# sourceMappingURL=extractParams.js.map \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/extractParams.js.map b/build/es6/faceFeatureExtractor/extractParams.js.map deleted file mode 100644 index 994ae2f1..00000000 --- a/build/es6/faceFeatureExtractor/extractParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/extractParams.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,MAAM,UAAU,aAAa,CAAC,OAAqB;IAEjD,IAAM,aAAa,GAA4C,EAAE,CAAA;IAE3D,IAAA,4DAGqD,EAFzD,kCAAc,EACd,4CACyD,CAAA;IAGzD,IAAA,oGAAwB,CAC0B;IAEpD,IAAM,MAAM,GAAG,wBAAwB,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;IAC9D,IAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAA;IACzD,IAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC1D,IAAM,MAAM,GAAG,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;IAE3D,IAAI,mBAAmB,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,oCAAkC,mBAAmB,EAAE,CAAC,MAAQ,CAAC,CAAA;KAClF;IAED,OAAO;QACL,aAAa,eAAA;QACb,MAAM,EAAE,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE;KAC3C,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/extractParamsFromWeigthMap.d.ts b/build/es6/faceFeatureExtractor/extractParamsFromWeigthMap.d.ts deleted file mode 100644 index 5c964fcc..00000000 --- a/build/es6/faceFeatureExtractor/extractParamsFromWeigthMap.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { FaceFeatureExtractorParams } from './types'; -export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: FaceFeatureExtractorParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/es6/faceFeatureExtractor/extractParamsFromWeigthMap.js b/build/es6/faceFeatureExtractor/extractParamsFromWeigthMap.js deleted file mode 100644 index 7deb60de..00000000 --- a/build/es6/faceFeatureExtractor/extractParamsFromWeigthMap.js +++ /dev/null @@ -1,15 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { loadParamsFactory } from './loadParamsFactory'; -export function extractParamsFromWeigthMap(weightMap) { - var paramMappings = []; - var extractDenseBlock4Params = loadParamsFactory(weightMap, paramMappings).extractDenseBlock4Params; - var params = { - dense0: extractDenseBlock4Params('dense0', true), - dense1: extractDenseBlock4Params('dense1'), - dense2: extractDenseBlock4Params('dense2'), - dense3: extractDenseBlock4Params('dense3') - }; - TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: params, paramMappings: paramMappings }; -} -//# sourceMappingURL=extractParamsFromWeigthMap.js.map \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/extractParamsFromWeigthMap.js.map b/build/es6/faceFeatureExtractor/extractParamsFromWeigthMap.js.map deleted file mode 100644 index ab580ee6..00000000 --- a/build/es6/faceFeatureExtractor/extractParamsFromWeigthMap.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParamsFromWeigthMap.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/extractParamsFromWeigthMap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,UAAU,0BAA0B,CACxC,SAA4B;IAG5B,IAAM,aAAa,GAA4C,EAAE,CAAA;IAG/D,IAAA,+FAAwB,CACqB;IAE/C,IAAM,MAAM,GAAG;QACb,MAAM,EAAE,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC;QAChD,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;QAC1C,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;QAC1C,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;KAC3C,CAAA;IAED,wBAAwB,CAAC,0BAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAE7E,OAAO,EAAE,MAAM,QAAA,EAAE,aAAa,eAAA,EAAE,CAAA;AAClC,CAAC"} \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/extractParamsFromWeigthMapTiny.d.ts b/build/es6/faceFeatureExtractor/extractParamsFromWeigthMapTiny.d.ts deleted file mode 100644 index 7d597dd2..00000000 --- a/build/es6/faceFeatureExtractor/extractParamsFromWeigthMapTiny.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { TinyFaceFeatureExtractorParams } from './types'; -export declare function extractParamsFromWeigthMapTiny(weightMap: tf.NamedTensorMap): { - params: TinyFaceFeatureExtractorParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/es6/faceFeatureExtractor/extractParamsFromWeigthMapTiny.js b/build/es6/faceFeatureExtractor/extractParamsFromWeigthMapTiny.js deleted file mode 100644 index 2b2ea419..00000000 --- a/build/es6/faceFeatureExtractor/extractParamsFromWeigthMapTiny.js +++ /dev/null @@ -1,14 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { loadParamsFactory } from './loadParamsFactory'; -export function extractParamsFromWeigthMapTiny(weightMap) { - var paramMappings = []; - var extractDenseBlock3Params = loadParamsFactory(weightMap, paramMappings).extractDenseBlock3Params; - var params = { - dense0: extractDenseBlock3Params('dense0', true), - dense1: extractDenseBlock3Params('dense1'), - dense2: extractDenseBlock3Params('dense2') - }; - TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: params, paramMappings: paramMappings }; -} -//# sourceMappingURL=extractParamsFromWeigthMapTiny.js.map \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/extractParamsFromWeigthMapTiny.js.map b/build/es6/faceFeatureExtractor/extractParamsFromWeigthMapTiny.js.map deleted file mode 100644 index e765da78..00000000 --- a/build/es6/faceFeatureExtractor/extractParamsFromWeigthMapTiny.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParamsFromWeigthMapTiny.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,UAAU,8BAA8B,CAC5C,SAA4B;IAG5B,IAAM,aAAa,GAA4C,EAAE,CAAA;IAG/D,IAAA,+FAAwB,CACqB;IAE/C,IAAM,MAAM,GAAG;QACb,MAAM,EAAE,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC;QAChD,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;QAC1C,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;KAC3C,CAAA;IAED,wBAAwB,CAAC,0BAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAE7E,OAAO,EAAE,MAAM,QAAA,EAAE,aAAa,eAAA,EAAE,CAAA;AAClC,CAAC"} \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/extractParamsTiny.d.ts b/build/es6/faceFeatureExtractor/extractParamsTiny.d.ts deleted file mode 100644 index 4f623185..00000000 --- a/build/es6/faceFeatureExtractor/extractParamsTiny.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { TinyFaceFeatureExtractorParams } from './types'; -export declare function extractParamsTiny(weights: Float32Array): { - params: TinyFaceFeatureExtractorParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/es6/faceFeatureExtractor/extractParamsTiny.js b/build/es6/faceFeatureExtractor/extractParamsTiny.js deleted file mode 100644 index 51b04c62..00000000 --- a/build/es6/faceFeatureExtractor/extractParamsTiny.js +++ /dev/null @@ -1,18 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { extractorsFactory } from './extractorsFactory'; -export function extractParamsTiny(weights) { - var paramMappings = []; - var _a = TfjsImageRecognitionBase.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var extractDenseBlock3Params = extractorsFactory(extractWeights, paramMappings).extractDenseBlock3Params; - var dense0 = extractDenseBlock3Params(3, 32, 'dense0', true); - var dense1 = extractDenseBlock3Params(32, 64, 'dense1'); - var dense2 = extractDenseBlock3Params(64, 128, 'dense2'); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { - paramMappings: paramMappings, - params: { dense0: dense0, dense1: dense1, dense2: dense2 } - }; -} -//# sourceMappingURL=extractParamsTiny.js.map \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/extractParamsTiny.js.map b/build/es6/faceFeatureExtractor/extractParamsTiny.js.map deleted file mode 100644 index 9292e0fa..00000000 --- a/build/es6/faceFeatureExtractor/extractParamsTiny.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParamsTiny.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/extractParamsTiny.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAIxD,MAAM,UAAU,iBAAiB,CAAC,OAAqB;IAErD,IAAM,aAAa,GAA4C,EAAE,CAAA;IAE3D,IAAA,4DAGqD,EAFzD,kCAAc,EACd,4CACyD,CAAA;IAGzD,IAAA,oGAAwB,CAC0B;IAEpD,IAAM,MAAM,GAAG,wBAAwB,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;IAC9D,IAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAA;IACzD,IAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;IAE1D,IAAI,mBAAmB,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,oCAAkC,mBAAmB,EAAE,CAAC,MAAQ,CAAC,CAAA;KAClF;IAED,OAAO;QACL,aAAa,eAAA;QACb,MAAM,EAAE,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE;KACnC,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/extractorsFactory.d.ts b/build/es6/faceFeatureExtractor/extractorsFactory.d.ts deleted file mode 100644 index 2c86c09e..00000000 --- a/build/es6/faceFeatureExtractor/extractorsFactory.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { DenseBlock3Params, DenseBlock4Params } from './types'; -export declare function extractorsFactory(extractWeights: TfjsImageRecognitionBase.ExtractWeightsFunction, paramMappings: TfjsImageRecognitionBase.ParamMapping[]): { - extractDenseBlock3Params: (channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer?: boolean) => DenseBlock3Params; - extractDenseBlock4Params: (channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer?: boolean) => DenseBlock4Params; -}; diff --git a/build/es6/faceFeatureExtractor/extractorsFactory.js b/build/es6/faceFeatureExtractor/extractorsFactory.js deleted file mode 100644 index d29ee003..00000000 --- a/build/es6/faceFeatureExtractor/extractorsFactory.js +++ /dev/null @@ -1,32 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export function extractorsFactory(extractWeights, paramMappings) { - function extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix) { - var depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]); - var pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]); - var bias = tf.tensor1d(extractWeights(channelsOut)); - paramMappings.push({ paramPath: mappedPrefix + "/depthwise_filter" }, { paramPath: mappedPrefix + "/pointwise_filter" }, { paramPath: mappedPrefix + "/bias" }); - return new TfjsImageRecognitionBase.SeparableConvParams(depthwise_filter, pointwise_filter, bias); - } - var extractConvParams = TfjsImageRecognitionBase.extractConvParamsFactory(extractWeights, paramMappings); - function extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - var conv0 = isFirstLayer - ? extractConvParams(channelsIn, channelsOut, 3, mappedPrefix + "/conv0") - : extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix + "/conv0"); - var conv1 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv1"); - var conv2 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv2"); - return { conv0: conv0, conv1: conv1, conv2: conv2 }; - } - function extractDenseBlock4Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - var _a = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer), conv0 = _a.conv0, conv1 = _a.conv1, conv2 = _a.conv2; - var conv3 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv3"); - return { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3 }; - } - return { - extractDenseBlock3Params: extractDenseBlock3Params, - extractDenseBlock4Params: extractDenseBlock4Params - }; -} -//# sourceMappingURL=extractorsFactory.js.map \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/extractorsFactory.js.map b/build/es6/faceFeatureExtractor/extractorsFactory.js.map deleted file mode 100644 index 30d5d5af..00000000 --- a/build/es6/faceFeatureExtractor/extractorsFactory.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractorsFactory.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/extractorsFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAIvE,MAAM,UAAU,iBAAiB,CAAC,cAA+D,EAAE,aAAsD;IAEvJ,SAAS,0BAA0B,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB;QAC/F,IAAM,gBAAgB,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;QAC/F,IAAM,gBAAgB,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAA;QAC/G,IAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAA;QAErD,aAAa,CAAC,IAAI,CAChB,EAAE,SAAS,EAAK,YAAY,sBAAmB,EAAE,EACjD,EAAE,SAAS,EAAK,YAAY,sBAAmB,EAAE,EACjD,EAAE,SAAS,EAAK,YAAY,UAAO,EAAE,CACtC,CAAA;QAED,OAAO,IAAI,wBAAwB,CAAC,mBAAmB,CACrD,gBAAgB,EAChB,gBAAgB,EAChB,IAAI,CACL,CAAA;IACH,CAAC;IAED,IAAM,iBAAiB,GAAG,wBAAwB,CAAC,wBAAwB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAE1G,SAAS,wBAAwB,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAE5H,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,EAAK,YAAY,WAAQ,CAAC;YACxE,CAAC,CAAC,0BAA0B,CAAC,UAAU,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAChF,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAC3F,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAE3F,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IAChC,CAAC;IAED,SAAS,wBAAwB,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAEtH,IAAA,kFAAuG,EAArG,gBAAK,EAAE,gBAAK,EAAE,gBAAuF,CAAA;QAC7G,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAE3F,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IACvC,CAAC;IAED,OAAO;QACL,wBAAwB,0BAAA;QACxB,wBAAwB,0BAAA;KACzB,CAAA;AAEH,CAAC"} \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/index.d.ts b/build/es6/faceFeatureExtractor/index.d.ts deleted file mode 100644 index 99061f84..00000000 --- a/build/es6/faceFeatureExtractor/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './FaceFeatureExtractor'; -export * from './TinyFaceFeatureExtractor'; diff --git a/build/es6/faceFeatureExtractor/index.js b/build/es6/faceFeatureExtractor/index.js deleted file mode 100644 index 149df2a2..00000000 --- a/build/es6/faceFeatureExtractor/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export * from './FaceFeatureExtractor'; -export * from './TinyFaceFeatureExtractor'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/index.js.map b/build/es6/faceFeatureExtractor/index.js.map deleted file mode 100644 index 431d20b1..00000000 --- a/build/es6/faceFeatureExtractor/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC"} \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/loadParamsFactory.d.ts b/build/es6/faceFeatureExtractor/loadParamsFactory.d.ts deleted file mode 100644 index eb88164e..00000000 --- a/build/es6/faceFeatureExtractor/loadParamsFactory.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { DenseBlock3Params, DenseBlock4Params } from './types'; -export declare function loadParamsFactory(weightMap: any, paramMappings: TfjsImageRecognitionBase.ParamMapping[]): { - extractDenseBlock3Params: (prefix: string, isFirstLayer?: boolean) => DenseBlock3Params; - extractDenseBlock4Params: (prefix: string, isFirstLayer?: boolean) => DenseBlock4Params; -}; diff --git a/build/es6/faceFeatureExtractor/loadParamsFactory.js b/build/es6/faceFeatureExtractor/loadParamsFactory.js deleted file mode 100644 index 5dbb2f85..00000000 --- a/build/es6/faceFeatureExtractor/loadParamsFactory.js +++ /dev/null @@ -1,39 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export function loadParamsFactory(weightMap, paramMappings) { - var extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings); - function extractConvParams(prefix) { - var filters = extractWeightEntry(prefix + "/filters", 4); - var bias = extractWeightEntry(prefix + "/bias", 1); - return { filters: filters, bias: bias }; - } - function extractSeparableConvParams(prefix) { - var depthwise_filter = extractWeightEntry(prefix + "/depthwise_filter", 4); - var pointwise_filter = extractWeightEntry(prefix + "/pointwise_filter", 4); - var bias = extractWeightEntry(prefix + "/bias", 1); - return new TfjsImageRecognitionBase.SeparableConvParams(depthwise_filter, pointwise_filter, bias); - } - function extractDenseBlock3Params(prefix, isFirstLayer) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - var conv0 = isFirstLayer - ? extractConvParams(prefix + "/conv0") - : extractSeparableConvParams(prefix + "/conv0"); - var conv1 = extractSeparableConvParams(prefix + "/conv1"); - var conv2 = extractSeparableConvParams(prefix + "/conv2"); - return { conv0: conv0, conv1: conv1, conv2: conv2 }; - } - function extractDenseBlock4Params(prefix, isFirstLayer) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - var conv0 = isFirstLayer - ? extractConvParams(prefix + "/conv0") - : extractSeparableConvParams(prefix + "/conv0"); - var conv1 = extractSeparableConvParams(prefix + "/conv1"); - var conv2 = extractSeparableConvParams(prefix + "/conv2"); - var conv3 = extractSeparableConvParams(prefix + "/conv3"); - return { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3 }; - } - return { - extractDenseBlock3Params: extractDenseBlock3Params, - extractDenseBlock4Params: extractDenseBlock4Params - }; -} -//# sourceMappingURL=loadParamsFactory.js.map \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/loadParamsFactory.js.map b/build/es6/faceFeatureExtractor/loadParamsFactory.js.map deleted file mode 100644 index 3c68ecdf..00000000 --- a/build/es6/faceFeatureExtractor/loadParamsFactory.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"loadParamsFactory.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/loadParamsFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAIvE,MAAM,UAAU,iBAAiB,CAAC,SAAc,EAAE,aAAsD;IAEtG,IAAM,kBAAkB,GAAG,wBAAwB,CAAC,yBAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAEvG,SAAS,iBAAiB,CAAC,MAAc;QACvC,IAAM,OAAO,GAAG,kBAAkB,CAAiB,MAAM,aAAU,EAAE,CAAC,CAAC,CAAA;QACvE,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QAEjE,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC;IAED,SAAS,0BAA0B,CAAC,MAAc;QAChD,IAAM,gBAAgB,GAAG,kBAAkB,CAAiB,MAAM,sBAAmB,EAAE,CAAC,CAAC,CAAA;QACzF,IAAM,gBAAgB,GAAG,kBAAkB,CAAiB,MAAM,sBAAmB,EAAE,CAAC,CAAC,CAAA;QACzF,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QAEjE,OAAO,IAAI,wBAAwB,CAAC,mBAAmB,CACrD,gBAAgB,EAChB,gBAAgB,EAChB,IAAI,CACL,CAAA;IACH,CAAC;IAED,SAAS,wBAAwB,CAAC,MAAc,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAC7E,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAI,MAAM,WAAQ,CAAC;YACtC,CAAC,CAAC,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QACjD,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAE3D,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IAChC,CAAC;IAED,SAAS,wBAAwB,CAAC,MAAc,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAC7E,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAI,MAAM,WAAQ,CAAC;YACtC,CAAC,CAAC,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QACjD,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAE3D,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IACvC,CAAC;IAED,OAAO;QACL,wBAAwB,0BAAA;QACxB,wBAAwB,0BAAA;KACzB,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/types.d.ts b/build/es6/faceFeatureExtractor/types.d.ts deleted file mode 100644 index b6e3a222..00000000 --- a/build/es6/faceFeatureExtractor/types.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, NeuralNetwork, TNetInput, TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export declare type ConvWithBatchNormParams = BatchNormParams & { - filter: tf.Tensor4D; -}; -export declare type BatchNormParams = { - mean: tf.Tensor1D; - variance: tf.Tensor1D; - scale: tf.Tensor1D; - offset: tf.Tensor1D; -}; -export declare type SeparableConvWithBatchNormParams = { - depthwise: ConvWithBatchNormParams; - pointwise: ConvWithBatchNormParams; -}; -export declare type DenseBlock3Params = { - conv0: TfjsImageRecognitionBase.SeparableConvParams | TfjsImageRecognitionBase.ConvParams; - conv1: TfjsImageRecognitionBase.SeparableConvParams; - conv2: TfjsImageRecognitionBase.SeparableConvParams; -}; -export declare type DenseBlock4Params = DenseBlock3Params & { - conv3: TfjsImageRecognitionBase.SeparableConvParams; -}; -export declare type TinyFaceFeatureExtractorParams = { - dense0: DenseBlock3Params; - dense1: DenseBlock3Params; - dense2: DenseBlock3Params; -}; -export declare type FaceFeatureExtractorParams = { - dense0: DenseBlock4Params; - dense1: DenseBlock4Params; - dense2: DenseBlock4Params; - dense3: DenseBlock4Params; -}; -export interface IFaceFeatureExtractor extends NeuralNetwork { - forwardInput(input: NetInput): tf.Tensor4D; - forward(input: TNetInput): Promise; -} diff --git a/build/es6/faceFeatureExtractor/types.js b/build/es6/faceFeatureExtractor/types.js deleted file mode 100644 index 5b2306a4..00000000 --- a/build/es6/faceFeatureExtractor/types.js +++ /dev/null @@ -1 +0,0 @@ -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/es6/faceFeatureExtractor/types.js.map b/build/es6/faceFeatureExtractor/types.js.map deleted file mode 100644 index d4dd37d8..00000000 --- a/build/es6/faceFeatureExtractor/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/FaceLandmark68Net.d.ts b/build/es6/faceLandmarkNet/FaceLandmark68Net.d.ts deleted file mode 100644 index ba213c97..00000000 --- a/build/es6/faceLandmarkNet/FaceLandmark68Net.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor'; -import { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types'; -import { FaceLandmark68NetBase } from './FaceLandmark68NetBase'; -export declare class FaceLandmark68Net extends FaceLandmark68NetBase { - constructor(faceFeatureExtractor?: FaceFeatureExtractor); - protected getDefaultModelName(): string; - protected getClassifierChannelsIn(): number; -} diff --git a/build/es6/faceLandmarkNet/FaceLandmark68Net.js b/build/es6/faceLandmarkNet/FaceLandmark68Net.js deleted file mode 100644 index 0783d789..00000000 --- a/build/es6/faceLandmarkNet/FaceLandmark68Net.js +++ /dev/null @@ -1,19 +0,0 @@ -import * as tslib_1 from "tslib"; -import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor'; -import { FaceLandmark68NetBase } from './FaceLandmark68NetBase'; -var FaceLandmark68Net = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmark68Net, _super); - function FaceLandmark68Net(faceFeatureExtractor) { - if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new FaceFeatureExtractor(); } - return _super.call(this, 'FaceLandmark68Net', faceFeatureExtractor) || this; - } - FaceLandmark68Net.prototype.getDefaultModelName = function () { - return 'face_landmark_68_model'; - }; - FaceLandmark68Net.prototype.getClassifierChannelsIn = function () { - return 256; - }; - return FaceLandmark68Net; -}(FaceLandmark68NetBase)); -export { FaceLandmark68Net }; -//# sourceMappingURL=FaceLandmark68Net.js.map \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/FaceLandmark68Net.js.map b/build/es6/faceLandmarkNet/FaceLandmark68Net.js.map deleted file mode 100644 index c10881cb..00000000 --- a/build/es6/faceLandmarkNet/FaceLandmark68Net.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceLandmark68Net.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/FaceLandmark68Net.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AAEpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;IAAuC,6CAAiD;IAEtF,2BAAY,oBAAuE;QAAvE,qCAAA,EAAA,2BAAiD,oBAAoB,EAAE;eACjF,kBAAM,mBAAmB,EAAE,oBAAoB,CAAC;IAClD,CAAC;IAES,+CAAmB,GAA7B;QACE,OAAO,wBAAwB,CAAA;IACjC,CAAC;IAES,mDAAuB,GAAjC;QACE,OAAO,GAAG,CAAA;IACZ,CAAC;IACH,wBAAC;AAAD,CAAC,AAbD,CAAuC,qBAAqB,GAa3D"} \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/FaceLandmark68NetBase.d.ts b/build/es6/faceLandmarkNet/FaceLandmark68NetBase.d.ts deleted file mode 100644 index 49c9c774..00000000 --- a/build/es6/faceLandmarkNet/FaceLandmark68NetBase.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { IDimensions, NetInput, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceLandmarks68 } from '../classes/FaceLandmarks68'; -import { FaceFeatureExtractorParams, TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types'; -import { FaceProcessor } from '../faceProcessor/FaceProcessor'; -export declare abstract class FaceLandmark68NetBase extends FaceProcessor { - postProcess(output: tf.Tensor2D, inputSize: number, originalDimensions: IDimensions[]): tf.Tensor2D; - forwardInput(input: NetInput): tf.Tensor2D; - forward(input: TNetInput): Promise; - detectLandmarks(input: TNetInput): Promise; - protected getClassifierChannelsOut(): number; -} diff --git a/build/es6/faceLandmarkNet/FaceLandmark68NetBase.js b/build/es6/faceLandmarkNet/FaceLandmark68NetBase.js deleted file mode 100644 index f55048cf..00000000 --- a/build/es6/faceLandmarkNet/FaceLandmark68NetBase.js +++ /dev/null @@ -1,112 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { isEven, Point, toNetInput } from 'tfjs-image-recognition-base'; -import { FaceLandmarks68 } from '../classes/FaceLandmarks68'; -import { FaceProcessor } from '../faceProcessor/FaceProcessor'; -var FaceLandmark68NetBase = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmark68NetBase, _super); - function FaceLandmark68NetBase() { - return _super !== null && _super.apply(this, arguments) || this; - } - FaceLandmark68NetBase.prototype.postProcess = function (output, inputSize, originalDimensions) { - var inputDimensions = originalDimensions.map(function (_a) { - var width = _a.width, height = _a.height; - var scale = inputSize / Math.max(height, width); - return { - width: width * scale, - height: height * scale - }; - }); - var batchSize = inputDimensions.length; - return tf.tidy(function () { - var createInterleavedTensor = function (fillX, fillY) { - return tf.stack([ - tf.fill([68], fillX), - tf.fill([68], fillY) - ], 1).as2D(1, 136).as1D(); - }; - var getPadding = function (batchIdx, cond) { - var _a = inputDimensions[batchIdx], width = _a.width, height = _a.height; - return cond(width, height) ? Math.abs(width - height) / 2 : 0; - }; - var getPaddingX = function (batchIdx) { return getPadding(batchIdx, function (w, h) { return w < h; }); }; - var getPaddingY = function (batchIdx) { return getPadding(batchIdx, function (w, h) { return h < w; }); }; - var landmarkTensors = output - .mul(tf.fill([batchSize, 136], inputSize)) - .sub(tf.stack(Array.from(Array(batchSize), function (_, batchIdx) { - return createInterleavedTensor(getPaddingX(batchIdx), getPaddingY(batchIdx)); - }))) - .div(tf.stack(Array.from(Array(batchSize), function (_, batchIdx) { - return createInterleavedTensor(inputDimensions[batchIdx].width, inputDimensions[batchIdx].height); - }))); - return landmarkTensors; - }); - }; - FaceLandmark68NetBase.prototype.forwardInput = function (input) { - var _this = this; - return tf.tidy(function () { - var out = _this.runNet(input); - return _this.postProcess(out, input.inputSize, input.inputDimensions.map(function (_a) { - var height = _a[0], width = _a[1]; - return ({ height: height, width: width }); - })); - }); - }; - FaceLandmark68NetBase.prototype.forward = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - FaceLandmark68NetBase.prototype.detectLandmarks = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var netInput, landmarkTensors, landmarksForBatch; - var _this = this; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, toNetInput(input)]; - case 1: - netInput = _a.sent(); - landmarkTensors = tf.tidy(function () { return tf.unstack(_this.forwardInput(netInput)); }); - return [4 /*yield*/, Promise.all(landmarkTensors.map(function (landmarkTensor, batchIdx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { - var landmarksArray, _a, _b, xCoords, yCoords; - return tslib_1.__generator(this, function (_c) { - switch (_c.label) { - case 0: - _b = (_a = Array).from; - return [4 /*yield*/, landmarkTensor.data()]; - case 1: - landmarksArray = _b.apply(_a, [_c.sent()]); - xCoords = landmarksArray.filter(function (_, i) { return isEven(i); }); - yCoords = landmarksArray.filter(function (_, i) { return !isEven(i); }); - return [2 /*return*/, new FaceLandmarks68(Array(68).fill(0).map(function (_, i) { return new Point(xCoords[i], yCoords[i]); }), { - height: netInput.getInputHeight(batchIdx), - width: netInput.getInputWidth(batchIdx), - })]; - } - }); - }); }))]; - case 2: - landmarksForBatch = _a.sent(); - landmarkTensors.forEach(function (t) { return t.dispose(); }); - return [2 /*return*/, netInput.isBatchInput - ? landmarksForBatch - : landmarksForBatch[0]]; - } - }); - }); - }; - FaceLandmark68NetBase.prototype.getClassifierChannelsOut = function () { - return 136; - }; - return FaceLandmark68NetBase; -}(FaceProcessor)); -export { FaceLandmark68NetBase }; -//# sourceMappingURL=FaceLandmark68NetBase.js.map \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/FaceLandmark68NetBase.js.map b/build/es6/faceLandmarkNet/FaceLandmark68NetBase.js.map deleted file mode 100644 index d16b5f9d..00000000 --- a/build/es6/faceLandmarkNet/FaceLandmark68NetBase.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceLandmark68NetBase.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/FaceLandmark68NetBase.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/FaceLandmark68TinyNet.d.ts b/build/es6/faceLandmarkNet/FaceLandmark68TinyNet.d.ts deleted file mode 100644 index 58111879..00000000 --- a/build/es6/faceLandmarkNet/FaceLandmark68TinyNet.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { TinyFaceFeatureExtractor } from '../faceFeatureExtractor/TinyFaceFeatureExtractor'; -import { TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types'; -import { FaceLandmark68NetBase } from './FaceLandmark68NetBase'; -export declare class FaceLandmark68TinyNet extends FaceLandmark68NetBase { - constructor(faceFeatureExtractor?: TinyFaceFeatureExtractor); - protected getDefaultModelName(): string; - protected getClassifierChannelsIn(): number; -} diff --git a/build/es6/faceLandmarkNet/FaceLandmark68TinyNet.js b/build/es6/faceLandmarkNet/FaceLandmark68TinyNet.js deleted file mode 100644 index ce453753..00000000 --- a/build/es6/faceLandmarkNet/FaceLandmark68TinyNet.js +++ /dev/null @@ -1,19 +0,0 @@ -import * as tslib_1 from "tslib"; -import { TinyFaceFeatureExtractor } from '../faceFeatureExtractor/TinyFaceFeatureExtractor'; -import { FaceLandmark68NetBase } from './FaceLandmark68NetBase'; -var FaceLandmark68TinyNet = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmark68TinyNet, _super); - function FaceLandmark68TinyNet(faceFeatureExtractor) { - if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new TinyFaceFeatureExtractor(); } - return _super.call(this, 'FaceLandmark68TinyNet', faceFeatureExtractor) || this; - } - FaceLandmark68TinyNet.prototype.getDefaultModelName = function () { - return 'face_landmark_68_tiny_model'; - }; - FaceLandmark68TinyNet.prototype.getClassifierChannelsIn = function () { - return 128; - }; - return FaceLandmark68TinyNet; -}(FaceLandmark68NetBase)); -export { FaceLandmark68TinyNet }; -//# sourceMappingURL=FaceLandmark68TinyNet.js.map \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/FaceLandmark68TinyNet.js.map b/build/es6/faceLandmarkNet/FaceLandmark68TinyNet.js.map deleted file mode 100644 index b8082bd2..00000000 --- a/build/es6/faceLandmarkNet/FaceLandmark68TinyNet.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceLandmark68TinyNet.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/FaceLandmark68TinyNet.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AAE5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;IAA2C,iDAAqD;IAE9F,+BAAY,oBAA+E;QAA/E,qCAAA,EAAA,2BAAqD,wBAAwB,EAAE;eACzF,kBAAM,uBAAuB,EAAE,oBAAoB,CAAC;IACtD,CAAC;IAES,mDAAmB,GAA7B;QACE,OAAO,6BAA6B,CAAA;IACtC,CAAC;IAES,uDAAuB,GAAjC;QACE,OAAO,GAAG,CAAA;IACZ,CAAC;IACH,4BAAC;AAAD,CAAC,AAbD,CAA2C,qBAAqB,GAa/D"} \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/index.d.ts b/build/es6/faceLandmarkNet/index.d.ts deleted file mode 100644 index b49c3e83..00000000 --- a/build/es6/faceLandmarkNet/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { FaceLandmark68Net } from './FaceLandmark68Net'; -export * from './FaceLandmark68Net'; -export * from './FaceLandmark68TinyNet'; -export declare class FaceLandmarkNet extends FaceLandmark68Net { -} diff --git a/build/es6/faceLandmarkNet/index.js b/build/es6/faceLandmarkNet/index.js deleted file mode 100644 index eba5e0bd..00000000 --- a/build/es6/faceLandmarkNet/index.js +++ /dev/null @@ -1,13 +0,0 @@ -import * as tslib_1 from "tslib"; -import { FaceLandmark68Net } from './FaceLandmark68Net'; -export * from './FaceLandmark68Net'; -export * from './FaceLandmark68TinyNet'; -var FaceLandmarkNet = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmarkNet, _super); - function FaceLandmarkNet() { - return _super !== null && _super.apply(this, arguments) || this; - } - return FaceLandmarkNet; -}(FaceLandmark68Net)); -export { FaceLandmarkNet }; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/index.js.map b/build/es6/faceLandmarkNet/index.js.map deleted file mode 100644 index f8176d1f..00000000 --- a/build/es6/faceLandmarkNet/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AAExC;IAAqC,2CAAiB;IAAtD;;IAAwD,CAAC;IAAD,sBAAC;AAAD,CAAC,AAAzD,CAAqC,iBAAiB,GAAG"} \ No newline at end of file diff --git a/build/es6/faceProcessor/FaceProcessor.d.ts b/build/es6/faceProcessor/FaceProcessor.d.ts deleted file mode 100644 index b6d962c5..00000000 --- a/build/es6/faceProcessor/FaceProcessor.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, NeuralNetwork } from 'tfjs-image-recognition-base'; -import { FaceFeatureExtractorParams, IFaceFeatureExtractor, TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types'; -import { NetParams } from './types'; -export declare abstract class FaceProcessor extends NeuralNetwork { - protected _faceFeatureExtractor: IFaceFeatureExtractor; - constructor(_name: string, faceFeatureExtractor: IFaceFeatureExtractor); - readonly faceFeatureExtractor: IFaceFeatureExtractor; - protected abstract getDefaultModelName(): string; - protected abstract getClassifierChannelsIn(): number; - protected abstract getClassifierChannelsOut(): number; - runNet(input: NetInput | tf.Tensor4D): tf.Tensor2D; - dispose(throwOnRedispose?: boolean): void; - loadClassifierParams(weights: Float32Array): void; - extractClassifierParams(weights: Float32Array): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; - protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; - protected extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; -} diff --git a/build/es6/faceProcessor/FaceProcessor.js b/build/es6/faceProcessor/FaceProcessor.js deleted file mode 100644 index a30f7b35..00000000 --- a/build/es6/faceProcessor/FaceProcessor.js +++ /dev/null @@ -1,65 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, NeuralNetwork } from 'tfjs-image-recognition-base'; -import { fullyConnectedLayer } from '../common/fullyConnectedLayer'; -import { extractParams } from './extractParams'; -import { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap'; -import { seperateWeightMaps } from './util'; -var FaceProcessor = /** @class */ (function (_super) { - tslib_1.__extends(FaceProcessor, _super); - function FaceProcessor(_name, faceFeatureExtractor) { - var _this = _super.call(this, _name) || this; - _this._faceFeatureExtractor = faceFeatureExtractor; - return _this; - } - Object.defineProperty(FaceProcessor.prototype, "faceFeatureExtractor", { - get: function () { - return this._faceFeatureExtractor; - }, - enumerable: true, - configurable: true - }); - FaceProcessor.prototype.runNet = function (input) { - var _this = this; - var params = this.params; - if (!params) { - throw new Error(this._name + " - load model before inference"); - } - return tf.tidy(function () { - var bottleneckFeatures = input instanceof NetInput - ? _this.faceFeatureExtractor.forwardInput(input) - : input; - return fullyConnectedLayer(bottleneckFeatures.as2D(bottleneckFeatures.shape[0], -1), params.fc); - }); - }; - FaceProcessor.prototype.dispose = function (throwOnRedispose) { - if (throwOnRedispose === void 0) { throwOnRedispose = true; } - this.faceFeatureExtractor.dispose(throwOnRedispose); - _super.prototype.dispose.call(this, throwOnRedispose); - }; - FaceProcessor.prototype.loadClassifierParams = function (weights) { - var _a = this.extractClassifierParams(weights), params = _a.params, paramMappings = _a.paramMappings; - this._params = params; - this._paramMappings = paramMappings; - }; - FaceProcessor.prototype.extractClassifierParams = function (weights) { - return extractParams(weights, this.getClassifierChannelsIn(), this.getClassifierChannelsOut()); - }; - FaceProcessor.prototype.extractParamsFromWeigthMap = function (weightMap) { - var _a = seperateWeightMaps(weightMap), featureExtractorMap = _a.featureExtractorMap, classifierMap = _a.classifierMap; - this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap); - return extractParamsFromWeigthMap(classifierMap); - }; - FaceProcessor.prototype.extractParams = function (weights) { - var cIn = this.getClassifierChannelsIn(); - var cOut = this.getClassifierChannelsOut(); - var classifierWeightSize = (cOut * cIn) + cOut; - var featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize); - var classifierWeights = weights.slice(weights.length - classifierWeightSize); - this.faceFeatureExtractor.extractWeights(featureExtractorWeights); - return this.extractClassifierParams(classifierWeights); - }; - return FaceProcessor; -}(NeuralNetwork)); -export { FaceProcessor }; -//# sourceMappingURL=FaceProcessor.js.map \ No newline at end of file diff --git a/build/es6/faceProcessor/FaceProcessor.js.map b/build/es6/faceProcessor/FaceProcessor.js.map deleted file mode 100644 index d05c2bbd..00000000 --- a/build/es6/faceProcessor/FaceProcessor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceProcessor.js","sourceRoot":"","sources":["../../../src/faceProcessor/FaceProcessor.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/faceProcessor/extractParams.d.ts b/build/es6/faceProcessor/extractParams.d.ts deleted file mode 100644 index 950e0aab..00000000 --- a/build/es6/faceProcessor/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParams(weights: Float32Array, channelsIn: number, channelsOut: number): { - params: NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/es6/faceProcessor/extractParams.js b/build/es6/faceProcessor/extractParams.js deleted file mode 100644 index 12751707..00000000 --- a/build/es6/faceProcessor/extractParams.js +++ /dev/null @@ -1,15 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export function extractParams(weights, channelsIn, channelsOut) { - var paramMappings = []; - var _a = TfjsImageRecognitionBase.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var extractFCParams = TfjsImageRecognitionBase.extractFCParamsFactory(extractWeights, paramMappings); - var fc = extractFCParams(channelsIn, channelsOut, 'fc'); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { - paramMappings: paramMappings, - params: { fc: fc } - }; -} -//# sourceMappingURL=extractParams.js.map \ No newline at end of file diff --git a/build/es6/faceProcessor/extractParams.js.map b/build/es6/faceProcessor/extractParams.js.map deleted file mode 100644 index 56a3d0e5..00000000 --- a/build/es6/faceProcessor/extractParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/faceProcessor/extractParams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAIvE,MAAM,UAAU,aAAa,CAAC,OAAqB,EAAE,UAAkB,EAAE,WAAmB;IAE1F,IAAM,aAAa,GAA4C,EAAE,CAAA;IAE3D,IAAA,4DAGqD,EAFzD,kCAAc,EACd,4CACyD,CAAA;IAE3D,IAAM,eAAe,GAAG,wBAAwB,CAAC,sBAAsB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAEtG,IAAM,EAAE,GAAG,eAAe,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,CAAA;IAEzD,IAAI,mBAAmB,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,oCAAkC,mBAAmB,EAAE,CAAC,MAAQ,CAAC,CAAA;KAClF;IAED,OAAO;QACL,aAAa,eAAA;QACb,MAAM,EAAE,EAAE,EAAE,IAAA,EAAE;KACf,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/build/es6/faceProcessor/extractParamsFromWeigthMap.d.ts b/build/es6/faceProcessor/extractParamsFromWeigthMap.d.ts deleted file mode 100644 index 7bf5a66d..00000000 --- a/build/es6/faceProcessor/extractParamsFromWeigthMap.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/es6/faceProcessor/extractParamsFromWeigthMap.js b/build/es6/faceProcessor/extractParamsFromWeigthMap.js deleted file mode 100644 index 44fa08ee..00000000 --- a/build/es6/faceProcessor/extractParamsFromWeigthMap.js +++ /dev/null @@ -1,16 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export function extractParamsFromWeigthMap(weightMap) { - var paramMappings = []; - var extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings); - function extractFcParams(prefix) { - var weights = extractWeightEntry(prefix + "/weights", 2); - var bias = extractWeightEntry(prefix + "/bias", 1); - return { weights: weights, bias: bias }; - } - var params = { - fc: extractFcParams('fc') - }; - TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: params, paramMappings: paramMappings }; -} -//# sourceMappingURL=extractParamsFromWeigthMap.js.map \ No newline at end of file diff --git a/build/es6/faceProcessor/extractParamsFromWeigthMap.js.map b/build/es6/faceProcessor/extractParamsFromWeigthMap.js.map deleted file mode 100644 index 88b8f074..00000000 --- a/build/es6/faceProcessor/extractParamsFromWeigthMap.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParamsFromWeigthMap.js","sourceRoot":"","sources":["../../../src/faceProcessor/extractParamsFromWeigthMap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAIvE,MAAM,UAAU,0BAA0B,CACxC,SAA4B;IAG5B,IAAM,aAAa,GAA4C,EAAE,CAAA;IAEjE,IAAM,kBAAkB,GAAG,wBAAwB,CAAC,yBAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAEvG,SAAS,eAAe,CAAC,MAAc;QACrC,IAAM,OAAO,GAAG,kBAAkB,CAAiB,MAAM,aAAU,EAAE,CAAC,CAAC,CAAA;QACvE,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QACjE,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC;IAED,IAAM,MAAM,GAAG;QACb,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;KAC1B,CAAA;IAED,wBAAwB,CAAC,0BAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAE7E,OAAO,EAAE,MAAM,QAAA,EAAE,aAAa,eAAA,EAAE,CAAA;AAClC,CAAC"} \ No newline at end of file diff --git a/build/es6/faceProcessor/index.d.ts b/build/es6/faceProcessor/index.d.ts deleted file mode 100644 index 9e98e7d8..00000000 --- a/build/es6/faceProcessor/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './FaceProcessor'; diff --git a/build/es6/faceProcessor/index.js b/build/es6/faceProcessor/index.js deleted file mode 100644 index 43ae5c6f..00000000 --- a/build/es6/faceProcessor/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export * from './FaceProcessor'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/es6/faceProcessor/index.js.map b/build/es6/faceProcessor/index.js.map deleted file mode 100644 index 41e37046..00000000 --- a/build/es6/faceProcessor/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/faceProcessor/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"} \ No newline at end of file diff --git a/build/es6/faceProcessor/types.d.ts b/build/es6/faceProcessor/types.d.ts deleted file mode 100644 index 3cc54402..00000000 --- a/build/es6/faceProcessor/types.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export declare type NetParams = { - fc: TfjsImageRecognitionBase.FCParams; -}; diff --git a/build/es6/faceProcessor/types.js b/build/es6/faceProcessor/types.js deleted file mode 100644 index 5b2306a4..00000000 --- a/build/es6/faceProcessor/types.js +++ /dev/null @@ -1 +0,0 @@ -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/es6/faceProcessor/types.js.map b/build/es6/faceProcessor/types.js.map deleted file mode 100644 index 42a7693f..00000000 --- a/build/es6/faceProcessor/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/faceProcessor/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/build/es6/faceProcessor/util.d.ts b/build/es6/faceProcessor/util.d.ts deleted file mode 100644 index e28fedc0..00000000 --- a/build/es6/faceProcessor/util.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export declare function seperateWeightMaps(weightMap: tf.NamedTensorMap): { - featureExtractorMap: tf.NamedTensorMap; - classifierMap: tf.NamedTensorMap; -}; diff --git a/build/es6/faceProcessor/util.js b/build/es6/faceProcessor/util.js deleted file mode 100644 index 66558e9c..00000000 --- a/build/es6/faceProcessor/util.js +++ /dev/null @@ -1,10 +0,0 @@ -export function seperateWeightMaps(weightMap) { - var featureExtractorMap = {}; - var classifierMap = {}; - Object.keys(weightMap).forEach(function (key) { - var map = key.startsWith('fc') ? classifierMap : featureExtractorMap; - map[key] = weightMap[key]; - }); - return { featureExtractorMap: featureExtractorMap, classifierMap: classifierMap }; -} -//# sourceMappingURL=util.js.map \ No newline at end of file diff --git a/build/es6/faceProcessor/util.js.map b/build/es6/faceProcessor/util.js.map deleted file mode 100644 index 8fbf47ad..00000000 --- a/build/es6/faceProcessor/util.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/faceProcessor/util.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAC,SAA4B;IAE7D,IAAM,mBAAmB,GAAsB,EAAE,CAAA;IACjD,IAAM,aAAa,GAAsB,EAAE,CAAA;IAE3C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG;QAChC,IAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAA;QACtE,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,OAAO,EAAE,mBAAmB,qBAAA,EAAE,aAAa,eAAA,EAAE,CAAA;AAE/C,CAAC"} \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/FaceRecognitionNet.d.ts b/build/es6/faceRecognitionNet/FaceRecognitionNet.d.ts deleted file mode 100644 index 1fd59dab..00000000 --- a/build/es6/faceRecognitionNet/FaceRecognitionNet.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare class FaceRecognitionNet extends NeuralNetwork { - constructor(); - forwardInput(input: NetInput): tf.Tensor2D; - forward(input: TNetInput): Promise; - computeFaceDescriptor(input: TNetInput): Promise; - protected getDefaultModelName(): string; - protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; - protected extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; -} diff --git a/build/es6/faceRecognitionNet/FaceRecognitionNet.js b/build/es6/faceRecognitionNet/FaceRecognitionNet.js deleted file mode 100644 index 99865f9e..00000000 --- a/build/es6/faceRecognitionNet/FaceRecognitionNet.js +++ /dev/null @@ -1,89 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { NeuralNetwork, normalize, toNetInput } from 'tfjs-image-recognition-base'; -import { convDown } from './convLayer'; -import { extractParams } from './extractParams'; -import { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap'; -import { residual, residualDown } from './residualLayer'; -var FaceRecognitionNet = /** @class */ (function (_super) { - tslib_1.__extends(FaceRecognitionNet, _super); - function FaceRecognitionNet() { - return _super.call(this, 'FaceRecognitionNet') || this; - } - FaceRecognitionNet.prototype.forwardInput = function (input) { - var params = this.params; - if (!params) { - throw new Error('FaceRecognitionNet - load model before inference'); - } - return tf.tidy(function () { - var batchTensor = input.toBatchTensor(150, true).toFloat(); - var meanRgb = [122.782, 117.001, 104.298]; - var normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)); - var out = convDown(normalized, params.conv32_down); - out = tf.maxPool(out, 3, 2, 'valid'); - out = residual(out, params.conv32_1); - out = residual(out, params.conv32_2); - out = residual(out, params.conv32_3); - out = residualDown(out, params.conv64_down); - out = residual(out, params.conv64_1); - out = residual(out, params.conv64_2); - out = residual(out, params.conv64_3); - out = residualDown(out, params.conv128_down); - out = residual(out, params.conv128_1); - out = residual(out, params.conv128_2); - out = residualDown(out, params.conv256_down); - out = residual(out, params.conv256_1); - out = residual(out, params.conv256_2); - out = residualDown(out, params.conv256_down_out); - var globalAvg = out.mean([1, 2]); - var fullyConnected = tf.matMul(globalAvg, params.fc); - return fullyConnected; - }); - }; - FaceRecognitionNet.prototype.forward = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - FaceRecognitionNet.prototype.computeFaceDescriptor = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var netInput, faceDescriptorTensors, faceDescriptorsForBatch; - var _this = this; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, toNetInput(input)]; - case 1: - netInput = _a.sent(); - faceDescriptorTensors = tf.tidy(function () { return tf.unstack(_this.forwardInput(netInput)); }); - return [4 /*yield*/, Promise.all(faceDescriptorTensors.map(function (t) { return t.data(); }))]; - case 2: - faceDescriptorsForBatch = _a.sent(); - faceDescriptorTensors.forEach(function (t) { return t.dispose(); }); - return [2 /*return*/, netInput.isBatchInput - ? faceDescriptorsForBatch - : faceDescriptorsForBatch[0]]; - } - }); - }); - }; - FaceRecognitionNet.prototype.getDefaultModelName = function () { - return 'face_recognition_model'; - }; - FaceRecognitionNet.prototype.extractParamsFromWeigthMap = function (weightMap) { - return extractParamsFromWeigthMap(weightMap); - }; - FaceRecognitionNet.prototype.extractParams = function (weights) { - return extractParams(weights); - }; - return FaceRecognitionNet; -}(NeuralNetwork)); -export { FaceRecognitionNet }; -//# sourceMappingURL=FaceRecognitionNet.js.map \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/FaceRecognitionNet.js.map b/build/es6/faceRecognitionNet/FaceRecognitionNet.js.map deleted file mode 100644 index f5e65745..00000000 --- a/build/es6/faceRecognitionNet/FaceRecognitionNet.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceRecognitionNet.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/FaceRecognitionNet.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAY,aAAa,EAAE,SAAS,EAAa,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAExG,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIzD;IAAwC,8CAAwB;IAE9D;eACE,kBAAM,oBAAoB,CAAC;IAC7B,CAAC;IAEM,yCAAY,GAAnB,UAAoB,KAAe;QAEzB,IAAA,oBAAM,CAAS;QAEvB,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;SACpE;QAED,OAAO,EAAE,CAAC,IAAI,CAAC;YACb,IAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;YAE5D,IAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;YAC3C,IAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAgB,CAAA;YAErF,IAAI,GAAG,GAAG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;YAClD,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;YAEpC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YACpC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YACpC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YAEpC,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;YAC3C,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YACpC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YACpC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YAEpC,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;YAC5C,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;YACrC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;YAErC,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;YAC5C,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;YACrC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;YACrC,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;YAEhD,IAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAgB,CAAA;YACjD,IAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;YAEtD,OAAO,cAAc,CAAA;QACvB,CAAC,CAAC,CAAA;IACJ,CAAC;IAEY,oCAAO,GAApB,UAAqB,KAAgB;;;;;;wBAC5B,KAAA,IAAI,CAAC,YAAY,CAAA;wBAAC,qBAAM,UAAU,CAAC,KAAK,CAAC,EAAA;4BAAhD,sBAAO,SAAA,IAAI,GAAc,SAAuB,EAAC,EAAA;;;;KAClD;IAEY,kDAAqB,GAAlC,UAAmC,KAAgB;;;;;;4BAChC,qBAAM,UAAU,CAAC,KAAK,CAAC,EAAA;;wBAAlC,QAAQ,GAAG,SAAuB;wBAElC,qBAAqB,GAAG,EAAE,CAAC,IAAI,CACnC,cAAM,OAAA,EAAE,CAAC,OAAO,CAAC,KAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAvC,CAAuC,CAC9C,CAAA;wBAE+B,qBAAM,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,GAAG,CACzE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,EAAE,EAAR,CAAQ,CACd,CAAC,EAAA;;wBAFI,uBAAuB,GAAG,SAEZ;wBAEpB,qBAAqB,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,EAAE,EAAX,CAAW,CAAC,CAAA;wBAE/C,sBAAO,QAAQ,CAAC,YAAY;gCAC1B,CAAC,CAAC,uBAAuB;gCACzB,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAA;;;;KAC/B;IAES,gDAAmB,GAA7B;QACE,OAAO,wBAAwB,CAAA;IACjC,CAAC;IAES,uDAA0B,GAApC,UAAqC,SAA4B;QAC/D,OAAO,0BAA0B,CAAC,SAAS,CAAC,CAAA;IAC9C,CAAC;IAES,0CAAa,GAAvB,UAAwB,OAAqB;QAC3C,OAAO,aAAa,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC;IACH,yBAAC;AAAD,CAAC,AAjFD,CAAwC,aAAa,GAiFpD"} \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/convLayer.d.ts b/build/es6/faceRecognitionNet/convLayer.d.ts deleted file mode 100644 index a750f6c4..00000000 --- a/build/es6/faceRecognitionNet/convLayer.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { ConvLayerParams } from './types'; -export declare function conv(x: tf.Tensor4D, params: ConvLayerParams): tf.Tensor; -export declare function convNoRelu(x: tf.Tensor4D, params: ConvLayerParams): tf.Tensor; -export declare function convDown(x: tf.Tensor4D, params: ConvLayerParams): tf.Tensor; diff --git a/build/es6/faceRecognitionNet/convLayer.js b/build/es6/faceRecognitionNet/convLayer.js deleted file mode 100644 index e5d61651..00000000 --- a/build/es6/faceRecognitionNet/convLayer.js +++ /dev/null @@ -1,20 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { scale } from './scaleLayer'; -function convLayer(x, params, strides, withRelu, padding) { - if (padding === void 0) { padding = 'same'; } - var _a = params.conv, filters = _a.filters, bias = _a.bias; - var out = tf.conv2d(x, filters, strides, padding); - out = tf.add(out, bias); - out = scale(out, params.scale); - return withRelu ? tf.relu(out) : out; -} -export function conv(x, params) { - return convLayer(x, params, [1, 1], true); -} -export function convNoRelu(x, params) { - return convLayer(x, params, [1, 1], false); -} -export function convDown(x, params) { - return convLayer(x, params, [2, 2], true, 'valid'); -} -//# sourceMappingURL=convLayer.js.map \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/convLayer.js.map b/build/es6/faceRecognitionNet/convLayer.js.map deleted file mode 100644 index abb716ad..00000000 --- a/build/es6/faceRecognitionNet/convLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"convLayer.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/convLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAIrC,SAAS,SAAS,CAChB,CAAc,EACd,MAAuB,EACvB,OAAyB,EACzB,QAAiB,EACjB,OAAkC;IAAlC,wBAAA,EAAA,gBAAkC;IAE5B,IAAA,gBAA+B,EAA7B,oBAAO,EAAE,cAAoB,CAAA;IAErC,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IACjD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACvB,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IAC9B,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,CAAc,EAAE,MAAuB;IAC1D,OAAO,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,CAAc,EAAE,MAAuB;IAChE,OAAO,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAAc,EAAE,MAAuB;IAC9D,OAAO,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;AACpD,CAAC"} \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/extractParams.d.ts b/build/es6/faceRecognitionNet/extractParams.d.ts deleted file mode 100644 index 14d45d2b..00000000 --- a/build/es6/faceRecognitionNet/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/es6/faceRecognitionNet/extractParams.js b/build/es6/faceRecognitionNet/extractParams.js deleted file mode 100644 index d32fa899..00000000 --- a/build/es6/faceRecognitionNet/extractParams.js +++ /dev/null @@ -1,87 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { isFloat, TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -function extractorsFactory(extractWeights, paramMappings) { - function extractFilterValues(numFilterValues, numFilters, filterSize) { - var weights = extractWeights(numFilterValues); - var depth = weights.length / (numFilters * filterSize * filterSize); - if (isFloat(depth)) { - throw new Error("depth has to be an integer: " + depth + ", weights.length: " + weights.length + ", numFilters: " + numFilters + ", filterSize: " + filterSize); - } - return tf.tidy(function () { return tf.transpose(tf.tensor4d(weights, [numFilters, depth, filterSize, filterSize]), [2, 3, 1, 0]); }); - } - function extractConvParams(numFilterValues, numFilters, filterSize, mappedPrefix) { - var filters = extractFilterValues(numFilterValues, numFilters, filterSize); - var bias = tf.tensor1d(extractWeights(numFilters)); - paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/bias" }); - return { filters: filters, bias: bias }; - } - function extractScaleLayerParams(numWeights, mappedPrefix) { - var weights = tf.tensor1d(extractWeights(numWeights)); - var biases = tf.tensor1d(extractWeights(numWeights)); - paramMappings.push({ paramPath: mappedPrefix + "/weights" }, { paramPath: mappedPrefix + "/biases" }); - return { - weights: weights, - biases: biases - }; - } - function extractConvLayerParams(numFilterValues, numFilters, filterSize, mappedPrefix) { - var conv = extractConvParams(numFilterValues, numFilters, filterSize, mappedPrefix + "/conv"); - var scale = extractScaleLayerParams(numFilters, mappedPrefix + "/scale"); - return { conv: conv, scale: scale }; - } - function extractResidualLayerParams(numFilterValues, numFilters, filterSize, mappedPrefix, isDown) { - if (isDown === void 0) { isDown = false; } - var conv1 = extractConvLayerParams((isDown ? 0.5 : 1) * numFilterValues, numFilters, filterSize, mappedPrefix + "/conv1"); - var conv2 = extractConvLayerParams(numFilterValues, numFilters, filterSize, mappedPrefix + "/conv2"); - return { conv1: conv1, conv2: conv2 }; - } - return { - extractConvLayerParams: extractConvLayerParams, - extractResidualLayerParams: extractResidualLayerParams - }; -} -export function extractParams(weights) { - var _a = TfjsImageRecognitionBase.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var paramMappings = []; - var _b = extractorsFactory(extractWeights, paramMappings), extractConvLayerParams = _b.extractConvLayerParams, extractResidualLayerParams = _b.extractResidualLayerParams; - var conv32_down = extractConvLayerParams(4704, 32, 7, 'conv32_down'); - var conv32_1 = extractResidualLayerParams(9216, 32, 3, 'conv32_1'); - var conv32_2 = extractResidualLayerParams(9216, 32, 3, 'conv32_2'); - var conv32_3 = extractResidualLayerParams(9216, 32, 3, 'conv32_3'); - var conv64_down = extractResidualLayerParams(36864, 64, 3, 'conv64_down', true); - var conv64_1 = extractResidualLayerParams(36864, 64, 3, 'conv64_1'); - var conv64_2 = extractResidualLayerParams(36864, 64, 3, 'conv64_2'); - var conv64_3 = extractResidualLayerParams(36864, 64, 3, 'conv64_3'); - var conv128_down = extractResidualLayerParams(147456, 128, 3, 'conv128_down', true); - var conv128_1 = extractResidualLayerParams(147456, 128, 3, 'conv128_1'); - var conv128_2 = extractResidualLayerParams(147456, 128, 3, 'conv128_2'); - var conv256_down = extractResidualLayerParams(589824, 256, 3, 'conv256_down', true); - var conv256_1 = extractResidualLayerParams(589824, 256, 3, 'conv256_1'); - var conv256_2 = extractResidualLayerParams(589824, 256, 3, 'conv256_2'); - var conv256_down_out = extractResidualLayerParams(589824, 256, 3, 'conv256_down_out'); - var fc = tf.tidy(function () { return tf.transpose(tf.tensor2d(extractWeights(256 * 128), [128, 256]), [1, 0]); }); - paramMappings.push({ paramPath: "fc" }); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - var params = { - conv32_down: conv32_down, - conv32_1: conv32_1, - conv32_2: conv32_2, - conv32_3: conv32_3, - conv64_down: conv64_down, - conv64_1: conv64_1, - conv64_2: conv64_2, - conv64_3: conv64_3, - conv128_down: conv128_down, - conv128_1: conv128_1, - conv128_2: conv128_2, - conv256_down: conv256_down, - conv256_1: conv256_1, - conv256_2: conv256_2, - conv256_down_out: conv256_down_out, - fc: fc - }; - return { params: params, paramMappings: paramMappings }; -} -//# sourceMappingURL=extractParams.js.map \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/extractParams.js.map b/build/es6/faceRecognitionNet/extractParams.js.map deleted file mode 100644 index 910e51a0..00000000 --- a/build/es6/faceRecognitionNet/extractParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/extractParams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAIhF,SAAS,iBAAiB,CAAC,cAA+D,EAAE,aAAsD;IAEhJ,SAAS,mBAAmB,CAAC,eAAuB,EAAE,UAAkB,EAAE,UAAkB;QAC1F,IAAM,OAAO,GAAG,cAAc,CAAC,eAAe,CAAC,CAAA;QAC/C,IAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC,CAAA;QAErE,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,iCAA+B,KAAK,0BAAqB,OAAO,CAAC,MAAM,sBAAiB,UAAU,sBAAiB,UAAY,CAAC,CAAA;SACjJ;QAED,OAAO,EAAE,CAAC,IAAI,CACZ,cAAM,OAAA,EAAE,CAAC,SAAS,CAChB,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,EACjE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACb,EAHK,CAGL,CACF,CAAA;IACH,CAAC;IAED,SAAS,iBAAiB,CACxB,eAAuB,EACvB,UAAkB,EAClB,UAAkB,EAClB,YAAoB;QAGpB,IAAM,OAAO,GAAG,mBAAmB,CAAC,eAAe,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;QAC5E,IAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAA;QAEpD,aAAa,CAAC,IAAI,CAChB,EAAE,SAAS,EAAK,YAAY,aAAU,EAAE,EACxC,EAAE,SAAS,EAAK,YAAY,UAAO,EAAE,CACtC,CAAA;QAED,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC;IAED,SAAS,uBAAuB,CAAC,UAAkB,EAAE,YAAoB;QAEvE,IAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAA;QACvD,IAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAA;QAEtD,aAAa,CAAC,IAAI,CAChB,EAAE,SAAS,EAAK,YAAY,aAAU,EAAE,EACxC,EAAE,SAAS,EAAK,YAAY,YAAS,EAAE,CACxC,CAAA;QAED,OAAO;YACL,OAAO,SAAA;YACP,MAAM,QAAA;SACP,CAAA;IACH,CAAC;IAED,SAAS,sBAAsB,CAC7B,eAAuB,EACvB,UAAkB,EAClB,UAAkB,EAClB,YAAoB;QAGpB,IAAM,IAAI,GAAG,iBAAiB,CAAC,eAAe,EAAE,UAAU,EAAE,UAAU,EAAK,YAAY,UAAO,CAAC,CAAA;QAC/F,IAAM,KAAK,GAAG,uBAAuB,CAAC,UAAU,EAAK,YAAY,WAAQ,CAAC,CAAA;QAE1E,OAAO,EAAE,IAAI,MAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IACxB,CAAC;IAED,SAAS,0BAA0B,CACjC,eAAuB,EACvB,UAAkB,EAClB,UAAkB,EAClB,YAAoB,EACpB,MAAuB;QAAvB,uBAAA,EAAA,cAAuB;QAGvB,IAAM,KAAK,GAAG,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,EAAE,UAAU,EAAE,UAAU,EAAK,YAAY,WAAQ,CAAC,CAAA;QAC3H,IAAM,KAAK,GAAG,sBAAsB,CAAC,eAAe,EAAE,UAAU,EAAE,UAAU,EAAK,YAAY,WAAQ,CAAC,CAAA;QAEtG,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IACzB,CAAC;IAED,OAAO;QACL,sBAAsB,wBAAA;QACtB,0BAA0B,4BAAA;KAC3B,CAAA;AAEH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAqB;IAE3C,IAAA,4DAGqD,EAFzD,kCAAc,EACd,4CACyD,CAAA;IAE3D,IAAM,aAAa,GAA4C,EAAE,CAAA;IAE3D,IAAA,qDAG8C,EAFlD,kDAAsB,EACtB,0DACkD,CAAA;IAEpD,IAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,aAAa,CAAC,CAAA;IACtE,IAAM,QAAQ,GAAG,0BAA0B,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAA;IACpE,IAAM,QAAQ,GAAG,0BAA0B,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAA;IACpE,IAAM,QAAQ,GAAG,0BAA0B,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAA;IAEpE,IAAM,WAAW,GAAG,0BAA0B,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,CAAA;IACjF,IAAM,QAAQ,GAAG,0BAA0B,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAA;IACrE,IAAM,QAAQ,GAAG,0BAA0B,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAA;IACrE,IAAM,QAAQ,GAAG,0BAA0B,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAA;IAErE,IAAM,YAAY,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,CAAA;IACrF,IAAM,SAAS,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,CAAC,CAAA;IACzE,IAAM,SAAS,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,CAAC,CAAA;IAEzE,IAAM,YAAY,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,CAAA;IACrF,IAAM,SAAS,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,CAAC,CAAA;IACzE,IAAM,SAAS,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,CAAC,CAAA;IACzE,IAAM,gBAAgB,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAA;IAEvF,IAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAChB,cAAM,OAAA,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAxE,CAAwE,CAC/E,CAAA;IACD,aAAa,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEvC,IAAI,mBAAmB,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,oCAAkC,mBAAmB,EAAE,CAAC,MAAQ,CAAC,CAAA;KAClF;IAED,IAAM,MAAM,GAAG;QACb,WAAW,aAAA;QACX,QAAQ,UAAA;QACR,QAAQ,UAAA;QACR,QAAQ,UAAA;QACR,WAAW,aAAA;QACX,QAAQ,UAAA;QACR,QAAQ,UAAA;QACR,QAAQ,UAAA;QACR,YAAY,cAAA;QACZ,SAAS,WAAA;QACT,SAAS,WAAA;QACT,YAAY,cAAA;QACZ,SAAS,WAAA;QACT,SAAS,WAAA;QACT,gBAAgB,kBAAA;QAChB,EAAE,IAAA;KACH,CAAA;IAED,OAAO,EAAE,MAAM,QAAA,EAAE,aAAa,eAAA,EAAE,CAAA;AAClC,CAAC"} \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/extractParamsFromWeigthMap.d.ts b/build/es6/faceRecognitionNet/extractParamsFromWeigthMap.d.ts deleted file mode 100644 index 7bf5a66d..00000000 --- a/build/es6/faceRecognitionNet/extractParamsFromWeigthMap.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/es6/faceRecognitionNet/extractParamsFromWeigthMap.js b/build/es6/faceRecognitionNet/extractParamsFromWeigthMap.js deleted file mode 100644 index 55023114..00000000 --- a/build/es6/faceRecognitionNet/extractParamsFromWeigthMap.js +++ /dev/null @@ -1,70 +0,0 @@ -import { isTensor2D, TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -function extractorsFactory(weightMap, paramMappings) { - var extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings); - function extractScaleLayerParams(prefix) { - var weights = extractWeightEntry(prefix + "/scale/weights", 1); - var biases = extractWeightEntry(prefix + "/scale/biases", 1); - return { weights: weights, biases: biases }; - } - function extractConvLayerParams(prefix) { - var filters = extractWeightEntry(prefix + "/conv/filters", 4); - var bias = extractWeightEntry(prefix + "/conv/bias", 1); - var scale = extractScaleLayerParams(prefix); - return { conv: { filters: filters, bias: bias }, scale: scale }; - } - function extractResidualLayerParams(prefix) { - return { - conv1: extractConvLayerParams(prefix + "/conv1"), - conv2: extractConvLayerParams(prefix + "/conv2") - }; - } - return { - extractConvLayerParams: extractConvLayerParams, - extractResidualLayerParams: extractResidualLayerParams - }; -} -export function extractParamsFromWeigthMap(weightMap) { - var paramMappings = []; - var _a = extractorsFactory(weightMap, paramMappings), extractConvLayerParams = _a.extractConvLayerParams, extractResidualLayerParams = _a.extractResidualLayerParams; - var conv32_down = extractConvLayerParams('conv32_down'); - var conv32_1 = extractResidualLayerParams('conv32_1'); - var conv32_2 = extractResidualLayerParams('conv32_2'); - var conv32_3 = extractResidualLayerParams('conv32_3'); - var conv64_down = extractResidualLayerParams('conv64_down'); - var conv64_1 = extractResidualLayerParams('conv64_1'); - var conv64_2 = extractResidualLayerParams('conv64_2'); - var conv64_3 = extractResidualLayerParams('conv64_3'); - var conv128_down = extractResidualLayerParams('conv128_down'); - var conv128_1 = extractResidualLayerParams('conv128_1'); - var conv128_2 = extractResidualLayerParams('conv128_2'); - var conv256_down = extractResidualLayerParams('conv256_down'); - var conv256_1 = extractResidualLayerParams('conv256_1'); - var conv256_2 = extractResidualLayerParams('conv256_2'); - var conv256_down_out = extractResidualLayerParams('conv256_down_out'); - var fc = weightMap['fc']; - paramMappings.push({ originalPath: 'fc', paramPath: 'fc' }); - if (!isTensor2D(fc)) { - throw new Error("expected weightMap[fc] to be a Tensor2D, instead have " + fc); - } - var params = { - conv32_down: conv32_down, - conv32_1: conv32_1, - conv32_2: conv32_2, - conv32_3: conv32_3, - conv64_down: conv64_down, - conv64_1: conv64_1, - conv64_2: conv64_2, - conv64_3: conv64_3, - conv128_down: conv128_down, - conv128_1: conv128_1, - conv128_2: conv128_2, - conv256_down: conv256_down, - conv256_1: conv256_1, - conv256_2: conv256_2, - conv256_down_out: conv256_down_out, - fc: fc - }; - TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: params, paramMappings: paramMappings }; -} -//# sourceMappingURL=extractParamsFromWeigthMap.js.map \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/extractParamsFromWeigthMap.js.map b/build/es6/faceRecognitionNet/extractParamsFromWeigthMap.js.map deleted file mode 100644 index 97d73fb0..00000000 --- a/build/es6/faceRecognitionNet/extractParamsFromWeigthMap.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParamsFromWeigthMap.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/extractParamsFromWeigthMap.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/index.d.ts b/build/es6/faceRecognitionNet/index.d.ts deleted file mode 100644 index 487d6af4..00000000 --- a/build/es6/faceRecognitionNet/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { FaceRecognitionNet } from './FaceRecognitionNet'; -export * from './FaceRecognitionNet'; -export declare function createFaceRecognitionNet(weights: Float32Array): FaceRecognitionNet; diff --git a/build/es6/faceRecognitionNet/index.js b/build/es6/faceRecognitionNet/index.js deleted file mode 100644 index 0074593d..00000000 --- a/build/es6/faceRecognitionNet/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import { FaceRecognitionNet } from './FaceRecognitionNet'; -export * from './FaceRecognitionNet'; -export function createFaceRecognitionNet(weights) { - var net = new FaceRecognitionNet(); - net.extractWeights(weights); - return net; -} -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/index.js.map b/build/es6/faceRecognitionNet/index.js.map deleted file mode 100644 index c34c8a97..00000000 --- a/build/es6/faceRecognitionNet/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,cAAc,sBAAsB,CAAC;AAErC,MAAM,UAAU,wBAAwB,CAAC,OAAqB;IAC5D,IAAM,GAAG,GAAG,IAAI,kBAAkB,EAAE,CAAA;IACpC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC"} \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/residualLayer.d.ts b/build/es6/faceRecognitionNet/residualLayer.d.ts deleted file mode 100644 index 1656e0a0..00000000 --- a/build/es6/faceRecognitionNet/residualLayer.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { ResidualLayerParams } from './types'; -export declare function residual(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D; -export declare function residualDown(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D; diff --git a/build/es6/faceRecognitionNet/residualLayer.js b/build/es6/faceRecognitionNet/residualLayer.js deleted file mode 100644 index bfc1cb70..00000000 --- a/build/es6/faceRecognitionNet/residualLayer.js +++ /dev/null @@ -1,32 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { conv, convDown, convNoRelu } from './convLayer'; -export function residual(x, params) { - var out = conv(x, params.conv1); - out = convNoRelu(out, params.conv2); - out = tf.add(out, x); - out = tf.relu(out); - return out; -} -export function residualDown(x, params) { - var out = convDown(x, params.conv1); - out = convNoRelu(out, params.conv2); - var pooled = tf.avgPool(x, 2, 2, 'valid'); - var zeros = tf.zeros(pooled.shape); - var isPad = pooled.shape[3] !== out.shape[3]; - var isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2]; - if (isAdjustShape) { - var padShapeX = out.shape.slice(); - padShapeX[1] = 1; - var zerosW = tf.zeros(padShapeX); - out = tf.concat([out, zerosW], 1); - var padShapeY = out.shape.slice(); - padShapeY[2] = 1; - var zerosH = tf.zeros(padShapeY); - out = tf.concat([out, zerosH], 2); - } - pooled = isPad ? tf.concat([pooled, zeros], 3) : pooled; - out = tf.add(pooled, out); - out = tf.relu(out); - return out; -} -//# sourceMappingURL=residualLayer.js.map \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/residualLayer.js.map b/build/es6/faceRecognitionNet/residualLayer.js.map deleted file mode 100644 index 72c606d7..00000000 --- a/build/es6/faceRecognitionNet/residualLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"residualLayer.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/residualLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzD,MAAM,UAAU,QAAQ,CAAC,CAAc,EAAE,MAA2B;IAClE,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IAC/B,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IACnC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACpB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClB,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAc,EAAE,MAA2B;IACtE,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IACnC,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IAEnC,IAAI,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAgB,CAAA;IACxD,IAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAa,MAAM,CAAC,KAAK,CAAC,CAAA;IAChD,IAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC9C,IAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAE1F,IAAI,aAAa,EAAE;QACjB,IAAM,SAAS,GAAO,GAAG,CAAC,KAAK,QAAqC,CAAA;QACpE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAChB,IAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAa,SAAS,CAAC,CAAA;QAC9C,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAEjC,IAAM,SAAS,GAAO,GAAG,CAAC,KAAK,QAAqC,CAAA;QACpE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAChB,IAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAa,SAAS,CAAC,CAAA;QAC9C,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;KAClC;IAED,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IACvD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAgB,CAAA;IAExC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClB,OAAO,GAAG,CAAA;AACZ,CAAC"} \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/scaleLayer.d.ts b/build/es6/faceRecognitionNet/scaleLayer.d.ts deleted file mode 100644 index 07a866ea..00000000 --- a/build/es6/faceRecognitionNet/scaleLayer.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { ScaleLayerParams } from './types'; -export declare function scale(x: tf.Tensor4D, params: ScaleLayerParams): tf.Tensor4D; diff --git a/build/es6/faceRecognitionNet/scaleLayer.js b/build/es6/faceRecognitionNet/scaleLayer.js deleted file mode 100644 index 6c1b911e..00000000 --- a/build/es6/faceRecognitionNet/scaleLayer.js +++ /dev/null @@ -1,5 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export function scale(x, params) { - return tf.add(tf.mul(x, params.weights), params.biases); -} -//# sourceMappingURL=scaleLayer.js.map \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/scaleLayer.js.map b/build/es6/faceRecognitionNet/scaleLayer.js.map deleted file mode 100644 index 82536d2d..00000000 --- a/build/es6/faceRecognitionNet/scaleLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"scaleLayer.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/scaleLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAI5C,MAAM,UAAU,KAAK,CAAC,CAAc,EAAE,MAAwB;IAC5D,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;AACzD,CAAC"} \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/types.d.ts b/build/es6/faceRecognitionNet/types.d.ts deleted file mode 100644 index a390ee87..00000000 --- a/build/es6/faceRecognitionNet/types.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export declare type ScaleLayerParams = { - weights: tf.Tensor1D; - biases: tf.Tensor1D; -}; -export declare type ResidualLayerParams = { - conv1: ConvLayerParams; - conv2: ConvLayerParams; -}; -export declare type ConvLayerParams = { - conv: TfjsImageRecognitionBase.ConvParams; - scale: ScaleLayerParams; -}; -export declare type NetParams = { - conv32_down: ConvLayerParams; - conv32_1: ResidualLayerParams; - conv32_2: ResidualLayerParams; - conv32_3: ResidualLayerParams; - conv64_down: ResidualLayerParams; - conv64_1: ResidualLayerParams; - conv64_2: ResidualLayerParams; - conv64_3: ResidualLayerParams; - conv128_down: ResidualLayerParams; - conv128_1: ResidualLayerParams; - conv128_2: ResidualLayerParams; - conv256_down: ResidualLayerParams; - conv256_1: ResidualLayerParams; - conv256_2: ResidualLayerParams; - conv256_down_out: ResidualLayerParams; - fc: tf.Tensor2D; -}; diff --git a/build/es6/faceRecognitionNet/types.js b/build/es6/faceRecognitionNet/types.js deleted file mode 100644 index 5b2306a4..00000000 --- a/build/es6/faceRecognitionNet/types.js +++ /dev/null @@ -1 +0,0 @@ -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/types.js.map b/build/es6/faceRecognitionNet/types.js.map deleted file mode 100644 index 3e899768..00000000 --- a/build/es6/faceRecognitionNet/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/build/es6/factories/WithFaceDescriptor.d.ts b/build/es6/factories/WithFaceDescriptor.d.ts deleted file mode 100644 index 45175ba6..00000000 --- a/build/es6/factories/WithFaceDescriptor.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare type WithFaceDescriptor = TSource & { - descriptor: Float32Array; -}; -export declare function extendWithFaceDescriptor(sourceObj: TSource, descriptor: Float32Array): WithFaceDescriptor; diff --git a/build/es6/factories/WithFaceDescriptor.js b/build/es6/factories/WithFaceDescriptor.js deleted file mode 100644 index cce7b739..00000000 --- a/build/es6/factories/WithFaceDescriptor.js +++ /dev/null @@ -1,5 +0,0 @@ -export function extendWithFaceDescriptor(sourceObj, descriptor) { - var extension = { descriptor: descriptor }; - return Object.assign({}, sourceObj, extension); -} -//# sourceMappingURL=WithFaceDescriptor.js.map \ No newline at end of file diff --git a/build/es6/factories/WithFaceDescriptor.js.map b/build/es6/factories/WithFaceDescriptor.js.map deleted file mode 100644 index f9e0a704..00000000 --- a/build/es6/factories/WithFaceDescriptor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"WithFaceDescriptor.js","sourceRoot":"","sources":["../../../src/factories/WithFaceDescriptor.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,wBAAwB,CAGtC,SAAkB,EAClB,UAAwB;IAGxB,IAAM,SAAS,GAAG,EAAE,UAAU,YAAA,EAAE,CAAA;IAChC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC"} \ No newline at end of file diff --git a/build/es6/factories/WithFaceDetection.d.ts b/build/es6/factories/WithFaceDetection.d.ts deleted file mode 100644 index dd91b175..00000000 --- a/build/es6/factories/WithFaceDetection.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { FaceDetection } from '../classes/FaceDetection'; -export declare type WithFaceDetection = TSource & { - detection: FaceDetection; -}; -export declare function extendWithFaceDetection(sourceObj: TSource, detection: FaceDetection): WithFaceDetection; diff --git a/build/es6/factories/WithFaceDetection.js b/build/es6/factories/WithFaceDetection.js deleted file mode 100644 index d8ce4284..00000000 --- a/build/es6/factories/WithFaceDetection.js +++ /dev/null @@ -1,5 +0,0 @@ -export function extendWithFaceDetection(sourceObj, detection) { - var extension = { detection: detection }; - return Object.assign({}, sourceObj, extension); -} -//# sourceMappingURL=WithFaceDetection.js.map \ No newline at end of file diff --git a/build/es6/factories/WithFaceDetection.js.map b/build/es6/factories/WithFaceDetection.js.map deleted file mode 100644 index 711459ad..00000000 --- a/build/es6/factories/WithFaceDetection.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"WithFaceDetection.js","sourceRoot":"","sources":["../../../src/factories/WithFaceDetection.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,uBAAuB,CAGrC,SAAkB,EAClB,SAAwB;IAGxB,IAAM,SAAS,GAAG,EAAE,SAAS,WAAA,EAAE,CAAA;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC"} \ No newline at end of file diff --git a/build/es6/factories/WithFaceExpressions.d.ts b/build/es6/factories/WithFaceExpressions.d.ts deleted file mode 100644 index 2309d8ea..00000000 --- a/build/es6/factories/WithFaceExpressions.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { FaceExpressionPrediction } from '../faceExpressionNet/types'; -export declare type WithFaceExpressions = TSource & { - expressions: FaceExpressionPrediction[]; -}; -export declare function extendWithFaceExpressions(sourceObj: TSource, expressions: FaceExpressionPrediction[]): WithFaceExpressions; diff --git a/build/es6/factories/WithFaceExpressions.js b/build/es6/factories/WithFaceExpressions.js deleted file mode 100644 index f04bbb41..00000000 --- a/build/es6/factories/WithFaceExpressions.js +++ /dev/null @@ -1,5 +0,0 @@ -export function extendWithFaceExpressions(sourceObj, expressions) { - var extension = { expressions: expressions }; - return Object.assign({}, sourceObj, extension); -} -//# sourceMappingURL=WithFaceExpressions.js.map \ No newline at end of file diff --git a/build/es6/factories/WithFaceExpressions.js.map b/build/es6/factories/WithFaceExpressions.js.map deleted file mode 100644 index 99a1a67d..00000000 --- a/build/es6/factories/WithFaceExpressions.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"WithFaceExpressions.js","sourceRoot":"","sources":["../../../src/factories/WithFaceExpressions.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,yBAAyB,CAGvC,SAAkB,EAClB,WAAuC;IAGvC,IAAM,SAAS,GAAG,EAAE,WAAW,aAAA,EAAE,CAAA;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC"} \ No newline at end of file diff --git a/build/es6/factories/WithFaceLandmarks.d.ts b/build/es6/factories/WithFaceLandmarks.d.ts deleted file mode 100644 index 36840d24..00000000 --- a/build/es6/factories/WithFaceLandmarks.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { FaceDetection } from '../classes/FaceDetection'; -import { FaceLandmarks } from '../classes/FaceLandmarks'; -import { FaceLandmarks68 } from '../classes/FaceLandmarks68'; -import { WithFaceDetection } from './WithFaceDetection'; -export declare type WithFaceLandmarks, TFaceLandmarks extends FaceLandmarks = FaceLandmarks68> = TSource & { - landmarks: TFaceLandmarks; - unshiftedLandmarks: TFaceLandmarks; - alignedRect: FaceDetection; -}; -export declare function extendWithFaceLandmarks, TFaceLandmarks extends FaceLandmarks = FaceLandmarks68>(sourceObj: TSource, unshiftedLandmarks: TFaceLandmarks): WithFaceLandmarks; diff --git a/build/es6/factories/WithFaceLandmarks.js b/build/es6/factories/WithFaceLandmarks.js deleted file mode 100644 index 11b817a3..00000000 --- a/build/es6/factories/WithFaceLandmarks.js +++ /dev/null @@ -1,15 +0,0 @@ -import { FaceDetection } from '../classes/FaceDetection'; -export function extendWithFaceLandmarks(sourceObj, unshiftedLandmarks) { - var shift = sourceObj.detection.box; - var landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y); - var rect = landmarks.align(); - var imageDims = sourceObj.detection.imageDims; - var alignedRect = new FaceDetection(sourceObj.detection.score, rect.rescale(imageDims.reverse()), imageDims); - var extension = { - landmarks: landmarks, - unshiftedLandmarks: unshiftedLandmarks, - alignedRect: alignedRect - }; - return Object.assign({}, sourceObj, extension); -} -//# sourceMappingURL=WithFaceLandmarks.js.map \ No newline at end of file diff --git a/build/es6/factories/WithFaceLandmarks.js.map b/build/es6/factories/WithFaceLandmarks.js.map deleted file mode 100644 index 09b307ce..00000000 --- a/build/es6/factories/WithFaceLandmarks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"WithFaceLandmarks.js","sourceRoot":"","sources":["../../../src/factories/WithFaceLandmarks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAczD,MAAM,UAAU,uBAAuB,CAIrC,SAAkB,EAClB,kBAAkC;IAG1B,IAAA,+BAAU,CAAwB;IAC1C,IAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAiB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IAE9E,IAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAA;IACtB,IAAA,yCAAS,CAAwB;IACzC,IAAM,WAAW,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;IAE9G,IAAM,SAAS,GAAG;QAChB,SAAS,WAAA;QACT,kBAAkB,oBAAA;QAClB,WAAW,aAAA;KACZ,CAAA;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC"} \ No newline at end of file diff --git a/build/es6/factories/index.d.ts b/build/es6/factories/index.d.ts deleted file mode 100644 index c4b351df..00000000 --- a/build/es6/factories/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './WithFaceDescriptor'; -export * from './WithFaceDetection'; -export * from './WithFaceExpressions'; -export * from './WithFaceLandmarks'; diff --git a/build/es6/factories/index.js b/build/es6/factories/index.js deleted file mode 100644 index cb715ddd..00000000 --- a/build/es6/factories/index.js +++ /dev/null @@ -1,5 +0,0 @@ -export * from './WithFaceDescriptor'; -export * from './WithFaceDetection'; -export * from './WithFaceExpressions'; -export * from './WithFaceLandmarks'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/es6/factories/index.js.map b/build/es6/factories/index.js.map deleted file mode 100644 index d1d9890a..00000000 --- a/build/es6/factories/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/factories/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA"} \ No newline at end of file diff --git a/build/es6/globalApi/ComposableTask.d.ts b/build/es6/globalApi/ComposableTask.d.ts deleted file mode 100644 index b7203e33..00000000 --- a/build/es6/globalApi/ComposableTask.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare class ComposableTask { - then(onfulfilled: (value: T) => T | PromiseLike): Promise; - run(): Promise; -} diff --git a/build/es6/globalApi/ComposableTask.js b/build/es6/globalApi/ComposableTask.js deleted file mode 100644 index a00a030b..00000000 --- a/build/es6/globalApi/ComposableTask.js +++ /dev/null @@ -1,28 +0,0 @@ -import * as tslib_1 from "tslib"; -var ComposableTask = /** @class */ (function () { - function ComposableTask() { - } - ComposableTask.prototype.then = function (onfulfilled) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = onfulfilled; - return [4 /*yield*/, this.run()]; - case 1: return [2 /*return*/, _a.apply(void 0, [_b.sent()])]; - } - }); - }); - }; - ComposableTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - throw new Error('ComposableTask - run is not implemented'); - }); - }); - }; - return ComposableTask; -}()); -export { ComposableTask }; -//# sourceMappingURL=ComposableTask.js.map \ No newline at end of file diff --git a/build/es6/globalApi/ComposableTask.js.map b/build/es6/globalApi/ComposableTask.js.map deleted file mode 100644 index 9248586a..00000000 --- a/build/es6/globalApi/ComposableTask.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ComposableTask.js","sourceRoot":"","sources":["../../../src/globalApi/ComposableTask.ts"],"names":[],"mappings":";AAAA;IAAA;IAWA,CAAC;IATc,6BAAI,GAAjB,UACE,WAA6C;;;;;;wBAEtC,KAAA,WAAW,CAAA;wBAAC,qBAAM,IAAI,CAAC,GAAG,EAAE,EAAA;4BAAnC,sBAAO,kBAAY,SAAgB,EAAC,EAAA;;;;KACrC;IAEY,4BAAG,GAAhB;;;gBACE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;;;KAC3D;IACH,qBAAC;AAAD,CAAC,AAXD,IAWC"} \ No newline at end of file diff --git a/build/es6/globalApi/ComputeFaceDescriptorsTasks.d.ts b/build/es6/globalApi/ComputeFaceDescriptorsTasks.d.ts deleted file mode 100644 index 3cf96b39..00000000 --- a/build/es6/globalApi/ComputeFaceDescriptorsTasks.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { WithFaceDescriptor } from '../factories/WithFaceDescriptor'; -import { WithFaceDetection } from '../factories/WithFaceDetection'; -import { WithFaceLandmarks } from '../factories/WithFaceLandmarks'; -import { ComposableTask } from './ComposableTask'; -export declare class ComputeFaceDescriptorsTaskBase extends ComposableTask { - protected parentTask: ComposableTask | Promise; - protected input: TNetInput; - constructor(parentTask: ComposableTask | Promise, input: TNetInput); -} -export declare class ComputeAllFaceDescriptorsTask>> extends ComputeFaceDescriptorsTaskBase[], TSource[]> { - run(): Promise[]>; -} -export declare class ComputeSingleFaceDescriptorTask>> extends ComputeFaceDescriptorsTaskBase | undefined, TSource | undefined> { - run(): Promise | undefined>; -} diff --git a/build/es6/globalApi/ComputeFaceDescriptorsTasks.js b/build/es6/globalApi/ComputeFaceDescriptorsTasks.js deleted file mode 100644 index ce4888d2..00000000 --- a/build/es6/globalApi/ComputeFaceDescriptorsTasks.js +++ /dev/null @@ -1,109 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { extractFaces, extractFaceTensors } from '../dom'; -import { extendWithFaceDescriptor } from '../factories/WithFaceDescriptor'; -import { ComposableTask } from './ComposableTask'; -import { nets } from './nets'; -var ComputeFaceDescriptorsTaskBase = /** @class */ (function (_super) { - tslib_1.__extends(ComputeFaceDescriptorsTaskBase, _super); - function ComputeFaceDescriptorsTaskBase(parentTask, input) { - var _this = _super.call(this) || this; - _this.parentTask = parentTask; - _this.input = input; - return _this; - } - return ComputeFaceDescriptorsTaskBase; -}(ComposableTask)); -export { ComputeFaceDescriptorsTaskBase }; -var ComputeAllFaceDescriptorsTask = /** @class */ (function (_super) { - tslib_1.__extends(ComputeAllFaceDescriptorsTask, _super); - function ComputeAllFaceDescriptorsTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - ComputeAllFaceDescriptorsTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var parentResults, alignedRects, alignedFaces, _a, results; - var _this = this; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResults = _b.sent(); - alignedRects = parentResults.map(function (_a) { - var alignedRect = _a.alignedRect; - return alignedRect; - }); - if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, extractFaceTensors(this.input, alignedRects)]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, extractFaces(this.input, alignedRects)]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - alignedFaces = _a; - return [4 /*yield*/, Promise.all(parentResults.map(function (parentResult, i) { return tslib_1.__awaiter(_this, void 0, void 0, function () { - var descriptor; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, nets.faceRecognitionNet.computeFaceDescriptor(alignedFaces[i])]; - case 1: - descriptor = _a.sent(); - return [2 /*return*/, extendWithFaceDescriptor(parentResult, descriptor)]; - } - }); - }); }))]; - case 6: - results = _b.sent(); - alignedFaces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); }); - return [2 /*return*/, results]; - } - }); - }); - }; - return ComputeAllFaceDescriptorsTask; -}(ComputeFaceDescriptorsTaskBase)); -export { ComputeAllFaceDescriptorsTask }; -var ComputeSingleFaceDescriptorTask = /** @class */ (function (_super) { - tslib_1.__extends(ComputeSingleFaceDescriptorTask, _super); - function ComputeSingleFaceDescriptorTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - ComputeSingleFaceDescriptorTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var parentResult, alignedRect, alignedFaces, _a, descriptor; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResult = _b.sent(); - if (!parentResult) { - return [2 /*return*/]; - } - alignedRect = parentResult.alignedRect; - if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, extractFaceTensors(this.input, [alignedRect])]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, extractFaces(this.input, [alignedRect])]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - alignedFaces = _a; - return [4 /*yield*/, nets.faceRecognitionNet.computeFaceDescriptor(alignedFaces[0])]; - case 6: - descriptor = _b.sent(); - alignedFaces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); }); - return [2 /*return*/, extendWithFaceDescriptor(parentResult, descriptor)]; - } - }); - }); - }; - return ComputeSingleFaceDescriptorTask; -}(ComputeFaceDescriptorsTaskBase)); -export { ComputeSingleFaceDescriptorTask }; -//# sourceMappingURL=ComputeFaceDescriptorsTasks.js.map \ No newline at end of file diff --git a/build/es6/globalApi/ComputeFaceDescriptorsTasks.js.map b/build/es6/globalApi/ComputeFaceDescriptorsTasks.js.map deleted file mode 100644 index 43c47f7c..00000000 --- a/build/es6/globalApi/ComputeFaceDescriptorsTasks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ComputeFaceDescriptorsTasks.js","sourceRoot":"","sources":["../../../src/globalApi/ComputeFaceDescriptorsTasks.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/globalApi/DetectFaceLandmarksTasks.d.ts b/build/es6/globalApi/DetectFaceLandmarksTasks.d.ts deleted file mode 100644 index 2c528911..00000000 --- a/build/es6/globalApi/DetectFaceLandmarksTasks.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net'; -import { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet'; -import { WithFaceDetection } from '../factories/WithFaceDetection'; -import { WithFaceLandmarks } from '../factories/WithFaceLandmarks'; -import { ComposableTask } from './ComposableTask'; -import { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks'; -export declare class DetectFaceLandmarksTaskBase extends ComposableTask { - protected parentTask: ComposableTask | Promise; - protected input: TNetInput; - protected useTinyLandmarkNet: boolean; - constructor(parentTask: ComposableTask | Promise, input: TNetInput, useTinyLandmarkNet: boolean); - protected readonly landmarkNet: FaceLandmark68Net | FaceLandmark68TinyNet; -} -export declare class DetectAllFaceLandmarksTask> extends DetectFaceLandmarksTaskBase[], TSource[]> { - run(): Promise[]>; - withFaceDescriptors(): ComputeAllFaceDescriptorsTask>; -} -export declare class DetectSingleFaceLandmarksTask> extends DetectFaceLandmarksTaskBase | undefined, TSource | undefined> { - run(): Promise | undefined>; - withFaceDescriptor(): ComputeSingleFaceDescriptorTask>; -} diff --git a/build/es6/globalApi/DetectFaceLandmarksTasks.js b/build/es6/globalApi/DetectFaceLandmarksTasks.js deleted file mode 100644 index 7d1c00a9..00000000 --- a/build/es6/globalApi/DetectFaceLandmarksTasks.js +++ /dev/null @@ -1,115 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { extractFaces, extractFaceTensors } from '../dom'; -import { extendWithFaceLandmarks } from '../factories/WithFaceLandmarks'; -import { ComposableTask } from './ComposableTask'; -import { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks'; -import { nets } from './nets'; -var DetectFaceLandmarksTaskBase = /** @class */ (function (_super) { - tslib_1.__extends(DetectFaceLandmarksTaskBase, _super); - function DetectFaceLandmarksTaskBase(parentTask, input, useTinyLandmarkNet) { - var _this = _super.call(this) || this; - _this.parentTask = parentTask; - _this.input = input; - _this.useTinyLandmarkNet = useTinyLandmarkNet; - return _this; - } - Object.defineProperty(DetectFaceLandmarksTaskBase.prototype, "landmarkNet", { - get: function () { - return this.useTinyLandmarkNet - ? nets.faceLandmark68TinyNet - : nets.faceLandmark68Net; - }, - enumerable: true, - configurable: true - }); - return DetectFaceLandmarksTaskBase; -}(ComposableTask)); -export { DetectFaceLandmarksTaskBase }; -var DetectAllFaceLandmarksTask = /** @class */ (function (_super) { - tslib_1.__extends(DetectAllFaceLandmarksTask, _super); - function DetectAllFaceLandmarksTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - DetectAllFaceLandmarksTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var parentResults, detections, faces, _a, faceLandmarksByFace; - var _this = this; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResults = _b.sent(); - detections = parentResults.map(function (res) { return res.detection; }); - if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, extractFaceTensors(this.input, detections)]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, extractFaces(this.input, detections)]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - faces = _a; - return [4 /*yield*/, Promise.all(faces.map(function (face) { return _this.landmarkNet.detectLandmarks(face); }))]; - case 6: - faceLandmarksByFace = _b.sent(); - faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); }); - return [2 /*return*/, parentResults.map(function (parentResult, i) { - return extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i]); - })]; - } - }); - }); - }; - DetectAllFaceLandmarksTask.prototype.withFaceDescriptors = function () { - return new ComputeAllFaceDescriptorsTask(this, this.input); - }; - return DetectAllFaceLandmarksTask; -}(DetectFaceLandmarksTaskBase)); -export { DetectAllFaceLandmarksTask }; -var DetectSingleFaceLandmarksTask = /** @class */ (function (_super) { - tslib_1.__extends(DetectSingleFaceLandmarksTask, _super); - function DetectSingleFaceLandmarksTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - DetectSingleFaceLandmarksTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var parentResult, detection, faces, _a, landmarks; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResult = _b.sent(); - if (!parentResult) { - return [2 /*return*/]; - } - detection = parentResult.detection; - if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, extractFaceTensors(this.input, [detection])]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, extractFaces(this.input, [detection])]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - faces = _a; - return [4 /*yield*/, this.landmarkNet.detectLandmarks(faces[0])]; - case 6: - landmarks = _b.sent(); - faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); }); - return [2 /*return*/, extendWithFaceLandmarks(parentResult, landmarks)]; - } - }); - }); - }; - DetectSingleFaceLandmarksTask.prototype.withFaceDescriptor = function () { - return new ComputeSingleFaceDescriptorTask(this, this.input); - }; - return DetectSingleFaceLandmarksTask; -}(DetectFaceLandmarksTaskBase)); -export { DetectSingleFaceLandmarksTask }; -//# sourceMappingURL=DetectFaceLandmarksTasks.js.map \ No newline at end of file diff --git a/build/es6/globalApi/DetectFaceLandmarksTasks.js.map b/build/es6/globalApi/DetectFaceLandmarksTasks.js.map deleted file mode 100644 index 154d0c63..00000000 --- a/build/es6/globalApi/DetectFaceLandmarksTasks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"DetectFaceLandmarksTasks.js","sourceRoot":"","sources":["../../../src/globalApi/DetectFaceLandmarksTasks.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/globalApi/DetectFacesTasks.d.ts b/build/es6/globalApi/DetectFacesTasks.d.ts deleted file mode 100644 index a8c24840..00000000 --- a/build/es6/globalApi/DetectFacesTasks.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -import { WithFaceDetection } from '../factories/WithFaceDetection'; -import { ComposableTask } from './ComposableTask'; -import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks'; -import { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionTask } from './PredictFaceExpressionsTask'; -import { FaceDetectionOptions } from './types'; -export declare class DetectFacesTaskBase extends ComposableTask { - protected input: TNetInput; - protected options: FaceDetectionOptions; - constructor(input: TNetInput, options?: FaceDetectionOptions); -} -export declare class DetectAllFacesTask extends DetectFacesTaskBase { - run(): Promise; - private runAndExtendWithFaceDetections; - withFaceLandmarks(useTinyLandmarkNet?: boolean): DetectAllFaceLandmarksTask>; - withFaceExpressions(): PredictAllFaceExpressionsTask>; -} -export declare class DetectSingleFaceTask extends DetectFacesTaskBase { - run(): Promise; - private runAndExtendWithFaceDetection; - withFaceLandmarks(useTinyLandmarkNet?: boolean): DetectSingleFaceLandmarksTask>; - withFaceExpressions(): PredictSingleFaceExpressionTask>; -} diff --git a/build/es6/globalApi/DetectFacesTasks.js b/build/es6/globalApi/DetectFacesTasks.js deleted file mode 100644 index 8d90b7ae..00000000 --- a/build/es6/globalApi/DetectFacesTasks.js +++ /dev/null @@ -1,127 +0,0 @@ -import * as tslib_1 from "tslib"; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { extendWithFaceDetection } from '../factories/WithFaceDetection'; -import { MtcnnOptions } from '../mtcnn/MtcnnOptions'; -import { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options'; -import { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions'; -import { ComposableTask } from './ComposableTask'; -import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks'; -import { nets } from './nets'; -import { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionTask } from './PredictFaceExpressionsTask'; -var DetectFacesTaskBase = /** @class */ (function (_super) { - tslib_1.__extends(DetectFacesTaskBase, _super); - function DetectFacesTaskBase(input, options) { - if (options === void 0) { options = new SsdMobilenetv1Options(); } - var _this = _super.call(this) || this; - _this.input = input; - _this.options = options; - return _this; - } - return DetectFacesTaskBase; -}(ComposableTask)); -export { DetectFacesTaskBase }; -var DetectAllFacesTask = /** @class */ (function (_super) { - tslib_1.__extends(DetectAllFacesTask, _super); - function DetectAllFacesTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - DetectAllFacesTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a, input, options, faceDetectionFunction; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this, input = _a.input, options = _a.options; - if (!(options instanceof MtcnnOptions)) return [3 /*break*/, 2]; - return [4 /*yield*/, nets.mtcnn.forward(input, options)]; - case 1: return [2 /*return*/, (_b.sent()) - .map(function (result) { return result.detection; })]; - case 2: - faceDetectionFunction = options instanceof TinyFaceDetectorOptions - ? function (input) { return nets.tinyFaceDetector.locateFaces(input, options); } - : (options instanceof SsdMobilenetv1Options - ? function (input) { return nets.ssdMobilenetv1.locateFaces(input, options); } - : (options instanceof TfjsImageRecognitionBase.TinyYolov2Options - ? function (input) { return nets.tinyYolov2.locateFaces(input, options); } - : null)); - if (!faceDetectionFunction) { - throw new Error('detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options'); - } - return [2 /*return*/, faceDetectionFunction(input)]; - } - }); - }); - }; - DetectAllFacesTask.prototype.runAndExtendWithFaceDetections = function () { - var _this = this; - return new Promise(function (res) { return tslib_1.__awaiter(_this, void 0, void 0, function () { - var detections; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.run()]; - case 1: - detections = _a.sent(); - return [2 /*return*/, res(detections.map(function (detection) { return extendWithFaceDetection({}, detection); }))]; - } - }); - }); }); - }; - DetectAllFacesTask.prototype.withFaceLandmarks = function (useTinyLandmarkNet) { - if (useTinyLandmarkNet === void 0) { useTinyLandmarkNet = false; } - return new DetectAllFaceLandmarksTask(this.runAndExtendWithFaceDetections(), this.input, useTinyLandmarkNet); - }; - DetectAllFacesTask.prototype.withFaceExpressions = function () { - return new PredictAllFaceExpressionsTask(this.runAndExtendWithFaceDetections(), this.input); - }; - return DetectAllFacesTask; -}(DetectFacesTaskBase)); -export { DetectAllFacesTask }; -var DetectSingleFaceTask = /** @class */ (function (_super) { - tslib_1.__extends(DetectSingleFaceTask, _super); - function DetectSingleFaceTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - DetectSingleFaceTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var faceDetections, faceDetectionWithHighestScore; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, new DetectAllFacesTask(this.input, this.options)]; - case 1: - faceDetections = _a.sent(); - faceDetectionWithHighestScore = faceDetections[0]; - faceDetections.forEach(function (faceDetection) { - if (faceDetection.score > faceDetectionWithHighestScore.score) { - faceDetectionWithHighestScore = faceDetection; - } - }); - return [2 /*return*/, faceDetectionWithHighestScore]; - } - }); - }); - }; - DetectSingleFaceTask.prototype.runAndExtendWithFaceDetection = function () { - var _this = this; - return new Promise(function (res) { return tslib_1.__awaiter(_this, void 0, void 0, function () { - var detection; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.run()]; - case 1: - detection = _a.sent(); - return [2 /*return*/, res(detection ? extendWithFaceDetection({}, detection) : undefined)]; - } - }); - }); }); - }; - DetectSingleFaceTask.prototype.withFaceLandmarks = function (useTinyLandmarkNet) { - if (useTinyLandmarkNet === void 0) { useTinyLandmarkNet = false; } - return new DetectSingleFaceLandmarksTask(this.runAndExtendWithFaceDetection(), this.input, useTinyLandmarkNet); - }; - DetectSingleFaceTask.prototype.withFaceExpressions = function () { - return new PredictSingleFaceExpressionTask(this.runAndExtendWithFaceDetection(), this.input); - }; - return DetectSingleFaceTask; -}(DetectFacesTaskBase)); -export { DetectSingleFaceTask }; -//# sourceMappingURL=DetectFacesTasks.js.map \ No newline at end of file diff --git a/build/es6/globalApi/DetectFacesTasks.js.map b/build/es6/globalApi/DetectFacesTasks.js.map deleted file mode 100644 index 22cc3ae3..00000000 --- a/build/es6/globalApi/DetectFacesTasks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"DetectFacesTasks.js","sourceRoot":"","sources":["../../../src/globalApi/DetectFacesTasks.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/globalApi/FaceMatcher.d.ts b/build/es6/globalApi/FaceMatcher.d.ts deleted file mode 100644 index 5a9ef8d7..00000000 --- a/build/es6/globalApi/FaceMatcher.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { FaceMatch } from '../classes/FaceMatch'; -import { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors'; -import { WithFaceDescriptor } from '../factories'; -export declare class FaceMatcher { - private _labeledDescriptors; - private _distanceThreshold; - constructor(inputs: LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>, distanceThreshold?: number); - readonly labeledDescriptors: LabeledFaceDescriptors[]; - readonly distanceThreshold: number; - computeMeanDistance(queryDescriptor: Float32Array, descriptors: Float32Array[]): number; - matchDescriptor(queryDescriptor: Float32Array): FaceMatch; - findBestMatch(queryDescriptor: Float32Array): FaceMatch; -} diff --git a/build/es6/globalApi/FaceMatcher.js b/build/es6/globalApi/FaceMatcher.js deleted file mode 100644 index c83c4943..00000000 --- a/build/es6/globalApi/FaceMatcher.js +++ /dev/null @@ -1,61 +0,0 @@ -import { FaceMatch } from '../classes/FaceMatch'; -import { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors'; -import { euclideanDistance } from '../euclideanDistance'; -var FaceMatcher = /** @class */ (function () { - function FaceMatcher(inputs, distanceThreshold) { - if (distanceThreshold === void 0) { distanceThreshold = 0.6; } - this._distanceThreshold = distanceThreshold; - var inputArray = Array.isArray(inputs) ? inputs : [inputs]; - if (!inputArray.length) { - throw new Error("FaceRecognizer.constructor - expected atleast one input"); - } - var count = 1; - var createUniqueLabel = function () { return "person " + count++; }; - this._labeledDescriptors = inputArray.map(function (desc) { - if (desc instanceof LabeledFaceDescriptors) { - return desc; - } - if (desc instanceof Float32Array) { - return new LabeledFaceDescriptors(createUniqueLabel(), [desc]); - } - if (desc.descriptor && desc.descriptor instanceof Float32Array) { - return new LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]); - } - throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>"); - }); - } - Object.defineProperty(FaceMatcher.prototype, "labeledDescriptors", { - get: function () { return this._labeledDescriptors; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceMatcher.prototype, "distanceThreshold", { - get: function () { return this._distanceThreshold; }, - enumerable: true, - configurable: true - }); - FaceMatcher.prototype.computeMeanDistance = function (queryDescriptor, descriptors) { - return descriptors - .map(function (d) { return euclideanDistance(d, queryDescriptor); }) - .reduce(function (d1, d2) { return d1 + d2; }, 0) - / (descriptors.length || 1); - }; - FaceMatcher.prototype.matchDescriptor = function (queryDescriptor) { - var _this = this; - return this.labeledDescriptors - .map(function (_a) { - var descriptors = _a.descriptors, label = _a.label; - return new FaceMatch(label, _this.computeMeanDistance(queryDescriptor, descriptors)); - }) - .reduce(function (best, curr) { return best.distance < curr.distance ? best : curr; }); - }; - FaceMatcher.prototype.findBestMatch = function (queryDescriptor) { - var bestMatch = this.matchDescriptor(queryDescriptor); - return bestMatch.distance < this.distanceThreshold - ? bestMatch - : new FaceMatch('unknown', bestMatch.distance); - }; - return FaceMatcher; -}()); -export { FaceMatcher }; -//# sourceMappingURL=FaceMatcher.js.map \ No newline at end of file diff --git a/build/es6/globalApi/FaceMatcher.js.map b/build/es6/globalApi/FaceMatcher.js.map deleted file mode 100644 index 760af483..00000000 --- a/build/es6/globalApi/FaceMatcher.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceMatcher.js","sourceRoot":"","sources":["../../../src/globalApi/FaceMatcher.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/globalApi/PredictFaceExpressionsTask.d.ts b/build/es6/globalApi/PredictFaceExpressionsTask.d.ts deleted file mode 100644 index 3b164fe2..00000000 --- a/build/es6/globalApi/PredictFaceExpressionsTask.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { WithFaceDetection } from '../factories/WithFaceDetection'; -import { WithFaceExpressions } from '../factories/WithFaceExpressions'; -import { ComposableTask } from './ComposableTask'; -import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks'; -export declare class PredictFaceExpressionsTaskBase extends ComposableTask { - protected parentTask: ComposableTask | Promise; - protected input: TNetInput; - constructor(parentTask: ComposableTask | Promise, input: TNetInput); -} -export declare class PredictAllFaceExpressionsTask> extends PredictFaceExpressionsTaskBase[], TSource[]> { - run(): Promise[]>; - withFaceLandmarks(): DetectAllFaceLandmarksTask>; -} -export declare class PredictSingleFaceExpressionTask> extends PredictFaceExpressionsTaskBase | undefined, TSource | undefined> { - run(): Promise | undefined>; - withFaceLandmarks(): DetectSingleFaceLandmarksTask>; -} diff --git a/build/es6/globalApi/PredictFaceExpressionsTask.js b/build/es6/globalApi/PredictFaceExpressionsTask.js deleted file mode 100644 index 09278058..00000000 --- a/build/es6/globalApi/PredictFaceExpressionsTask.js +++ /dev/null @@ -1,102 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { extractFaces, extractFaceTensors } from '../dom'; -import { extendWithFaceExpressions } from '../factories/WithFaceExpressions'; -import { ComposableTask } from './ComposableTask'; -import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks'; -import { nets } from './nets'; -var PredictFaceExpressionsTaskBase = /** @class */ (function (_super) { - tslib_1.__extends(PredictFaceExpressionsTaskBase, _super); - function PredictFaceExpressionsTaskBase(parentTask, input) { - var _this = _super.call(this) || this; - _this.parentTask = parentTask; - _this.input = input; - return _this; - } - return PredictFaceExpressionsTaskBase; -}(ComposableTask)); -export { PredictFaceExpressionsTaskBase }; -var PredictAllFaceExpressionsTask = /** @class */ (function (_super) { - tslib_1.__extends(PredictAllFaceExpressionsTask, _super); - function PredictAllFaceExpressionsTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - PredictAllFaceExpressionsTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var parentResults, detections, faces, _a, faceExpressionsByFace; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResults = _b.sent(); - detections = parentResults.map(function (parentResult) { return parentResult.detection; }); - if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, extractFaceTensors(this.input, detections)]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, extractFaces(this.input, detections)]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - faces = _a; - return [4 /*yield*/, Promise.all(faces.map(function (face) { return nets.faceExpressionNet.predictExpressions(face); }))]; - case 6: - faceExpressionsByFace = _b.sent(); - faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); }); - return [2 /*return*/, parentResults.map(function (parentResult, i) { return extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]); })]; - } - }); - }); - }; - PredictAllFaceExpressionsTask.prototype.withFaceLandmarks = function () { - return new DetectAllFaceLandmarksTask(this, this.input, false); - }; - return PredictAllFaceExpressionsTask; -}(PredictFaceExpressionsTaskBase)); -export { PredictAllFaceExpressionsTask }; -var PredictSingleFaceExpressionTask = /** @class */ (function (_super) { - tslib_1.__extends(PredictSingleFaceExpressionTask, _super); - function PredictSingleFaceExpressionTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - PredictSingleFaceExpressionTask.prototype.run = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var parentResult, detection, faces, _a, faceExpressions; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResult = _b.sent(); - if (!parentResult) { - return [2 /*return*/]; - } - detection = parentResult.detection; - if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, extractFaceTensors(this.input, [detection])]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, extractFaces(this.input, [detection])]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - faces = _a; - return [4 /*yield*/, nets.faceExpressionNet.predictExpressions(faces[0])]; - case 6: - faceExpressions = _b.sent(); - faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); }); - return [2 /*return*/, extendWithFaceExpressions(parentResult, faceExpressions)]; - } - }); - }); - }; - PredictSingleFaceExpressionTask.prototype.withFaceLandmarks = function () { - return new DetectSingleFaceLandmarksTask(this, this.input, false); - }; - return PredictSingleFaceExpressionTask; -}(PredictFaceExpressionsTaskBase)); -export { PredictSingleFaceExpressionTask }; -//# sourceMappingURL=PredictFaceExpressionsTask.js.map \ No newline at end of file diff --git a/build/es6/globalApi/PredictFaceExpressionsTask.js.map b/build/es6/globalApi/PredictFaceExpressionsTask.js.map deleted file mode 100644 index 1201f3ce..00000000 --- a/build/es6/globalApi/PredictFaceExpressionsTask.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"PredictFaceExpressionsTask.js","sourceRoot":"","sources":["../../../src/globalApi/PredictFaceExpressionsTask.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/globalApi/allFaces.d.ts b/build/es6/globalApi/allFaces.d.ts deleted file mode 100644 index a5b62f2f..00000000 --- a/build/es6/globalApi/allFaces.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base'; -import { WithFaceDescriptor, WithFaceDetection, WithFaceLandmarks } from '../factories'; -import { IMtcnnOptions } from '../mtcnn/MtcnnOptions'; -export declare function allFacesSsdMobilenetv1(input: TNetInput, minConfidence?: number): Promise>>[]>; -export declare function allFacesTinyYolov2(input: TNetInput, forwardParams?: TfjsImageRecognitionBase.ITinyYolov2Options): Promise>>[]>; -export declare function allFacesMtcnn(input: TNetInput, forwardParams?: IMtcnnOptions): Promise>>[]>; -export declare const allFaces: typeof allFacesSsdMobilenetv1; diff --git a/build/es6/globalApi/allFaces.js b/build/es6/globalApi/allFaces.js deleted file mode 100644 index c07d331e..00000000 --- a/build/es6/globalApi/allFaces.js +++ /dev/null @@ -1,46 +0,0 @@ -import * as tslib_1 from "tslib"; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { MtcnnOptions } from '../mtcnn/MtcnnOptions'; -import { SsdMobilenetv1Options } from '../ssdMobilenetv1'; -import { detectAllFaces } from './detectFaces'; -// export allFaces API for backward compatibility -export function allFacesSsdMobilenetv1(input, minConfidence) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, detectAllFaces(input, new SsdMobilenetv1Options(minConfidence ? { minConfidence: minConfidence } : {})) - .withFaceLandmarks() - .withFaceDescriptors()]; - case 1: return [2 /*return*/, _a.sent()]; - } - }); - }); -} -export function allFacesTinyYolov2(input, forwardParams) { - if (forwardParams === void 0) { forwardParams = {}; } - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, detectAllFaces(input, new TfjsImageRecognitionBase.TinyYolov2Options(forwardParams)) - .withFaceLandmarks() - .withFaceDescriptors()]; - case 1: return [2 /*return*/, _a.sent()]; - } - }); - }); -} -export function allFacesMtcnn(input, forwardParams) { - if (forwardParams === void 0) { forwardParams = {}; } - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, detectAllFaces(input, new MtcnnOptions(forwardParams)) - .withFaceLandmarks() - .withFaceDescriptors()]; - case 1: return [2 /*return*/, _a.sent()]; - } - }); - }); -} -export var allFaces = allFacesSsdMobilenetv1; -//# sourceMappingURL=allFaces.js.map \ No newline at end of file diff --git a/build/es6/globalApi/allFaces.js.map b/build/es6/globalApi/allFaces.js.map deleted file mode 100644 index 488a93cf..00000000 --- a/build/es6/globalApi/allFaces.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"allFaces.js","sourceRoot":"","sources":["../../../src/globalApi/allFaces.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,wBAAwB,EAAa,MAAM,6BAA6B,CAAC;AAGlF,OAAO,EAAiB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,iDAAiD;AAEjD,MAAM,UAAgB,sBAAsB,CAC1C,KAAgB,EAChB,aAAsB;;;;wBAEf,qBAAM,cAAc,CAAC,KAAK,EAAE,IAAI,qBAAqB,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,eAAA,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;yBAClG,iBAAiB,EAAE;yBACnB,mBAAmB,EAAE,EAAA;wBAFxB,sBAAO,SAEiB,EAAA;;;;CACzB;AAED,MAAM,UAAgB,kBAAkB,CACtC,KAAgB,EAChB,aAA+D;IAA/D,8BAAA,EAAA,kBAA+D;;;;wBAExD,qBAAM,cAAc,CAAC,KAAK,EAAE,IAAI,wBAAwB,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;yBAC9F,iBAAiB,EAAE;yBACnB,mBAAmB,EAAE,EAAA;wBAFxB,sBAAO,SAEiB,EAAA;;;;CACzB;AAED,MAAM,UAAgB,aAAa,CACjC,KAAgB,EAChB,aAAiC;IAAjC,8BAAA,EAAA,kBAAiC;;;;wBAE1B,qBAAM,cAAc,CAAC,KAAK,EAAE,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;yBAChE,iBAAiB,EAAE;yBACnB,mBAAmB,EAAE,EAAA;wBAFxB,sBAAO,SAEiB,EAAA;;;;CACzB;AAED,MAAM,CAAC,IAAM,QAAQ,GAAG,sBAAsB,CAAA"} \ No newline at end of file diff --git a/build/es6/globalApi/detectFaces.d.ts b/build/es6/globalApi/detectFaces.d.ts deleted file mode 100644 index d1091c32..00000000 --- a/build/es6/globalApi/detectFaces.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { DetectAllFacesTask, DetectSingleFaceTask } from './DetectFacesTasks'; -import { FaceDetectionOptions } from './types'; -export declare function detectSingleFace(input: TNetInput, options?: FaceDetectionOptions): DetectSingleFaceTask; -export declare function detectAllFaces(input: TNetInput, options?: FaceDetectionOptions): DetectAllFacesTask; diff --git a/build/es6/globalApi/detectFaces.js b/build/es6/globalApi/detectFaces.js deleted file mode 100644 index be82c34b..00000000 --- a/build/es6/globalApi/detectFaces.js +++ /dev/null @@ -1,11 +0,0 @@ -import { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options'; -import { DetectAllFacesTask, DetectSingleFaceTask } from './DetectFacesTasks'; -export function detectSingleFace(input, options) { - if (options === void 0) { options = new SsdMobilenetv1Options(); } - return new DetectSingleFaceTask(input, options); -} -export function detectAllFaces(input, options) { - if (options === void 0) { options = new SsdMobilenetv1Options(); } - return new DetectAllFacesTask(input, options); -} -//# sourceMappingURL=detectFaces.js.map \ No newline at end of file diff --git a/build/es6/globalApi/detectFaces.js.map b/build/es6/globalApi/detectFaces.js.map deleted file mode 100644 index 00dd6ee1..00000000 --- a/build/es6/globalApi/detectFaces.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"detectFaces.js","sourceRoot":"","sources":["../../../src/globalApi/detectFaces.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG9E,MAAM,UAAU,gBAAgB,CAC9B,KAAgB,EAChB,OAA2D;IAA3D,wBAAA,EAAA,cAAoC,qBAAqB,EAAE;IAE3D,OAAO,IAAI,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAgB,EAChB,OAA2D;IAA3D,wBAAA,EAAA,cAAoC,qBAAqB,EAAE;IAE3D,OAAO,IAAI,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC/C,CAAC"} \ No newline at end of file diff --git a/build/es6/globalApi/index.d.ts b/build/es6/globalApi/index.d.ts deleted file mode 100644 index de0e0c09..00000000 --- a/build/es6/globalApi/index.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -export * from './allFaces'; -export * from './ComposableTask'; -export * from './ComputeFaceDescriptorsTasks'; -export * from './detectFaces'; -export * from './DetectFacesTasks'; -export * from './DetectFaceLandmarksTasks'; -export * from './FaceMatcher'; -export * from './nets'; -export * from './types'; diff --git a/build/es6/globalApi/index.js b/build/es6/globalApi/index.js deleted file mode 100644 index 5fd55601..00000000 --- a/build/es6/globalApi/index.js +++ /dev/null @@ -1,9 +0,0 @@ -export * from './allFaces'; -export * from './ComposableTask'; -export * from './ComputeFaceDescriptorsTasks'; -export * from './detectFaces'; -export * from './DetectFacesTasks'; -export * from './DetectFaceLandmarksTasks'; -export * from './FaceMatcher'; -export * from './nets'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/es6/globalApi/index.js.map b/build/es6/globalApi/index.js.map deleted file mode 100644 index 94fa9775..00000000 --- a/build/es6/globalApi/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/globalApi/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,eAAe,CAAA;AAC7B,cAAc,QAAQ,CAAA"} \ No newline at end of file diff --git a/build/es6/globalApi/nets.d.ts b/build/es6/globalApi/nets.d.ts deleted file mode 100644 index bb7bb011..00000000 --- a/build/es6/globalApi/nets.d.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -import { FaceLandmarks5 } from '../classes/FaceLandmarks5'; -import { FaceLandmarks68 } from '../classes/FaceLandmarks68'; -import { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet'; -import { FaceExpressionPrediction } from '../faceExpressionNet/types'; -import { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net'; -import { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet'; -import { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet'; -import { WithFaceLandmarks } from '../factories/WithFaceLandmarks'; -import { Mtcnn } from '../mtcnn/Mtcnn'; -import { MtcnnOptions } from '../mtcnn/MtcnnOptions'; -import { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1'; -import { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options'; -import { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector'; -import { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions'; -import { TinyYolov2 } from '../tinyYolov2'; -export declare const nets: { - ssdMobilenetv1: SsdMobilenetv1; - tinyFaceDetector: TinyFaceDetector; - tinyYolov2: TinyYolov2; - mtcnn: Mtcnn; - faceLandmark68Net: FaceLandmark68Net; - faceLandmark68TinyNet: FaceLandmark68TinyNet; - faceRecognitionNet: FaceRecognitionNet; - faceExpressionNet: FaceExpressionNet; -}; -/** - * Attempts to detect all faces in an image using SSD Mobilenetv1 Network. - * - * @param input The input image. - * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters). - * @returns Bounding box of each face with score. - */ -export declare const ssdMobilenetv1: (input: TNetInput, options: SsdMobilenetv1Options) => Promise; -/** - * Attempts to detect all faces in an image using the Tiny Face Detector. - * - * @param input The input image. - * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters). - * @returns Bounding box of each face with score. - */ -export declare const tinyFaceDetector: (input: TNetInput, options: TinyFaceDetectorOptions) => Promise; -/** - * Attempts to detect all faces in an image using the Tiny Yolov2 Network. - * - * @param input The input image. - * @param options (optional, default: see TinyYolov2Options constructor for default parameters). - * @returns Bounding box of each face with score. - */ -export declare const tinyYolov2: (input: TNetInput, options: TfjsImageRecognitionBase.ITinyYolov2Options) => Promise; -/** - * Attempts to detect all faces in an image and the 5 point face landmarks - * of each detected face using the MTCNN Network. - * - * @param input The input image. - * @param options (optional, default: see MtcnnOptions constructor for default parameters). - * @returns Bounding box of each face with score and 5 point face landmarks. - */ -export declare const mtcnn: (input: TNetInput, options: MtcnnOptions) => Promise[]>; -/** - * Detects the 68 point face landmark positions of the face shown in an image. - * - * @param inputs The face image extracted from the bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns 68 point face landmarks or array thereof in case of batch input. - */ -export declare const detectFaceLandmarks: (input: TNetInput) => Promise; -/** - * Detects the 68 point face landmark positions of the face shown in an image - * using a tinier version of the 68 point face landmark model, which is slightly - * faster at inference, but also slightly less accurate. - * - * @param inputs The face image extracted from the bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns 68 point face landmarks or array thereof in case of batch input. - */ -export declare const detectFaceLandmarksTiny: (input: TNetInput) => Promise; -/** - * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image, - * which uniquely represents the features of that persons face. The computed face descriptor can - * be used to measure the similarity between faces, by computing the euclidean distance of two - * face descriptors. - * - * @param inputs The face image extracted from the aligned bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns Face descriptor with 128 entries or array thereof in case of batch input. - */ -export declare const computeFaceDescriptor: (input: TNetInput) => Promise; -/** - * Recognizes the facial expressions of a face and returns the likelyhood of - * each facial expression. - * - * @param inputs The face image extracted from the bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns An array of facial expressions with corresponding probabilities or array thereof in case of batch input. - */ -export declare const recognizeFaceExpressions: (input: TNetInput) => Promise; -export declare const loadSsdMobilenetv1Model: (url: string) => Promise; -export declare const loadTinyFaceDetectorModel: (url: string) => Promise; -export declare const loadMtcnnModel: (url: string) => Promise; -export declare const loadTinyYolov2Model: (url: string) => Promise; -export declare const loadFaceLandmarkModel: (url: string) => Promise; -export declare const loadFaceLandmarkTinyModel: (url: string) => Promise; -export declare const loadFaceRecognitionModel: (url: string) => Promise; -export declare const loadFaceExpressionModel: (url: string) => Promise; -export declare const loadFaceDetectionModel: (url: string) => Promise; -export declare const locateFaces: (input: TNetInput, options: SsdMobilenetv1Options) => Promise; -export declare const detectLandmarks: (input: TNetInput) => Promise; diff --git a/build/es6/globalApi/nets.js b/build/es6/globalApi/nets.js deleted file mode 100644 index 4ae9edf5..00000000 --- a/build/es6/globalApi/nets.js +++ /dev/null @@ -1,118 +0,0 @@ -import { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet'; -import { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net'; -import { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet'; -import { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet'; -import { Mtcnn } from '../mtcnn/Mtcnn'; -import { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1'; -import { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector'; -import { TinyYolov2 } from '../tinyYolov2'; -export var nets = { - ssdMobilenetv1: new SsdMobilenetv1(), - tinyFaceDetector: new TinyFaceDetector(), - tinyYolov2: new TinyYolov2(), - mtcnn: new Mtcnn(), - faceLandmark68Net: new FaceLandmark68Net(), - faceLandmark68TinyNet: new FaceLandmark68TinyNet(), - faceRecognitionNet: new FaceRecognitionNet(), - faceExpressionNet: new FaceExpressionNet() -}; -/** - * Attempts to detect all faces in an image using SSD Mobilenetv1 Network. - * - * @param input The input image. - * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters). - * @returns Bounding box of each face with score. - */ -export var ssdMobilenetv1 = function (input, options) { - return nets.ssdMobilenetv1.locateFaces(input, options); -}; -/** - * Attempts to detect all faces in an image using the Tiny Face Detector. - * - * @param input The input image. - * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters). - * @returns Bounding box of each face with score. - */ -export var tinyFaceDetector = function (input, options) { - return nets.tinyFaceDetector.locateFaces(input, options); -}; -/** - * Attempts to detect all faces in an image using the Tiny Yolov2 Network. - * - * @param input The input image. - * @param options (optional, default: see TinyYolov2Options constructor for default parameters). - * @returns Bounding box of each face with score. - */ -export var tinyYolov2 = function (input, options) { - return nets.tinyYolov2.locateFaces(input, options); -}; -/** - * Attempts to detect all faces in an image and the 5 point face landmarks - * of each detected face using the MTCNN Network. - * - * @param input The input image. - * @param options (optional, default: see MtcnnOptions constructor for default parameters). - * @returns Bounding box of each face with score and 5 point face landmarks. - */ -export var mtcnn = function (input, options) { - return nets.mtcnn.forward(input, options); -}; -/** - * Detects the 68 point face landmark positions of the face shown in an image. - * - * @param inputs The face image extracted from the bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns 68 point face landmarks or array thereof in case of batch input. - */ -export var detectFaceLandmarks = function (input) { - return nets.faceLandmark68Net.detectLandmarks(input); -}; -/** - * Detects the 68 point face landmark positions of the face shown in an image - * using a tinier version of the 68 point face landmark model, which is slightly - * faster at inference, but also slightly less accurate. - * - * @param inputs The face image extracted from the bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns 68 point face landmarks or array thereof in case of batch input. - */ -export var detectFaceLandmarksTiny = function (input) { - return nets.faceLandmark68TinyNet.detectLandmarks(input); -}; -/** - * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image, - * which uniquely represents the features of that persons face. The computed face descriptor can - * be used to measure the similarity between faces, by computing the euclidean distance of two - * face descriptors. - * - * @param inputs The face image extracted from the aligned bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns Face descriptor with 128 entries or array thereof in case of batch input. - */ -export var computeFaceDescriptor = function (input) { - return nets.faceRecognitionNet.computeFaceDescriptor(input); -}; -/** - * Recognizes the facial expressions of a face and returns the likelyhood of - * each facial expression. - * - * @param inputs The face image extracted from the bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns An array of facial expressions with corresponding probabilities or array thereof in case of batch input. - */ -export var recognizeFaceExpressions = function (input) { - return nets.faceExpressionNet.predictExpressions(input); -}; -export var loadSsdMobilenetv1Model = function (url) { return nets.ssdMobilenetv1.load(url); }; -export var loadTinyFaceDetectorModel = function (url) { return nets.tinyFaceDetector.load(url); }; -export var loadMtcnnModel = function (url) { return nets.mtcnn.load(url); }; -export var loadTinyYolov2Model = function (url) { return nets.tinyYolov2.load(url); }; -export var loadFaceLandmarkModel = function (url) { return nets.faceLandmark68Net.load(url); }; -export var loadFaceLandmarkTinyModel = function (url) { return nets.faceLandmark68TinyNet.load(url); }; -export var loadFaceRecognitionModel = function (url) { return nets.faceRecognitionNet.load(url); }; -export var loadFaceExpressionModel = function (url) { return nets.faceExpressionNet.load(url); }; -// backward compatibility -export var loadFaceDetectionModel = loadSsdMobilenetv1Model; -export var locateFaces = ssdMobilenetv1; -export var detectLandmarks = detectFaceLandmarks; -//# sourceMappingURL=nets.js.map \ No newline at end of file diff --git a/build/es6/globalApi/nets.js.map b/build/es6/globalApi/nets.js.map deleted file mode 100644 index fb8bf03d..00000000 --- a/build/es6/globalApi/nets.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"nets.js","sourceRoot":"","sources":["../../../src/globalApi/nets.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/globalApi/types.d.ts b/build/es6/globalApi/types.d.ts deleted file mode 100644 index 9558c95e..00000000 --- a/build/es6/globalApi/types.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -import { MtcnnOptions } from '../mtcnn/MtcnnOptions'; -import { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options'; -import { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions'; -export declare type FaceDetectionOptions = TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TfjsImageRecognitionBase.TinyYolov2Options; -export declare type FaceDetectionFunction = (input: TNetInput) => Promise; diff --git a/build/es6/globalApi/types.js b/build/es6/globalApi/types.js deleted file mode 100644 index 5b2306a4..00000000 --- a/build/es6/globalApi/types.js +++ /dev/null @@ -1 +0,0 @@ -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/es6/globalApi/types.js.map b/build/es6/globalApi/types.js.map deleted file mode 100644 index e079214c..00000000 --- a/build/es6/globalApi/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/globalApi/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/build/es6/index.d.ts b/build/es6/index.d.ts deleted file mode 100644 index d223ad53..00000000 --- a/build/es6/index.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export { tf }; -export * from 'tfjs-image-recognition-base'; -export * from './classes/index'; -export * from './dom/index'; -export * from './faceExpressionNet/index'; -export * from './faceLandmarkNet/index'; -export * from './faceRecognitionNet/index'; -export * from './factories/index'; -export * from './globalApi/index'; -export * from './mtcnn/index'; -export * from './ssdMobilenetv1/index'; -export * from './tinyFaceDetector/index'; -export * from './tinyYolov2/index'; -export * from './euclideanDistance'; -export * from './resizeResults'; diff --git a/build/es6/index.js b/build/es6/index.js deleted file mode 100644 index efae2a9f..00000000 --- a/build/es6/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export { tf }; -export * from 'tfjs-image-recognition-base'; -export * from './classes/index'; -export * from './dom/index'; -export * from './faceExpressionNet/index'; -export * from './faceLandmarkNet/index'; -export * from './faceRecognitionNet/index'; -export * from './factories/index'; -export * from './globalApi/index'; -export * from './mtcnn/index'; -export * from './ssdMobilenetv1/index'; -export * from './tinyFaceDetector/index'; -export * from './tinyYolov2/index'; -export * from './euclideanDistance'; -export * from './resizeResults'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/es6/index.js.map b/build/es6/index.js.map deleted file mode 100644 index 762fdbac..00000000 --- a/build/es6/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EACL,EAAE,EACH,CAAA;AAED,cAAc,6BAA6B,CAAC;AAE5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC"} \ No newline at end of file diff --git a/build/es6/mtcnn/Mtcnn.d.ts b/build/es6/mtcnn/Mtcnn.d.ts deleted file mode 100644 index 35384f72..00000000 --- a/build/es6/mtcnn/Mtcnn.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base'; -import { IMtcnnOptions } from './MtcnnOptions'; -import { MtcnnResult, NetParams } from './types'; -export declare class Mtcnn extends NeuralNetwork { - constructor(); - forwardInput(input: NetInput, forwardParams?: IMtcnnOptions): Promise<{ - results: MtcnnResult[]; - stats: any; - }>; - forward(input: TNetInput, forwardParams?: IMtcnnOptions): Promise; - forwardWithStats(input: TNetInput, forwardParams?: IMtcnnOptions): Promise<{ - results: MtcnnResult[]; - stats: any; - }>; - protected getDefaultModelName(): string; - protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; - protected extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; -} diff --git a/build/es6/mtcnn/Mtcnn.js b/build/es6/mtcnn/Mtcnn.js deleted file mode 100644 index a048efdd..00000000 --- a/build/es6/mtcnn/Mtcnn.js +++ /dev/null @@ -1,135 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { NeuralNetwork, Point, Rect, toNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -import { FaceLandmarks5 } from '../classes/FaceLandmarks5'; -import { extendWithFaceDetection, extendWithFaceLandmarks } from '../factories'; -import { bgrToRgbTensor } from './bgrToRgbTensor'; -import { CELL_SIZE } from './config'; -import { extractParams } from './extractParams'; -import { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap'; -import { getSizesForScale } from './getSizesForScale'; -import { MtcnnOptions } from './MtcnnOptions'; -import { pyramidDown } from './pyramidDown'; -import { stage1 } from './stage1'; -import { stage2 } from './stage2'; -import { stage3 } from './stage3'; -var Mtcnn = /** @class */ (function (_super) { - tslib_1.__extends(Mtcnn, _super); - function Mtcnn() { - return _super.call(this, 'Mtcnn') || this; - } - Mtcnn.prototype.forwardInput = function (input, forwardParams) { - if (forwardParams === void 0) { forwardParams = {}; } - return tslib_1.__awaiter(this, void 0, void 0, function () { - var params, inputCanvas, stats, tsTotal, imgTensor, onReturn, _a, height, width, _b, minFaceSize, scaleFactor, maxNumScales, scoreThresholds, scaleSteps, scales, ts, out1, out2, out3, results; - return tslib_1.__generator(this, function (_c) { - switch (_c.label) { - case 0: - params = this.params; - if (!params) { - throw new Error('Mtcnn - load model before inference'); - } - inputCanvas = input.canvases[0]; - if (!inputCanvas) { - throw new Error('Mtcnn - inputCanvas is not defined, note that passing tensors into Mtcnn.forwardInput is not supported yet.'); - } - stats = {}; - tsTotal = Date.now(); - imgTensor = tf.tidy(function () { - return bgrToRgbTensor(tf.expandDims(tf.browser.fromPixels(inputCanvas)).toFloat()); - }); - onReturn = function (results) { - // dispose tensors on return - imgTensor.dispose(); - stats.total = Date.now() - tsTotal; - return results; - }; - _a = imgTensor.shape.slice(1), height = _a[0], width = _a[1]; - _b = new MtcnnOptions(forwardParams), minFaceSize = _b.minFaceSize, scaleFactor = _b.scaleFactor, maxNumScales = _b.maxNumScales, scoreThresholds = _b.scoreThresholds, scaleSteps = _b.scaleSteps; - scales = (scaleSteps || pyramidDown(minFaceSize, scaleFactor, [height, width])) - .filter(function (scale) { - var sizes = getSizesForScale(scale, [height, width]); - return Math.min(sizes.width, sizes.height) > CELL_SIZE; - }) - .slice(0, maxNumScales); - stats.scales = scales; - stats.pyramid = scales.map(function (scale) { return getSizesForScale(scale, [height, width]); }); - ts = Date.now(); - return [4 /*yield*/, stage1(imgTensor, scales, scoreThresholds[0], params.pnet, stats)]; - case 1: - out1 = _c.sent(); - stats.total_stage1 = Date.now() - ts; - if (!out1.boxes.length) { - return [2 /*return*/, onReturn({ results: [], stats: stats })]; - } - stats.stage2_numInputBoxes = out1.boxes.length; - // using the inputCanvas to extract and resize the image patches, since it is faster - // than doing this on the gpu - ts = Date.now(); - return [4 /*yield*/, stage2(inputCanvas, out1.boxes, scoreThresholds[1], params.rnet, stats)]; - case 2: - out2 = _c.sent(); - stats.total_stage2 = Date.now() - ts; - if (!out2.boxes.length) { - return [2 /*return*/, onReturn({ results: [], stats: stats })]; - } - stats.stage3_numInputBoxes = out2.boxes.length; - ts = Date.now(); - return [4 /*yield*/, stage3(inputCanvas, out2.boxes, scoreThresholds[2], params.onet, stats)]; - case 3: - out3 = _c.sent(); - stats.total_stage3 = Date.now() - ts; - results = out3.boxes.map(function (box, idx) { return extendWithFaceLandmarks(extendWithFaceDetection({}, new FaceDetection(out3.scores[idx], new Rect(box.left / width, box.top / height, box.width / width, box.height / height), { - height: height, - width: width - })), new FaceLandmarks5(out3.points[idx].map(function (pt) { return pt.sub(new Point(box.left, box.top)).div(new Point(box.width, box.height)); }), { width: box.width, height: box.height })); }); - return [2 /*return*/, onReturn({ results: results, stats: stats })]; - } - }); - }); - }; - Mtcnn.prototype.forward = function (input, forwardParams) { - if (forwardParams === void 0) { forwardParams = {}; } - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [4 /*yield*/, _a.apply(this, [_b.sent(), - forwardParams])]; - case 2: return [2 /*return*/, (_b.sent()).results]; - } - }); - }); - }; - Mtcnn.prototype.forwardWithStats = function (input, forwardParams) { - if (forwardParams === void 0) { forwardParams = {}; } - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent(), - forwardParams])]; - } - }); - }); - }; - Mtcnn.prototype.getDefaultModelName = function () { - return 'mtcnn_model'; - }; - Mtcnn.prototype.extractParamsFromWeigthMap = function (weightMap) { - return extractParamsFromWeigthMap(weightMap); - }; - Mtcnn.prototype.extractParams = function (weights) { - return extractParams(weights); - }; - return Mtcnn; -}(NeuralNetwork)); -export { Mtcnn }; -//# sourceMappingURL=Mtcnn.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/Mtcnn.js.map b/build/es6/mtcnn/Mtcnn.js.map deleted file mode 100644 index 6e9e466c..00000000 --- a/build/es6/mtcnn/Mtcnn.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Mtcnn.js","sourceRoot":"","sources":["../../../src/mtcnn/Mtcnn.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/mtcnn/MtcnnBox.d.ts b/build/es6/mtcnn/MtcnnBox.d.ts deleted file mode 100644 index e61cf2f0..00000000 --- a/build/es6/mtcnn/MtcnnBox.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Box } from 'tfjs-image-recognition-base'; -export declare class MtcnnBox extends Box { - constructor(left: number, top: number, right: number, bottom: number); -} diff --git a/build/es6/mtcnn/MtcnnBox.js b/build/es6/mtcnn/MtcnnBox.js deleted file mode 100644 index 65b0b6c8..00000000 --- a/build/es6/mtcnn/MtcnnBox.js +++ /dev/null @@ -1,11 +0,0 @@ -import * as tslib_1 from "tslib"; -import { Box } from 'tfjs-image-recognition-base'; -var MtcnnBox = /** @class */ (function (_super) { - tslib_1.__extends(MtcnnBox, _super); - function MtcnnBox(left, top, right, bottom) { - return _super.call(this, { left: left, top: top, right: right, bottom: bottom }, true) || this; - } - return MtcnnBox; -}(Box)); -export { MtcnnBox }; -//# sourceMappingURL=MtcnnBox.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/MtcnnBox.js.map b/build/es6/mtcnn/MtcnnBox.js.map deleted file mode 100644 index d64b12ac..00000000 --- a/build/es6/mtcnn/MtcnnBox.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"MtcnnBox.js","sourceRoot":"","sources":["../../../src/mtcnn/MtcnnBox.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAElD;IAA8B,oCAAa;IACzC,kBAAY,IAAY,EAAE,GAAW,EAAE,KAAa,EAAE,MAAc;eAClE,kBAAM,EAAE,IAAI,MAAA,EAAE,GAAG,KAAA,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,EAAE,IAAI,CAAC;IAC3C,CAAC;IACH,eAAC;AAAD,CAAC,AAJD,CAA8B,GAAG,GAIhC"} \ No newline at end of file diff --git a/build/es6/mtcnn/MtcnnOptions.d.ts b/build/es6/mtcnn/MtcnnOptions.d.ts deleted file mode 100644 index 140195e1..00000000 --- a/build/es6/mtcnn/MtcnnOptions.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -export interface IMtcnnOptions { - minFaceSize?: number; - scaleFactor?: number; - maxNumScales?: number; - scoreThresholds?: number[]; - scaleSteps?: number[]; -} -export declare class MtcnnOptions { - protected _name: string; - private _minFaceSize; - private _scaleFactor; - private _maxNumScales; - private _scoreThresholds; - private _scaleSteps; - constructor({ minFaceSize, scaleFactor, maxNumScales, scoreThresholds, scaleSteps }?: IMtcnnOptions); - readonly minFaceSize: number; - readonly scaleFactor: number; - readonly maxNumScales: number; - readonly scoreThresholds: number[]; - readonly scaleSteps: number[] | undefined; -} diff --git a/build/es6/mtcnn/MtcnnOptions.js b/build/es6/mtcnn/MtcnnOptions.js deleted file mode 100644 index ce341f1c..00000000 --- a/build/es6/mtcnn/MtcnnOptions.js +++ /dev/null @@ -1,57 +0,0 @@ -var MtcnnOptions = /** @class */ (function () { - function MtcnnOptions(_a) { - var _b = _a === void 0 ? {} : _a, minFaceSize = _b.minFaceSize, scaleFactor = _b.scaleFactor, maxNumScales = _b.maxNumScales, scoreThresholds = _b.scoreThresholds, scaleSteps = _b.scaleSteps; - this._name = 'MtcnnOptions'; - this._minFaceSize = minFaceSize || 20; - this._scaleFactor = scaleFactor || 0.709; - this._maxNumScales = maxNumScales || 10; - this._scoreThresholds = scoreThresholds || [0.6, 0.7, 0.7]; - this._scaleSteps = scaleSteps; - if (typeof this._minFaceSize !== 'number' || this._minFaceSize < 0) { - throw new Error(this._name + " - expected minFaceSize to be a number > 0"); - } - if (typeof this._scaleFactor !== 'number' || this._scaleFactor <= 0 || this._scaleFactor >= 1) { - throw new Error(this._name + " - expected scaleFactor to be a number between 0 and 1"); - } - if (typeof this._maxNumScales !== 'number' || this._maxNumScales < 0) { - throw new Error(this._name + " - expected maxNumScales to be a number > 0"); - } - if (!Array.isArray(this._scoreThresholds) - || this._scoreThresholds.length !== 3 - || this._scoreThresholds.some(function (th) { return typeof th !== 'number'; })) { - throw new Error(this._name + " - expected scoreThresholds to be an array of numbers of length 3"); - } - if (this._scaleSteps - && (!Array.isArray(this._scaleSteps) || this._scaleSteps.some(function (th) { return typeof th !== 'number'; }))) { - throw new Error(this._name + " - expected scaleSteps to be an array of numbers"); - } - } - Object.defineProperty(MtcnnOptions.prototype, "minFaceSize", { - get: function () { return this._minFaceSize; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MtcnnOptions.prototype, "scaleFactor", { - get: function () { return this._scaleFactor; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MtcnnOptions.prototype, "maxNumScales", { - get: function () { return this._maxNumScales; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MtcnnOptions.prototype, "scoreThresholds", { - get: function () { return this._scoreThresholds; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MtcnnOptions.prototype, "scaleSteps", { - get: function () { return this._scaleSteps; }, - enumerable: true, - configurable: true - }); - return MtcnnOptions; -}()); -export { MtcnnOptions }; -//# sourceMappingURL=MtcnnOptions.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/MtcnnOptions.js.map b/build/es6/mtcnn/MtcnnOptions.js.map deleted file mode 100644 index a2b20743..00000000 --- a/build/es6/mtcnn/MtcnnOptions.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"MtcnnOptions.js","sourceRoot":"","sources":["../../../src/mtcnn/MtcnnOptions.ts"],"names":[],"mappings":"AAQA;IASE,sBAAY,EAA2F;YAA3F,4BAA2F,EAAzF,4BAAW,EAAE,4BAAW,EAAE,8BAAY,EAAE,oCAAe,EAAE,0BAAU;QARvE,UAAK,GAAW,cAAc,CAAA;QAStC,IAAI,CAAC,YAAY,GAAG,WAAW,IAAI,EAAE,CAAA;QACrC,IAAI,CAAC,YAAY,GAAG,WAAW,IAAI,KAAK,CAAA;QACxC,IAAI,CAAC,aAAa,GAAG,YAAY,IAAI,EAAE,CAAA;QACvC,IAAI,CAAC,gBAAgB,GAAG,eAAe,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QAC1D,IAAI,CAAC,WAAW,GAAG,UAAU,CAAA;QAE7B,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;YAClE,MAAM,IAAI,KAAK,CAAI,IAAI,CAAC,KAAK,+CAA4C,CAAC,CAAA;SAC3E;QAED,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;YAC7F,MAAM,IAAI,KAAK,CAAI,IAAI,CAAC,KAAK,2DAAwD,CAAC,CAAA;SACvF;QAED,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;YACpE,MAAM,IAAI,KAAK,CAAI,IAAI,CAAC,KAAK,gDAA6C,CAAC,CAAA;SAC5E;QAED,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;eAChC,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;eAClC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,OAAO,EAAE,KAAK,QAAQ,EAAtB,CAAsB,CAAC,EAC7D;YACA,MAAM,IAAI,KAAK,CAAI,IAAI,CAAC,KAAK,sEAAmE,CAAC,CAAA;SAClG;QAED,IACE,IAAI,CAAC,WAAW;eACX,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,OAAO,EAAE,KAAK,QAAQ,EAAtB,CAAsB,CAAC,CAAC,EAC9F;YACA,MAAM,IAAI,KAAK,CAAI,IAAI,CAAC,KAAK,qDAAkD,CAAC,CAAA;SACjF;IACH,CAAC;IAED,sBAAI,qCAAW;aAAf,cAA4B,OAAO,IAAI,CAAC,YAAY,CAAA,CAAC,CAAC;;;OAAA;IACtD,sBAAI,qCAAW;aAAf,cAA4B,OAAO,IAAI,CAAC,YAAY,CAAA,CAAC,CAAC;;;OAAA;IACtD,sBAAI,sCAAY;aAAhB,cAA6B,OAAO,IAAI,CAAC,aAAa,CAAA,CAAC,CAAC;;;OAAA;IACxD,sBAAI,yCAAe;aAAnB,cAAkC,OAAO,IAAI,CAAC,gBAAgB,CAAA,CAAC,CAAC;;;OAAA;IAChE,sBAAI,oCAAU;aAAd,cAAyC,OAAO,IAAI,CAAC,WAAW,CAAA,CAAC,CAAC;;;OAAA;IACpE,mBAAC;AAAD,CAAC,AAjDD,IAiDC"} \ No newline at end of file diff --git a/build/es6/mtcnn/ONet.d.ts b/build/es6/mtcnn/ONet.d.ts deleted file mode 100644 index dfc7f113..00000000 --- a/build/es6/mtcnn/ONet.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { ONetParams } from './types'; -export declare function ONet(x: tf.Tensor4D, params: ONetParams): { - scores: tf.Tensor1D; - regions: tf.Tensor2D; - points: tf.Tensor2D; -}; diff --git a/build/es6/mtcnn/ONet.js b/build/es6/mtcnn/ONet.js deleted file mode 100644 index fe5fd1bf..00000000 --- a/build/es6/mtcnn/ONet.js +++ /dev/null @@ -1,24 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { fullyConnectedLayer } from '../common/fullyConnectedLayer'; -import { prelu } from './prelu'; -import { sharedLayer } from './sharedLayers'; -export function ONet(x, params) { - return tf.tidy(function () { - var out = sharedLayer(x, params); - out = tf.maxPool(out, [2, 2], [2, 2], 'same'); - out = TfjsImageRecognitionBase.convLayer(out, params.conv4, 'valid'); - out = prelu(out, params.prelu4_alpha); - var vectorized = tf.reshape(out, [out.shape[0], params.fc1.weights.shape[0]]); - var fc1 = fullyConnectedLayer(vectorized, params.fc1); - var prelu5 = prelu(fc1, params.prelu5_alpha); - var fc2_1 = fullyConnectedLayer(prelu5, params.fc2_1); - var max = tf.expandDims(tf.max(fc2_1, 1), 1); - var prob = tf.softmax(tf.sub(fc2_1, max), 1); - var regions = fullyConnectedLayer(prelu5, params.fc2_2); - var points = fullyConnectedLayer(prelu5, params.fc2_3); - var scores = tf.unstack(prob, 1)[1]; - return { scores: scores, regions: regions, points: points }; - }); -} -//# sourceMappingURL=ONet.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/ONet.js.map b/build/es6/mtcnn/ONet.js.map deleted file mode 100644 index e4ae23ba..00000000 --- a/build/es6/mtcnn/ONet.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ONet.js","sourceRoot":"","sources":["../../../src/mtcnn/ONet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,MAAM,UAAU,IAAI,CAAC,CAAc,EAAE,MAAkB;IACrD,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,GAAG,GAAG,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QAChC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QAC7C,GAAG,GAAG,wBAAwB,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACpE,GAAG,GAAG,KAAK,CAAc,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAElD,IAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAgB,CAAA;QAC9F,IAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QACvD,IAAM,MAAM,GAAG,KAAK,CAAc,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QACvD,IAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAE9C,IAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAgB,CAAA;QAC7D,IAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QACzD,IAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QAExD,IAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAgB,CAAA;QACpD,OAAO,EAAE,MAAM,QAAA,EAAE,OAAO,SAAA,EAAE,MAAM,QAAA,EAAE,CAAA;IACpC,CAAC,CAAC,CAAA;AACJ,CAAC"} \ No newline at end of file diff --git a/build/es6/mtcnn/PNet.d.ts b/build/es6/mtcnn/PNet.d.ts deleted file mode 100644 index 74e2c841..00000000 --- a/build/es6/mtcnn/PNet.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { PNetParams } from './types'; -export declare function PNet(x: tf.Tensor4D, params: PNetParams): { - prob: tf.Tensor4D; - regions: tf.Tensor4D; -}; diff --git a/build/es6/mtcnn/PNet.js b/build/es6/mtcnn/PNet.js deleted file mode 100644 index f42c01ef..00000000 --- a/build/es6/mtcnn/PNet.js +++ /dev/null @@ -1,14 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { sharedLayer } from './sharedLayers'; -export function PNet(x, params) { - return tf.tidy(function () { - var out = sharedLayer(x, params, true); - var conv = TfjsImageRecognitionBase.convLayer(out, params.conv4_1, 'valid'); - var max = tf.expandDims(tf.max(conv, 3), 3); - var prob = tf.softmax(tf.sub(conv, max), 3); - var regions = TfjsImageRecognitionBase.convLayer(out, params.conv4_2, 'valid'); - return { prob: prob, regions: regions }; - }); -} -//# sourceMappingURL=PNet.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/PNet.js.map b/build/es6/mtcnn/PNet.js.map deleted file mode 100644 index dcab7102..00000000 --- a/build/es6/mtcnn/PNet.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"PNet.js","sourceRoot":"","sources":["../../../src/mtcnn/PNet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,MAAM,UAAU,IAAI,CAAC,CAAc,EAAE,MAAkB;IACrD,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,GAAG,GAAG,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;QACtC,IAAM,IAAI,GAAG,wBAAwB,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC7E,IAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7C,IAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAgB,CAAA;QAC5D,IAAM,OAAO,GAAG,wBAAwB,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAEhF,OAAO,EAAE,IAAI,MAAA,EAAE,OAAO,SAAA,EAAE,CAAA;IAC1B,CAAC,CAAC,CAAA;AACJ,CAAC"} \ No newline at end of file diff --git a/build/es6/mtcnn/RNet.d.ts b/build/es6/mtcnn/RNet.d.ts deleted file mode 100644 index c6883ff7..00000000 --- a/build/es6/mtcnn/RNet.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { RNetParams } from './types'; -export declare function RNet(x: tf.Tensor4D, params: RNetParams): { - scores: tf.Tensor1D; - regions: tf.Tensor2D; -}; diff --git a/build/es6/mtcnn/RNet.js b/build/es6/mtcnn/RNet.js deleted file mode 100644 index bbb50488..00000000 --- a/build/es6/mtcnn/RNet.js +++ /dev/null @@ -1,19 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { fullyConnectedLayer } from '../common/fullyConnectedLayer'; -import { prelu } from './prelu'; -import { sharedLayer } from './sharedLayers'; -export function RNet(x, params) { - return tf.tidy(function () { - var convOut = sharedLayer(x, params); - var vectorized = tf.reshape(convOut, [convOut.shape[0], params.fc1.weights.shape[0]]); - var fc1 = fullyConnectedLayer(vectorized, params.fc1); - var prelu4 = prelu(fc1, params.prelu4_alpha); - var fc2_1 = fullyConnectedLayer(prelu4, params.fc2_1); - var max = tf.expandDims(tf.max(fc2_1, 1), 1); - var prob = tf.softmax(tf.sub(fc2_1, max), 1); - var regions = fullyConnectedLayer(prelu4, params.fc2_2); - var scores = tf.unstack(prob, 1)[1]; - return { scores: scores, regions: regions }; - }); -} -//# sourceMappingURL=RNet.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/RNet.js.map b/build/es6/mtcnn/RNet.js.map deleted file mode 100644 index 78db6c6d..00000000 --- a/build/es6/mtcnn/RNet.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"RNet.js","sourceRoot":"","sources":["../../../src/mtcnn/RNet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,MAAM,UAAU,IAAI,CAAC,CAAc,EAAE,MAAkB;IACrD,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAM,OAAO,GAAG,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QACtC,IAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAgB,CAAA;QACtG,IAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QACvD,IAAM,MAAM,GAAG,KAAK,CAAc,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QACvD,IAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9C,IAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAgB,CAAA;QAC7D,IAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QAEzD,IAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAgB,CAAA;QACpD,OAAO,EAAE,MAAM,QAAA,EAAE,OAAO,SAAA,EAAE,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC"} \ No newline at end of file diff --git a/build/es6/mtcnn/bgrToRgbTensor.d.ts b/build/es6/mtcnn/bgrToRgbTensor.d.ts deleted file mode 100644 index 7b544bef..00000000 --- a/build/es6/mtcnn/bgrToRgbTensor.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export declare function bgrToRgbTensor(tensor: tf.Tensor4D): tf.Tensor4D; diff --git a/build/es6/mtcnn/bgrToRgbTensor.js b/build/es6/mtcnn/bgrToRgbTensor.js deleted file mode 100644 index 5084eaf2..00000000 --- a/build/es6/mtcnn/bgrToRgbTensor.js +++ /dev/null @@ -1,5 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export function bgrToRgbTensor(tensor) { - return tf.tidy(function () { return tf.stack(tf.unstack(tensor, 3).reverse(), 3); }); -} -//# sourceMappingURL=bgrToRgbTensor.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/bgrToRgbTensor.js.map b/build/es6/mtcnn/bgrToRgbTensor.js.map deleted file mode 100644 index 60ee7eda..00000000 --- a/build/es6/mtcnn/bgrToRgbTensor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bgrToRgbTensor.js","sourceRoot":"","sources":["../../../src/mtcnn/bgrToRgbTensor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,MAAM,UAAU,cAAc,CAAC,MAAmB;IAChD,OAAO,EAAE,CAAC,IAAI,CACZ,cAAM,OAAA,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAA5C,CAA4C,CACpC,CAAA;AAClB,CAAC"} \ No newline at end of file diff --git a/build/es6/mtcnn/config.d.ts b/build/es6/mtcnn/config.d.ts deleted file mode 100644 index 05a91437..00000000 --- a/build/es6/mtcnn/config.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare const CELL_STRIDE = 2; -export declare const CELL_SIZE = 12; diff --git a/build/es6/mtcnn/config.js b/build/es6/mtcnn/config.js deleted file mode 100644 index 134cf10b..00000000 --- a/build/es6/mtcnn/config.js +++ /dev/null @@ -1,3 +0,0 @@ -export var CELL_STRIDE = 2; -export var CELL_SIZE = 12; -//# sourceMappingURL=config.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/config.js.map b/build/es6/mtcnn/config.js.map deleted file mode 100644 index cfc71d2c..00000000 --- a/build/es6/mtcnn/config.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/mtcnn/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,WAAW,GAAG,CAAC,CAAA;AAC5B,MAAM,CAAC,IAAM,SAAS,GAAG,EAAE,CAAA"} \ No newline at end of file diff --git a/build/es6/mtcnn/extractImagePatches.d.ts b/build/es6/mtcnn/extractImagePatches.d.ts deleted file mode 100644 index 4e43a1b6..00000000 --- a/build/es6/mtcnn/extractImagePatches.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { Box, IDimensions } from 'tfjs-image-recognition-base'; -export declare function extractImagePatches(img: HTMLCanvasElement, boxes: Box[], { width, height }: IDimensions): Promise; diff --git a/build/es6/mtcnn/extractImagePatches.js b/build/es6/mtcnn/extractImagePatches.js deleted file mode 100644 index 42d9500c..00000000 --- a/build/es6/mtcnn/extractImagePatches.js +++ /dev/null @@ -1,52 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { createCanvas, createCanvasFromMedia, env, getContext2dOrThrow, } from 'tfjs-image-recognition-base'; -import { normalize } from './normalize'; -export function extractImagePatches(img, boxes, _a) { - var width = _a.width, height = _a.height; - return tslib_1.__awaiter(this, void 0, void 0, function () { - var imgCtx, bitmaps, imagePatchesDatas; - var _this = this; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - imgCtx = getContext2dOrThrow(img); - return [4 /*yield*/, Promise.all(boxes.map(function (box) { return tslib_1.__awaiter(_this, void 0, void 0, function () { - var _a, y, ey, x, ex, fromX, fromY, imgData; - return tslib_1.__generator(this, function (_b) { - _a = box.padAtBorders(img.height, img.width), y = _a.y, ey = _a.ey, x = _a.x, ex = _a.ex; - fromX = x - 1; - fromY = y - 1; - imgData = imgCtx.getImageData(fromX, fromY, (ex - fromX), (ey - fromY)); - return [2 /*return*/, env.isNodejs() ? createCanvasFromMedia(imgData) : createImageBitmap(imgData)]; - }); - }); }))]; - case 1: - bitmaps = _b.sent(); - imagePatchesDatas = []; - bitmaps.forEach(function (bmp) { - var patch = createCanvas({ width: width, height: height }); - var patchCtx = getContext2dOrThrow(patch); - patchCtx.drawImage(bmp, 0, 0, width, height); - var data = patchCtx.getImageData(0, 0, width, height).data; - var currData = []; - // RGBA -> BGR - for (var i = 0; i < data.length; i += 4) { - currData.push(data[i + 2]); - currData.push(data[i + 1]); - currData.push(data[i]); - } - imagePatchesDatas.push(currData); - }); - return [2 /*return*/, imagePatchesDatas.map(function (data) { - var t = tf.tidy(function () { - var imagePatchTensor = tf.transpose(tf.tensor4d(data, [1, width, height, 3]), [0, 2, 1, 3]).toFloat(); - return normalize(imagePatchTensor); - }); - return t; - })]; - } - }); - }); -} -//# sourceMappingURL=extractImagePatches.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/extractImagePatches.js.map b/build/es6/mtcnn/extractImagePatches.js.map deleted file mode 100644 index 4534abd1..00000000 --- a/build/es6/mtcnn/extractImagePatches.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractImagePatches.js","sourceRoot":"","sources":["../../../src/mtcnn/extractImagePatches.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAEL,YAAY,EACZ,qBAAqB,EACrB,GAAG,EACH,mBAAmB,GAEpB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,UAAgB,mBAAmB,CACvC,GAAsB,EACtB,KAAY,EACZ,EAA8B;QAA5B,gBAAK,EAAE,kBAAM;;;;;;;oBAIT,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAA;oBAEvB,qBAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAM,GAAG;;;gCAE7C,KAAmB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAxD,CAAC,OAAA,EAAE,EAAE,QAAA,EAAE,CAAC,OAAA,EAAE,EAAE,QAAA,CAA4C;gCAE1D,KAAK,GAAG,CAAC,GAAG,CAAC,CAAA;gCACb,KAAK,GAAG,CAAC,GAAG,CAAC,CAAA;gCACb,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAA;gCAE7E,sBAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAA;;6BACpF,CAAC,CAAC,EAAA;;oBATG,OAAO,GAAG,SASb;oBAEG,iBAAiB,GAAe,EAAE,CAAA;oBAExC,OAAO,CAAC,OAAO,CAAC,UAAA,GAAG;wBACjB,IAAM,KAAK,GAAG,YAAY,CAAC,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAC,CAAA;wBAC7C,IAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAA;wBAC3C,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;wBACpC,IAAA,sDAAI,CAA+C;wBAE3D,IAAM,QAAQ,GAAG,EAAE,CAAA;wBACnB,cAAc;wBACd,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAE,CAAC,EAAE;4BACpC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;4BAC1B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;4BAC1B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;yBACvB;wBACD,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;oBAClC,CAAC,CAAC,CAAA;oBAGF,sBAAO,iBAAiB,CAAC,GAAG,CAAC,UAAA,IAAI;4BAC/B,IAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;gCAChB,IAAM,gBAAgB,GAAG,EAAE,CAAC,SAAS,CACnC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EACxC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACb,CAAC,OAAO,EAAiB,CAAA;gCAE1B,OAAO,SAAS,CAAC,gBAAgB,CAAC,CAAA;4BACpC,CAAC,CAAC,CAAA;4BACF,OAAO,CAAC,CAAA;wBACV,CAAC,CAAC,EAAA;;;;CACH"} \ No newline at end of file diff --git a/build/es6/mtcnn/extractParams.d.ts b/build/es6/mtcnn/extractParams.d.ts deleted file mode 100644 index 14d45d2b..00000000 --- a/build/es6/mtcnn/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/es6/mtcnn/extractParams.js b/build/es6/mtcnn/extractParams.js deleted file mode 100644 index 8cab74b2..00000000 --- a/build/es6/mtcnn/extractParams.js +++ /dev/null @@ -1,65 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -function extractorsFactory(extractWeights, paramMappings) { - var extractConvParams = TfjsImageRecognitionBase.extractConvParamsFactory(extractWeights, paramMappings); - var extractFCParams = TfjsImageRecognitionBase.extractFCParamsFactory(extractWeights, paramMappings); - function extractPReluParams(size, paramPath) { - var alpha = tf.tensor1d(extractWeights(size)); - paramMappings.push({ paramPath: paramPath }); - return alpha; - } - function extractSharedParams(numFilters, mappedPrefix, isRnet) { - if (isRnet === void 0) { isRnet = false; } - var conv1 = extractConvParams(numFilters[0], numFilters[1], 3, mappedPrefix + "/conv1"); - var prelu1_alpha = extractPReluParams(numFilters[1], mappedPrefix + "/prelu1_alpha"); - var conv2 = extractConvParams(numFilters[1], numFilters[2], 3, mappedPrefix + "/conv2"); - var prelu2_alpha = extractPReluParams(numFilters[2], mappedPrefix + "/prelu2_alpha"); - var conv3 = extractConvParams(numFilters[2], numFilters[3], isRnet ? 2 : 3, mappedPrefix + "/conv3"); - var prelu3_alpha = extractPReluParams(numFilters[3], mappedPrefix + "/prelu3_alpha"); - return { conv1: conv1, prelu1_alpha: prelu1_alpha, conv2: conv2, prelu2_alpha: prelu2_alpha, conv3: conv3, prelu3_alpha: prelu3_alpha }; - } - function extractPNetParams() { - var sharedParams = extractSharedParams([3, 10, 16, 32], 'pnet'); - var conv4_1 = extractConvParams(32, 2, 1, 'pnet/conv4_1'); - var conv4_2 = extractConvParams(32, 4, 1, 'pnet/conv4_2'); - return tslib_1.__assign({}, sharedParams, { conv4_1: conv4_1, conv4_2: conv4_2 }); - } - function extractRNetParams() { - var sharedParams = extractSharedParams([3, 28, 48, 64], 'rnet', true); - var fc1 = extractFCParams(576, 128, 'rnet/fc1'); - var prelu4_alpha = extractPReluParams(128, 'rnet/prelu4_alpha'); - var fc2_1 = extractFCParams(128, 2, 'rnet/fc2_1'); - var fc2_2 = extractFCParams(128, 4, 'rnet/fc2_2'); - return tslib_1.__assign({}, sharedParams, { fc1: fc1, prelu4_alpha: prelu4_alpha, fc2_1: fc2_1, fc2_2: fc2_2 }); - } - function extractONetParams() { - var sharedParams = extractSharedParams([3, 32, 64, 64], 'onet'); - var conv4 = extractConvParams(64, 128, 2, 'onet/conv4'); - var prelu4_alpha = extractPReluParams(128, 'onet/prelu4_alpha'); - var fc1 = extractFCParams(1152, 256, 'onet/fc1'); - var prelu5_alpha = extractPReluParams(256, 'onet/prelu5_alpha'); - var fc2_1 = extractFCParams(256, 2, 'onet/fc2_1'); - var fc2_2 = extractFCParams(256, 4, 'onet/fc2_2'); - var fc2_3 = extractFCParams(256, 10, 'onet/fc2_3'); - return tslib_1.__assign({}, sharedParams, { conv4: conv4, prelu4_alpha: prelu4_alpha, fc1: fc1, prelu5_alpha: prelu5_alpha, fc2_1: fc2_1, fc2_2: fc2_2, fc2_3: fc2_3 }); - } - return { - extractPNetParams: extractPNetParams, - extractRNetParams: extractRNetParams, - extractONetParams: extractONetParams - }; -} -export function extractParams(weights) { - var _a = TfjsImageRecognitionBase.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var paramMappings = []; - var _b = extractorsFactory(extractWeights, paramMappings), extractPNetParams = _b.extractPNetParams, extractRNetParams = _b.extractRNetParams, extractONetParams = _b.extractONetParams; - var pnet = extractPNetParams(); - var rnet = extractRNetParams(); - var onet = extractONetParams(); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { params: { pnet: pnet, rnet: rnet, onet: onet }, paramMappings: paramMappings }; -} -//# sourceMappingURL=extractParams.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/extractParams.js.map b/build/es6/mtcnn/extractParams.js.map deleted file mode 100644 index af6bef8c..00000000 --- a/build/es6/mtcnn/extractParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/mtcnn/extractParams.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/mtcnn/extractParamsFromWeigthMap.d.ts b/build/es6/mtcnn/extractParamsFromWeigthMap.d.ts deleted file mode 100644 index 7bf5a66d..00000000 --- a/build/es6/mtcnn/extractParamsFromWeigthMap.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/es6/mtcnn/extractParamsFromWeigthMap.js b/build/es6/mtcnn/extractParamsFromWeigthMap.js deleted file mode 100644 index 38a119f4..00000000 --- a/build/es6/mtcnn/extractParamsFromWeigthMap.js +++ /dev/null @@ -1,67 +0,0 @@ -import * as tslib_1 from "tslib"; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -function extractorsFactory(weightMap, paramMappings) { - var extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings); - function extractConvParams(prefix) { - var filters = extractWeightEntry(prefix + "/weights", 4, prefix + "/filters"); - var bias = extractWeightEntry(prefix + "/bias", 1); - return { filters: filters, bias: bias }; - } - function extractFCParams(prefix) { - var weights = extractWeightEntry(prefix + "/weights", 2); - var bias = extractWeightEntry(prefix + "/bias", 1); - return { weights: weights, bias: bias }; - } - function extractPReluParams(paramPath) { - return extractWeightEntry(paramPath, 1); - } - function extractSharedParams(prefix) { - var conv1 = extractConvParams(prefix + "/conv1"); - var prelu1_alpha = extractPReluParams(prefix + "/prelu1_alpha"); - var conv2 = extractConvParams(prefix + "/conv2"); - var prelu2_alpha = extractPReluParams(prefix + "/prelu2_alpha"); - var conv3 = extractConvParams(prefix + "/conv3"); - var prelu3_alpha = extractPReluParams(prefix + "/prelu3_alpha"); - return { conv1: conv1, prelu1_alpha: prelu1_alpha, conv2: conv2, prelu2_alpha: prelu2_alpha, conv3: conv3, prelu3_alpha: prelu3_alpha }; - } - function extractPNetParams() { - var sharedParams = extractSharedParams('pnet'); - var conv4_1 = extractConvParams('pnet/conv4_1'); - var conv4_2 = extractConvParams('pnet/conv4_2'); - return tslib_1.__assign({}, sharedParams, { conv4_1: conv4_1, conv4_2: conv4_2 }); - } - function extractRNetParams() { - var sharedParams = extractSharedParams('rnet'); - var fc1 = extractFCParams('rnet/fc1'); - var prelu4_alpha = extractPReluParams('rnet/prelu4_alpha'); - var fc2_1 = extractFCParams('rnet/fc2_1'); - var fc2_2 = extractFCParams('rnet/fc2_2'); - return tslib_1.__assign({}, sharedParams, { fc1: fc1, prelu4_alpha: prelu4_alpha, fc2_1: fc2_1, fc2_2: fc2_2 }); - } - function extractONetParams() { - var sharedParams = extractSharedParams('onet'); - var conv4 = extractConvParams('onet/conv4'); - var prelu4_alpha = extractPReluParams('onet/prelu4_alpha'); - var fc1 = extractFCParams('onet/fc1'); - var prelu5_alpha = extractPReluParams('onet/prelu5_alpha'); - var fc2_1 = extractFCParams('onet/fc2_1'); - var fc2_2 = extractFCParams('onet/fc2_2'); - var fc2_3 = extractFCParams('onet/fc2_3'); - return tslib_1.__assign({}, sharedParams, { conv4: conv4, prelu4_alpha: prelu4_alpha, fc1: fc1, prelu5_alpha: prelu5_alpha, fc2_1: fc2_1, fc2_2: fc2_2, fc2_3: fc2_3 }); - } - return { - extractPNetParams: extractPNetParams, - extractRNetParams: extractRNetParams, - extractONetParams: extractONetParams - }; -} -export function extractParamsFromWeigthMap(weightMap) { - var paramMappings = []; - var _a = extractorsFactory(weightMap, paramMappings), extractPNetParams = _a.extractPNetParams, extractRNetParams = _a.extractRNetParams, extractONetParams = _a.extractONetParams; - var pnet = extractPNetParams(); - var rnet = extractRNetParams(); - var onet = extractONetParams(); - TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: { pnet: pnet, rnet: rnet, onet: onet }, paramMappings: paramMappings }; -} -//# sourceMappingURL=extractParamsFromWeigthMap.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/extractParamsFromWeigthMap.js.map b/build/es6/mtcnn/extractParamsFromWeigthMap.js.map deleted file mode 100644 index 067255ff..00000000 --- a/build/es6/mtcnn/extractParamsFromWeigthMap.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParamsFromWeigthMap.js","sourceRoot":"","sources":["../../../src/mtcnn/extractParamsFromWeigthMap.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAIvE,SAAS,iBAAiB,CAAC,SAAc,EAAE,aAAsD;IAE/F,IAAM,kBAAkB,GAAG,wBAAwB,CAAC,yBAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAEvG,SAAS,iBAAiB,CAAC,MAAc;QACvC,IAAM,OAAO,GAAG,kBAAkB,CAAiB,MAAM,aAAU,EAAE,CAAC,EAAK,MAAM,aAAU,CAAC,CAAA;QAC5F,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QAEjE,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC;IAED,SAAS,eAAe,CAAC,MAAc;QACrC,IAAM,OAAO,GAAG,kBAAkB,CAAiB,MAAM,aAAU,EAAE,CAAC,CAAC,CAAA;QACvE,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QAEjE,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC;IAED,SAAS,kBAAkB,CAAC,SAAiB;QAC3C,OAAO,kBAAkB,CAAc,SAAS,EAAE,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,SAAS,mBAAmB,CAAC,MAAc;QAEzC,IAAM,KAAK,GAAG,iBAAiB,CAAI,MAAM,WAAQ,CAAC,CAAA;QAClD,IAAM,YAAY,GAAG,kBAAkB,CAAI,MAAM,kBAAe,CAAC,CAAA;QACjE,IAAM,KAAK,GAAG,iBAAiB,CAAI,MAAM,WAAQ,CAAC,CAAA;QAClD,IAAM,YAAY,GAAG,kBAAkB,CAAI,MAAM,kBAAe,CAAC,CAAA;QACjE,IAAM,KAAK,GAAG,iBAAiB,CAAI,MAAM,WAAQ,CAAC,CAAA;QAClD,IAAM,YAAY,GAAG,kBAAkB,CAAI,MAAM,kBAAe,CAAC,CAAA;QAEjE,OAAO,EAAE,KAAK,OAAA,EAAE,YAAY,cAAA,EAAE,KAAK,OAAA,EAAE,YAAY,cAAA,EAAE,KAAK,OAAA,EAAE,YAAY,cAAA,EAAE,CAAA;IAC1E,CAAC;IAED,SAAS,iBAAiB;QAExB,IAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;QAChD,IAAM,OAAO,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAA;QACjD,IAAM,OAAO,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAA;QAEjD,4BAAY,YAAY,IAAE,OAAO,SAAA,EAAE,OAAO,SAAA,IAAE;IAC9C,CAAC;IAED,SAAS,iBAAiB;QAExB,IAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;QAChD,IAAM,GAAG,GAAG,eAAe,CAAC,UAAU,CAAC,CAAA;QACvC,IAAM,YAAY,GAAG,kBAAkB,CAAC,mBAAmB,CAAC,CAAA;QAC5D,IAAM,KAAK,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;QAC3C,IAAM,KAAK,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;QAE3C,4BAAY,YAAY,IAAE,GAAG,KAAA,EAAE,YAAY,cAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,IAAE;IAC7D,CAAC;IAED,SAAS,iBAAiB;QAExB,IAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;QAChD,IAAM,KAAK,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAA;QAC7C,IAAM,YAAY,GAAG,kBAAkB,CAAC,mBAAmB,CAAC,CAAA;QAC5D,IAAM,GAAG,GAAG,eAAe,CAAC,UAAU,CAAC,CAAA;QACvC,IAAM,YAAY,GAAG,kBAAkB,CAAC,mBAAmB,CAAC,CAAA;QAC5D,IAAM,KAAK,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;QAC3C,IAAM,KAAK,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;QAC3C,IAAM,KAAK,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;QAE3C,4BAAY,YAAY,IAAE,KAAK,OAAA,EAAE,YAAY,cAAA,EAAE,GAAG,KAAA,EAAE,YAAY,cAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,IAAE;IACzF,CAAC;IAED,OAAO;QACL,iBAAiB,mBAAA;QACjB,iBAAiB,mBAAA;QACjB,iBAAiB,mBAAA;KAClB,CAAA;AAEH,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,SAA4B;IAG5B,IAAM,aAAa,GAA4C,EAAE,CAAA;IAE3D,IAAA,gDAIyC,EAH7C,wCAAiB,EACjB,wCAAiB,EACjB,wCAC6C,CAAA;IAE/C,IAAM,IAAI,GAAG,iBAAiB,EAAE,CAAA;IAChC,IAAM,IAAI,GAAG,iBAAiB,EAAE,CAAA;IAChC,IAAM,IAAI,GAAG,iBAAiB,EAAE,CAAA;IAEhC,wBAAwB,CAAC,0BAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAE7E,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,MAAA,EAAE,IAAI,MAAA,EAAE,IAAI,MAAA,EAAE,EAAE,aAAa,eAAA,EAAE,CAAA;AACxD,CAAC"} \ No newline at end of file diff --git a/build/es6/mtcnn/getSizesForScale.d.ts b/build/es6/mtcnn/getSizesForScale.d.ts deleted file mode 100644 index 4ab739a5..00000000 --- a/build/es6/mtcnn/getSizesForScale.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare function getSizesForScale(scale: number, [height, width]: number[]): { - height: number; - width: number; -}; diff --git a/build/es6/mtcnn/getSizesForScale.js b/build/es6/mtcnn/getSizesForScale.js deleted file mode 100644 index 9cad4651..00000000 --- a/build/es6/mtcnn/getSizesForScale.js +++ /dev/null @@ -1,8 +0,0 @@ -export function getSizesForScale(scale, _a) { - var height = _a[0], width = _a[1]; - return { - height: Math.floor(height * scale), - width: Math.floor(width * scale) - }; -} -//# sourceMappingURL=getSizesForScale.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/getSizesForScale.js.map b/build/es6/mtcnn/getSizesForScale.js.map deleted file mode 100644 index 7f75c5a4..00000000 --- a/build/es6/mtcnn/getSizesForScale.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"getSizesForScale.js","sourceRoot":"","sources":["../../../src/mtcnn/getSizesForScale.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,EAAyB;QAAxB,cAAM,EAAE,aAAK;IAC5D,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QAClC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;KACjC,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/build/es6/mtcnn/index.d.ts b/build/es6/mtcnn/index.d.ts deleted file mode 100644 index 8e8e10ee..00000000 --- a/build/es6/mtcnn/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Mtcnn } from './Mtcnn'; -export * from './Mtcnn'; -export * from './MtcnnOptions'; -export declare function createMtcnn(weights: Float32Array): Mtcnn; diff --git a/build/es6/mtcnn/index.js b/build/es6/mtcnn/index.js deleted file mode 100644 index 1443d9b9..00000000 --- a/build/es6/mtcnn/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import { Mtcnn } from './Mtcnn'; -export * from './Mtcnn'; -export * from './MtcnnOptions'; -export function createMtcnn(weights) { - var net = new Mtcnn(); - net.extractWeights(weights); - return net; -} -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/index.js.map b/build/es6/mtcnn/index.js.map deleted file mode 100644 index 2f511479..00000000 --- a/build/es6/mtcnn/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mtcnn/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAE/B,MAAM,UAAU,WAAW,CAAC,OAAqB;IAC/C,IAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAA;IACvB,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC"} \ No newline at end of file diff --git a/build/es6/mtcnn/normalize.d.ts b/build/es6/mtcnn/normalize.d.ts deleted file mode 100644 index 1a14045d..00000000 --- a/build/es6/mtcnn/normalize.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export declare function normalize(x: tf.Tensor4D): tf.Tensor4D; diff --git a/build/es6/mtcnn/normalize.js b/build/es6/mtcnn/normalize.js deleted file mode 100644 index 4df55c9e..00000000 --- a/build/es6/mtcnn/normalize.js +++ /dev/null @@ -1,5 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export function normalize(x) { - return tf.tidy(function () { return tf.mul(tf.sub(x, tf.scalar(127.5)), tf.scalar(0.0078125)); }); -} -//# sourceMappingURL=normalize.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/normalize.js.map b/build/es6/mtcnn/normalize.js.map deleted file mode 100644 index 1fb16e6a..00000000 --- a/build/es6/mtcnn/normalize.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../../src/mtcnn/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,MAAM,UAAU,SAAS,CAAC,CAAc;IACtC,OAAO,EAAE,CAAC,IAAI,CACZ,cAAM,OAAA,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAzD,CAAyD,CAChE,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/build/es6/mtcnn/prelu.d.ts b/build/es6/mtcnn/prelu.d.ts deleted file mode 100644 index 3019168f..00000000 --- a/build/es6/mtcnn/prelu.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export declare function prelu(x: T, alpha: tf.Tensor1D): T; diff --git a/build/es6/mtcnn/prelu.js b/build/es6/mtcnn/prelu.js deleted file mode 100644 index 8ef03aa3..00000000 --- a/build/es6/mtcnn/prelu.js +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export function prelu(x, alpha) { - return tf.tidy(function () { - return tf.add(tf.relu(x), tf.mul(alpha, tf.neg(tf.relu(tf.neg(x))))); - }); -} -//# sourceMappingURL=prelu.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/prelu.js.map b/build/es6/mtcnn/prelu.js.map deleted file mode 100644 index 80bd7b02..00000000 --- a/build/es6/mtcnn/prelu.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"prelu.js","sourceRoot":"","sources":["../../../src/mtcnn/prelu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,MAAM,UAAU,KAAK,CAAsB,CAAI,EAAE,KAAkB;IACjE,OAAO,EAAE,CAAC,IAAI,CAAC;QACb,OAAA,EAAE,CAAC,GAAG,CACJ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EACV,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1C;IAHD,CAGC,CACF,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/build/es6/mtcnn/pyramidDown.d.ts b/build/es6/mtcnn/pyramidDown.d.ts deleted file mode 100644 index 58073049..00000000 --- a/build/es6/mtcnn/pyramidDown.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function pyramidDown(minFaceSize: number, scaleFactor: number, dims: number[]): number[]; diff --git a/build/es6/mtcnn/pyramidDown.js b/build/es6/mtcnn/pyramidDown.js deleted file mode 100644 index 94eaac91..00000000 --- a/build/es6/mtcnn/pyramidDown.js +++ /dev/null @@ -1,15 +0,0 @@ -import { CELL_SIZE } from './config'; -export function pyramidDown(minFaceSize, scaleFactor, dims) { - var height = dims[0], width = dims[1]; - var m = CELL_SIZE / minFaceSize; - var scales = []; - var minLayer = Math.min(height, width) * m; - var exp = 0; - while (minLayer >= 12) { - scales.push(m * Math.pow(scaleFactor, exp)); - minLayer = minLayer * scaleFactor; - exp += 1; - } - return scales; -} -//# sourceMappingURL=pyramidDown.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/pyramidDown.js.map b/build/es6/mtcnn/pyramidDown.js.map deleted file mode 100644 index fd6df82c..00000000 --- a/build/es6/mtcnn/pyramidDown.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"pyramidDown.js","sourceRoot":"","sources":["../../../src/mtcnn/pyramidDown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,WAAmB,EAAE,IAAc;IAE3E,IAAA,gBAAM,EAAE,eAAK,CAAQ;IAC5B,IAAM,CAAC,GAAG,SAAS,GAAG,WAAW,CAAA;IAEjC,IAAM,MAAM,GAAG,EAAE,CAAA;IAEjB,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,OAAO,QAAQ,IAAI,EAAE,EAAE;QACrB,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAA;QAC3C,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAA;QACjC,GAAG,IAAI,CAAC,CAAA;KACT;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file diff --git a/build/es6/mtcnn/sharedLayers.d.ts b/build/es6/mtcnn/sharedLayers.d.ts deleted file mode 100644 index afc63db2..00000000 --- a/build/es6/mtcnn/sharedLayers.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { SharedParams } from './types'; -export declare function sharedLayer(x: tf.Tensor4D, params: SharedParams, isPnet?: boolean): tf.Tensor; diff --git a/build/es6/mtcnn/sharedLayers.js b/build/es6/mtcnn/sharedLayers.js deleted file mode 100644 index 25f686b9..00000000 --- a/build/es6/mtcnn/sharedLayers.js +++ /dev/null @@ -1,18 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { prelu } from './prelu'; -export function sharedLayer(x, params, isPnet) { - if (isPnet === void 0) { isPnet = false; } - return tf.tidy(function () { - var out = TfjsImageRecognitionBase.convLayer(x, params.conv1, 'valid'); - out = prelu(out, params.prelu1_alpha); - out = tf.maxPool(out, isPnet ? [2, 2] : [3, 3], [2, 2], 'same'); - out = TfjsImageRecognitionBase.convLayer(out, params.conv2, 'valid'); - out = prelu(out, params.prelu2_alpha); - out = isPnet ? out : tf.maxPool(out, [3, 3], [2, 2], 'valid'); - out = TfjsImageRecognitionBase.convLayer(out, params.conv3, 'valid'); - out = prelu(out, params.prelu3_alpha); - return out; - }); -} -//# sourceMappingURL=sharedLayers.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/sharedLayers.js.map b/build/es6/mtcnn/sharedLayers.js.map deleted file mode 100644 index e486bc0a..00000000 --- a/build/es6/mtcnn/sharedLayers.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"sharedLayers.js","sourceRoot":"","sources":["../../../src/mtcnn/sharedLayers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,MAAM,UAAU,WAAW,CAAC,CAAc,EAAE,MAAoB,EAAE,MAAuB;IAAvB,uBAAA,EAAA,cAAuB;IACvF,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,GAAG,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACtE,GAAG,GAAG,KAAK,CAAc,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAClD,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QAC9D,GAAG,GAAG,wBAAwB,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACpE,GAAG,GAAG,KAAK,CAAc,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAClD,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QAC7D,GAAG,GAAG,wBAAwB,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACpE,GAAG,GAAG,KAAK,CAAc,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAElD,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC"} \ No newline at end of file diff --git a/build/es6/mtcnn/stage1.d.ts b/build/es6/mtcnn/stage1.d.ts deleted file mode 100644 index f096cea1..00000000 --- a/build/es6/mtcnn/stage1.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { BoundingBox } from 'tfjs-image-recognition-base'; -import { PNetParams } from './types'; -export declare function stage1(imgTensor: tf.Tensor4D, scales: number[], scoreThreshold: number, params: PNetParams, stats: any): { - boxes: BoundingBox[]; - scores: number[]; -}; diff --git a/build/es6/mtcnn/stage1.js b/build/es6/mtcnn/stage1.js deleted file mode 100644 index 8fd1ae56..00000000 --- a/build/es6/mtcnn/stage1.js +++ /dev/null @@ -1,93 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { BoundingBox, nonMaxSuppression, Point } from 'tfjs-image-recognition-base'; -import { CELL_SIZE, CELL_STRIDE } from './config'; -import { getSizesForScale } from './getSizesForScale'; -import { MtcnnBox } from './MtcnnBox'; -import { normalize } from './normalize'; -import { PNet } from './PNet'; -function rescaleAndNormalize(x, scale) { - return tf.tidy(function () { - var _a = getSizesForScale(scale, x.shape.slice(1)), height = _a.height, width = _a.width; - var resized = tf.image.resizeBilinear(x, [height, width]); - var normalized = normalize(resized); - return tf.transpose(normalized, [0, 2, 1, 3]); - }); -} -function extractBoundingBoxes(scoresTensor, regionsTensor, scale, scoreThreshold) { - // TODO: fix this!, maybe better to use tf.gather here - var indices = []; - var scoresData = scoresTensor.arraySync(); - for (var y = 0; y < scoresTensor.shape[0]; y++) { - for (var x = 0; x < scoresTensor.shape[1]; x++) { - if (scoresData[y][x] >= scoreThreshold) { - indices.push(new Point(x, y)); - } - } - } - var boundingBoxes = indices.map(function (idx) { - var cell = new BoundingBox(Math.round((idx.y * CELL_STRIDE + 1) / scale), Math.round((idx.x * CELL_STRIDE + 1) / scale), Math.round((idx.y * CELL_STRIDE + CELL_SIZE) / scale), Math.round((idx.x * CELL_STRIDE + CELL_SIZE) / scale)); - var score = scoresData[idx.y][idx.x]; - var regionsData = regionsTensor.arraySync(); - var region = new MtcnnBox(regionsData[idx.y][idx.x][0], regionsData[idx.y][idx.x][1], regionsData[idx.y][idx.x][2], regionsData[idx.y][idx.x][3]); - return { - cell: cell, - score: score, - region: region - }; - }); - return boundingBoxes; -} -export function stage1(imgTensor, scales, scoreThreshold, params, stats) { - stats.stage1 = []; - var pnetOutputs = scales.map(function (scale) { return tf.tidy(function () { - var statsForScale = { scale: scale }; - var resized = rescaleAndNormalize(imgTensor, scale); - var ts = Date.now(); - var _a = PNet(resized, params), prob = _a.prob, regions = _a.regions; - statsForScale.pnet = Date.now() - ts; - var scoresTensor = tf.unstack(tf.unstack(prob, 3)[1])[0]; - var regionsTensor = tf.unstack(regions)[0]; - return { - scoresTensor: scoresTensor, - regionsTensor: regionsTensor, - scale: scale, - statsForScale: statsForScale - }; - }); }); - var boxesForScale = pnetOutputs.map(function (_a) { - var scoresTensor = _a.scoresTensor, regionsTensor = _a.regionsTensor, scale = _a.scale, statsForScale = _a.statsForScale; - var boundingBoxes = extractBoundingBoxes(scoresTensor, regionsTensor, scale, scoreThreshold); - scoresTensor.dispose(); - regionsTensor.dispose(); - if (!boundingBoxes.length) { - stats.stage1.push(statsForScale); - return []; - } - var ts = Date.now(); - var indices = nonMaxSuppression(boundingBoxes.map(function (bbox) { return bbox.cell; }), boundingBoxes.map(function (bbox) { return bbox.score; }), 0.5); - statsForScale.nms = Date.now() - ts; - statsForScale.numBoxes = indices.length; - stats.stage1.push(statsForScale); - return indices.map(function (boxIdx) { return boundingBoxes[boxIdx]; }); - }); - var allBoxes = boxesForScale.reduce(function (all, boxes) { return all.concat(boxes); }, []); - var finalBoxes = []; - var finalScores = []; - if (allBoxes.length > 0) { - var ts = Date.now(); - var indices = nonMaxSuppression(allBoxes.map(function (bbox) { return bbox.cell; }), allBoxes.map(function (bbox) { return bbox.score; }), 0.7); - stats.stage1_nms = Date.now() - ts; - finalScores = indices.map(function (idx) { return allBoxes[idx].score; }); - finalBoxes = indices - .map(function (idx) { return allBoxes[idx]; }) - .map(function (_a) { - var cell = _a.cell, region = _a.region; - return new BoundingBox(cell.left + (region.left * cell.width), cell.top + (region.top * cell.height), cell.right + (region.right * cell.width), cell.bottom + (region.bottom * cell.height)).toSquare().round(); - }); - } - return { - boxes: finalBoxes, - scores: finalScores - }; -} -//# sourceMappingURL=stage1.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/stage1.js.map b/build/es6/mtcnn/stage1.js.map deleted file mode 100644 index 263983ed..00000000 --- a/build/es6/mtcnn/stage1.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"stage1.js","sourceRoot":"","sources":["../../../src/mtcnn/stage1.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/mtcnn/stage2.d.ts b/build/es6/mtcnn/stage2.d.ts deleted file mode 100644 index de3a4c61..00000000 --- a/build/es6/mtcnn/stage2.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Box } from 'tfjs-image-recognition-base'; -import { RNetParams } from './types'; -export declare function stage2(img: HTMLCanvasElement, inputBoxes: Box[], scoreThreshold: number, params: RNetParams, stats: any): Promise<{ - boxes: Box[]; - scores: number[]; -}>; diff --git a/build/es6/mtcnn/stage2.js b/build/es6/mtcnn/stage2.js deleted file mode 100644 index f4ede61d..00000000 --- a/build/es6/mtcnn/stage2.js +++ /dev/null @@ -1,67 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { nonMaxSuppression } from 'tfjs-image-recognition-base'; -import { extractImagePatches } from './extractImagePatches'; -import { MtcnnBox } from './MtcnnBox'; -import { RNet } from './RNet'; -export function stage2(img, inputBoxes, scoreThreshold, params, stats) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var ts, rnetInputs, rnetOuts, scoresTensor, scores, _a, _b, indices, filteredBoxes, filteredScores, finalBoxes, finalScores, indicesNms, regions_1; - return tslib_1.__generator(this, function (_c) { - switch (_c.label) { - case 0: - ts = Date.now(); - return [4 /*yield*/, extractImagePatches(img, inputBoxes, { width: 24, height: 24 })]; - case 1: - rnetInputs = _c.sent(); - stats.stage2_extractImagePatches = Date.now() - ts; - ts = Date.now(); - rnetOuts = rnetInputs.map(function (rnetInput) { - var out = RNet(rnetInput, params); - rnetInput.dispose(); - return out; - }); - stats.stage2_rnet = Date.now() - ts; - scoresTensor = rnetOuts.length > 1 - ? tf.concat(rnetOuts.map(function (out) { return out.scores; })) - : rnetOuts[0].scores; - _b = (_a = Array).from; - return [4 /*yield*/, scoresTensor.data()]; - case 2: - scores = _b.apply(_a, [_c.sent()]); - scoresTensor.dispose(); - indices = scores - .map(function (score, idx) { return ({ score: score, idx: idx }); }) - .filter(function (c) { return c.score > scoreThreshold; }) - .map(function (_a) { - var idx = _a.idx; - return idx; - }); - filteredBoxes = indices.map(function (idx) { return inputBoxes[idx]; }); - filteredScores = indices.map(function (idx) { return scores[idx]; }); - finalBoxes = []; - finalScores = []; - if (filteredBoxes.length > 0) { - ts = Date.now(); - indicesNms = nonMaxSuppression(filteredBoxes, filteredScores, 0.7); - stats.stage2_nms = Date.now() - ts; - regions_1 = indicesNms.map(function (idx) { - var regionsData = rnetOuts[indices[idx]].regions.arraySync(); - return new MtcnnBox(regionsData[0][0], regionsData[0][1], regionsData[0][2], regionsData[0][3]); - }); - finalScores = indicesNms.map(function (idx) { return filteredScores[idx]; }); - finalBoxes = indicesNms.map(function (idx, i) { return filteredBoxes[idx].calibrate(regions_1[i]); }); - } - rnetOuts.forEach(function (t) { - t.regions.dispose(); - t.scores.dispose(); - }); - return [2 /*return*/, { - boxes: finalBoxes, - scores: finalScores - }]; - } - }); - }); -} -//# sourceMappingURL=stage2.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/stage2.js.map b/build/es6/mtcnn/stage2.js.map deleted file mode 100644 index 193a01ed..00000000 --- a/build/es6/mtcnn/stage2.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"stage2.js","sourceRoot":"","sources":["../../../src/mtcnn/stage2.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/mtcnn/stage3.d.ts b/build/es6/mtcnn/stage3.d.ts deleted file mode 100644 index 607d3047..00000000 --- a/build/es6/mtcnn/stage3.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { BoundingBox, Box, Point } from 'tfjs-image-recognition-base'; -import { ONetParams } from './types'; -export declare function stage3(img: HTMLCanvasElement, inputBoxes: BoundingBox[], scoreThreshold: number, params: ONetParams, stats: any): Promise<{ - boxes: Box[]; - scores: number[]; - points: Point[][]; -}>; diff --git a/build/es6/mtcnn/stage3.js b/build/es6/mtcnn/stage3.js deleted file mode 100644 index a4b2abd4..00000000 --- a/build/es6/mtcnn/stage3.js +++ /dev/null @@ -1,77 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { nonMaxSuppression, Point } from 'tfjs-image-recognition-base'; -import { extractImagePatches } from './extractImagePatches'; -import { MtcnnBox } from './MtcnnBox'; -import { ONet } from './ONet'; -export function stage3(img, inputBoxes, scoreThreshold, params, stats) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var ts, onetInputs, onetOuts, scoresTensor, scores, _a, _b, indices, filteredRegions, filteredBoxes, filteredScores, finalBoxes, finalScores, points, indicesNms; - return tslib_1.__generator(this, function (_c) { - switch (_c.label) { - case 0: - ts = Date.now(); - return [4 /*yield*/, extractImagePatches(img, inputBoxes, { width: 48, height: 48 })]; - case 1: - onetInputs = _c.sent(); - stats.stage3_extractImagePatches = Date.now() - ts; - ts = Date.now(); - onetOuts = onetInputs.map(function (onetInput) { - var out = ONet(onetInput, params); - onetInput.dispose(); - return out; - }); - stats.stage3_onet = Date.now() - ts; - scoresTensor = onetOuts.length > 1 - ? tf.concat(onetOuts.map(function (out) { return out.scores; })) - : onetOuts[0].scores; - _b = (_a = Array).from; - return [4 /*yield*/, scoresTensor.data()]; - case 2: - scores = _b.apply(_a, [_c.sent()]); - scoresTensor.dispose(); - indices = scores - .map(function (score, idx) { return ({ score: score, idx: idx }); }) - .filter(function (c) { return c.score > scoreThreshold; }) - .map(function (_a) { - var idx = _a.idx; - return idx; - }); - filteredRegions = indices.map(function (idx) { - var regionsData = onetOuts[idx].regions.arraySync(); - return new MtcnnBox(regionsData[0][0], regionsData[0][1], regionsData[0][2], regionsData[0][3]); - }); - filteredBoxes = indices - .map(function (idx, i) { return inputBoxes[idx].calibrate(filteredRegions[i]); }); - filteredScores = indices.map(function (idx) { return scores[idx]; }); - finalBoxes = []; - finalScores = []; - points = []; - if (filteredBoxes.length > 0) { - ts = Date.now(); - indicesNms = nonMaxSuppression(filteredBoxes, filteredScores, 0.7, false); - stats.stage3_nms = Date.now() - ts; - finalBoxes = indicesNms.map(function (idx) { return filteredBoxes[idx]; }); - finalScores = indicesNms.map(function (idx) { return filteredScores[idx]; }); - points = indicesNms.map(function (idx, i) { - return Array(5).fill(0).map(function (_, ptIdx) { - var pointsData = onetOuts[idx].points.arraySync(); - return new Point(((pointsData[0][ptIdx] * (finalBoxes[i].width + 1)) + finalBoxes[i].left), ((pointsData[0][ptIdx + 5] * (finalBoxes[i].height + 1)) + finalBoxes[i].top)); - }); - }); - } - onetOuts.forEach(function (t) { - t.regions.dispose(); - t.scores.dispose(); - t.points.dispose(); - }); - return [2 /*return*/, { - boxes: finalBoxes, - scores: finalScores, - points: points - }]; - } - }); - }); -} -//# sourceMappingURL=stage3.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/stage3.js.map b/build/es6/mtcnn/stage3.js.map deleted file mode 100644 index 7e10141b..00000000 --- a/build/es6/mtcnn/stage3.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"stage3.js","sourceRoot":"","sources":["../../../src/mtcnn/stage3.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/mtcnn/types.d.ts b/build/es6/mtcnn/types.d.ts deleted file mode 100644 index b7f89f6a..00000000 --- a/build/es6/mtcnn/types.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { FaceLandmarks5 } from '../classes/FaceLandmarks5'; -import { WithFaceDetection, WithFaceLandmarks } from '../factories'; -export declare type SharedParams = { - conv1: TfjsImageRecognitionBase.ConvParams; - prelu1_alpha: tf.Tensor1D; - conv2: TfjsImageRecognitionBase.ConvParams; - prelu2_alpha: tf.Tensor1D; - conv3: TfjsImageRecognitionBase.ConvParams; - prelu3_alpha: tf.Tensor1D; -}; -export declare type PNetParams = SharedParams & { - conv4_1: TfjsImageRecognitionBase.ConvParams; - conv4_2: TfjsImageRecognitionBase.ConvParams; -}; -export declare type RNetParams = SharedParams & { - fc1: TfjsImageRecognitionBase.FCParams; - prelu4_alpha: tf.Tensor1D; - fc2_1: TfjsImageRecognitionBase.FCParams; - fc2_2: TfjsImageRecognitionBase.FCParams; -}; -export declare type ONetParams = SharedParams & { - conv4: TfjsImageRecognitionBase.ConvParams; - prelu4_alpha: tf.Tensor1D; - fc1: TfjsImageRecognitionBase.FCParams; - prelu5_alpha: tf.Tensor1D; - fc2_1: TfjsImageRecognitionBase.FCParams; - fc2_2: TfjsImageRecognitionBase.FCParams; - fc2_3: TfjsImageRecognitionBase.FCParams; -}; -export declare type NetParams = { - pnet: PNetParams; - rnet: RNetParams; - onet: ONetParams; -}; -export declare type MtcnnResult = WithFaceLandmarks, FaceLandmarks5>; diff --git a/build/es6/mtcnn/types.js b/build/es6/mtcnn/types.js deleted file mode 100644 index 5b2306a4..00000000 --- a/build/es6/mtcnn/types.js +++ /dev/null @@ -1 +0,0 @@ -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/types.js.map b/build/es6/mtcnn/types.js.map deleted file mode 100644 index a06d2049..00000000 --- a/build/es6/mtcnn/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/mtcnn/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/build/es6/resizeResults.d.ts b/build/es6/resizeResults.d.ts deleted file mode 100644 index e4fdddf3..00000000 --- a/build/es6/resizeResults.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { IDimensions } from 'tfjs-image-recognition-base'; -export declare function resizeResults(results: T, { width, height }: IDimensions): T; diff --git a/build/es6/resizeResults.js b/build/es6/resizeResults.js deleted file mode 100644 index eabfac14..00000000 --- a/build/es6/resizeResults.js +++ /dev/null @@ -1,25 +0,0 @@ -import { FaceDetection } from './classes/FaceDetection'; -import { FaceLandmarks } from './classes/FaceLandmarks'; -import { extendWithFaceDetection } from './factories/WithFaceDetection'; -import { extendWithFaceLandmarks } from './factories/WithFaceLandmarks'; -export function resizeResults(results, _a) { - var width = _a.width, height = _a.height; - if (Array.isArray(results)) { - return results.map(function (obj) { return resizeResults(obj, { width: width, height: height }); }); - } - var hasLandmarks = results['unshiftedLandmarks'] && results['unshiftedLandmarks'] instanceof FaceLandmarks; - var hasDetection = results['detection'] && results['detection'] instanceof FaceDetection; - if (hasLandmarks) { - var resizedDetection = results['detection'].forSize(width, height); - var resizedLandmarks = results['unshiftedLandmarks'].forSize(resizedDetection.box.width, resizedDetection.box.height); - return extendWithFaceLandmarks(extendWithFaceDetection(results, resizedDetection), resizedLandmarks); - } - if (hasDetection) { - return extendWithFaceDetection(results, results['detection'].forSize(width, height)); - } - if (results instanceof FaceLandmarks || results instanceof FaceDetection) { - return results.forSize(width, height); - } - return results; -} -//# sourceMappingURL=resizeResults.js.map \ No newline at end of file diff --git a/build/es6/resizeResults.js.map b/build/es6/resizeResults.js.map deleted file mode 100644 index ceb4cd5d..00000000 --- a/build/es6/resizeResults.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"resizeResults.js","sourceRoot":"","sources":["../../src/resizeResults.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,MAAM,UAAU,aAAa,CAAI,OAAU,EAAE,EAA8B;QAA5B,gBAAK,EAAE,kBAAM;IAE1D,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,aAAa,CAAC,GAAG,EAAE,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAC,EAArC,CAAqC,CAAa,CAAA;KAC7E;IAED,IAAM,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,oBAAoB,CAAC,YAAY,aAAa,CAAA;IAC5G,IAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,YAAY,aAAa,CAAA;IAE1F,IAAI,YAAY,EAAE;QAChB,IAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACpE,IAAM,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEvH,OAAO,uBAAuB,CAAC,uBAAuB,CAAC,OAAc,EAAE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,CAAA;KAC5G;IAED,IAAI,YAAY,EAAE;QAChB,OAAO,uBAAuB,CAAC,OAAc,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;KAC5F;IAED,IAAI,OAAO,YAAY,aAAa,IAAI,OAAO,YAAY,aAAa,EAAE;QACxE,OAAQ,OAAe,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;KAC/C;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"} \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/SsdMobilenetv1.d.ts b/build/es6/ssdMobilenetv1/SsdMobilenetv1.d.ts deleted file mode 100644 index 5551a4e9..00000000 --- a/build/es6/ssdMobilenetv1/SsdMobilenetv1.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -import { ISsdMobilenetv1Options } from './SsdMobilenetv1Options'; -import { NetParams } from './types'; -export declare class SsdMobilenetv1 extends NeuralNetwork { - constructor(); - forwardInput(input: NetInput): { - boxes: tf.Tensor[]; - scores: tf.Tensor[]; - }; - forward(input: TNetInput): Promise<{ - boxes: tf.Tensor[]; - scores: tf.Tensor[]; - }>; - locateFaces(input: TNetInput, options?: ISsdMobilenetv1Options): Promise; - protected getDefaultModelName(): string; - protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; - protected extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[]; - }; -} diff --git a/build/es6/ssdMobilenetv1/SsdMobilenetv1.js b/build/es6/ssdMobilenetv1/SsdMobilenetv1.js deleted file mode 100644 index 0999f8fb..00000000 --- a/build/es6/ssdMobilenetv1/SsdMobilenetv1.js +++ /dev/null @@ -1,106 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { NeuralNetwork, Rect, toNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -import { extractParams } from './extractParams'; -import { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap'; -import { mobileNetV1 } from './mobileNetV1'; -import { nonMaxSuppression } from './nonMaxSuppression'; -import { outputLayer } from './outputLayer'; -import { predictionLayer } from './predictionLayer'; -import { SsdMobilenetv1Options } from './SsdMobilenetv1Options'; -var SsdMobilenetv1 = /** @class */ (function (_super) { - tslib_1.__extends(SsdMobilenetv1, _super); - function SsdMobilenetv1() { - return _super.call(this, 'SsdMobilenetv1') || this; - } - SsdMobilenetv1.prototype.forwardInput = function (input) { - var params = this.params; - if (!params) { - throw new Error('SsdMobilenetv1 - load model before inference'); - } - return tf.tidy(function () { - var batchTensor = input.toBatchTensor(512, false).toFloat(); - var x = tf.sub(tf.mul(batchTensor, tf.scalar(0.007843137718737125)), tf.scalar(1)); - var features = mobileNetV1(x, params.mobilenetv1); - var _a = predictionLayer(features.out, features.conv11, params.prediction_layer), boxPredictions = _a.boxPredictions, classPredictions = _a.classPredictions; - return outputLayer(boxPredictions, classPredictions, params.output_layer); - }); - }; - SsdMobilenetv1.prototype.forward = function (input) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - SsdMobilenetv1.prototype.locateFaces = function (input, options) { - if (options === void 0) { options = {}; } - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a, maxResults, minConfidence, netInput, _b, _boxes, _scores, boxes, scores, i, scoresData, _c, _d, iouThreshold, indices, reshapedDims, inputSize, padX, padY, boxesData, results; - return tslib_1.__generator(this, function (_e) { - switch (_e.label) { - case 0: - _a = new SsdMobilenetv1Options(options), maxResults = _a.maxResults, minConfidence = _a.minConfidence; - return [4 /*yield*/, toNetInput(input)]; - case 1: - netInput = _e.sent(); - _b = this.forwardInput(netInput), _boxes = _b.boxes, _scores = _b.scores; - boxes = _boxes[0]; - scores = _scores[0]; - for (i = 1; i < _boxes.length; i++) { - _boxes[i].dispose(); - _scores[i].dispose(); - } - _d = (_c = Array).from; - return [4 /*yield*/, scores.data()]; - case 2: - scoresData = _d.apply(_c, [_e.sent()]); - iouThreshold = 0.5; - indices = nonMaxSuppression(boxes, scoresData, maxResults, iouThreshold, minConfidence); - reshapedDims = netInput.getReshapedInputDimensions(0); - inputSize = netInput.inputSize; - padX = inputSize / reshapedDims.width; - padY = inputSize / reshapedDims.height; - boxesData = boxes.arraySync(); - results = indices - .map(function (idx) { - var _a = [ - Math.max(0, boxesData[idx][0]), - Math.min(1.0, boxesData[idx][2]) - ].map(function (val) { return val * padY; }), top = _a[0], bottom = _a[1]; - var _b = [ - Math.max(0, boxesData[idx][1]), - Math.min(1.0, boxesData[idx][3]) - ].map(function (val) { return val * padX; }), left = _b[0], right = _b[1]; - return new FaceDetection(scoresData[idx], new Rect(left, top, right - left, bottom - top), { - height: netInput.getInputHeight(0), - width: netInput.getInputWidth(0) - }); - }); - boxes.dispose(); - scores.dispose(); - return [2 /*return*/, results]; - } - }); - }); - }; - SsdMobilenetv1.prototype.getDefaultModelName = function () { - return 'ssd_mobilenetv1_model'; - }; - SsdMobilenetv1.prototype.extractParamsFromWeigthMap = function (weightMap) { - return extractParamsFromWeigthMap(weightMap); - }; - SsdMobilenetv1.prototype.extractParams = function (weights) { - return extractParams(weights); - }; - return SsdMobilenetv1; -}(NeuralNetwork)); -export { SsdMobilenetv1 }; -//# sourceMappingURL=SsdMobilenetv1.js.map \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/SsdMobilenetv1.js.map b/build/es6/ssdMobilenetv1/SsdMobilenetv1.js.map deleted file mode 100644 index 99784b73..00000000 --- a/build/es6/ssdMobilenetv1/SsdMobilenetv1.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"SsdMobilenetv1.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/SsdMobilenetv1.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/SsdMobilenetv1Options.d.ts b/build/es6/ssdMobilenetv1/SsdMobilenetv1Options.d.ts deleted file mode 100644 index bf75021c..00000000 --- a/build/es6/ssdMobilenetv1/SsdMobilenetv1Options.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export interface ISsdMobilenetv1Options { - minConfidence?: number; - maxResults?: number; -} -export declare class SsdMobilenetv1Options { - protected _name: string; - private _minConfidence; - private _maxResults; - constructor({ minConfidence, maxResults }?: ISsdMobilenetv1Options); - readonly minConfidence: number; - readonly maxResults: number; -} diff --git a/build/es6/ssdMobilenetv1/SsdMobilenetv1Options.js b/build/es6/ssdMobilenetv1/SsdMobilenetv1Options.js deleted file mode 100644 index 411cdc43..00000000 --- a/build/es6/ssdMobilenetv1/SsdMobilenetv1Options.js +++ /dev/null @@ -1,27 +0,0 @@ -var SsdMobilenetv1Options = /** @class */ (function () { - function SsdMobilenetv1Options(_a) { - var _b = _a === void 0 ? {} : _a, minConfidence = _b.minConfidence, maxResults = _b.maxResults; - this._name = 'SsdMobilenetv1Options'; - this._minConfidence = minConfidence || 0.5; - this._maxResults = maxResults || 100; - if (typeof this._minConfidence !== 'number' || this._minConfidence <= 0 || this._minConfidence >= 1) { - throw new Error(this._name + " - expected minConfidence to be a number between 0 and 1"); - } - if (typeof this._maxResults !== 'number') { - throw new Error(this._name + " - expected maxResults to be a number"); - } - } - Object.defineProperty(SsdMobilenetv1Options.prototype, "minConfidence", { - get: function () { return this._minConfidence; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SsdMobilenetv1Options.prototype, "maxResults", { - get: function () { return this._maxResults; }, - enumerable: true, - configurable: true - }); - return SsdMobilenetv1Options; -}()); -export { SsdMobilenetv1Options }; -//# sourceMappingURL=SsdMobilenetv1Options.js.map \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/SsdMobilenetv1Options.js.map b/build/es6/ssdMobilenetv1/SsdMobilenetv1Options.js.map deleted file mode 100644 index 2bc8a56c..00000000 --- a/build/es6/ssdMobilenetv1/SsdMobilenetv1Options.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"SsdMobilenetv1Options.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/SsdMobilenetv1Options.ts"],"names":[],"mappings":"AAKA;IAME,+BAAY,EAA0D;YAA1D,4BAA0D,EAAxD,gCAAa,EAAE,0BAAU;QAL7B,UAAK,GAAW,uBAAuB,CAAA;QAM/C,IAAI,CAAC,cAAc,GAAG,aAAa,IAAI,GAAG,CAAA;QAC1C,IAAI,CAAC,WAAW,GAAG,UAAU,IAAI,GAAG,CAAA;QAEpC,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,EAAE;YACnG,MAAM,IAAI,KAAK,CAAI,IAAI,CAAC,KAAK,6DAA0D,CAAC,CAAA;SACzF;QAED,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE;YACxC,MAAM,IAAI,KAAK,CAAI,IAAI,CAAC,KAAK,0CAAuC,CAAC,CAAA;SACtE;IACH,CAAC;IAED,sBAAI,gDAAa;aAAjB,cAA8B,OAAO,IAAI,CAAC,cAAc,CAAA,CAAC,CAAC;;;OAAA;IAC1D,sBAAI,6CAAU;aAAd,cAA2B,OAAO,IAAI,CAAC,WAAW,CAAA,CAAC,CAAC;;;OAAA;IACtD,4BAAC;AAAD,CAAC,AArBD,IAqBC"} \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/boxPredictionLayer.d.ts b/build/es6/ssdMobilenetv1/boxPredictionLayer.d.ts deleted file mode 100644 index bed8cd15..00000000 --- a/build/es6/ssdMobilenetv1/boxPredictionLayer.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { BoxPredictionParams } from './types'; -export declare function boxPredictionLayer(x: tf.Tensor4D, params: BoxPredictionParams): { - boxPredictionEncoding: tf.Tensor; - classPrediction: tf.Tensor; -}; diff --git a/build/es6/ssdMobilenetv1/boxPredictionLayer.js b/build/es6/ssdMobilenetv1/boxPredictionLayer.js deleted file mode 100644 index 30844d88..00000000 --- a/build/es6/ssdMobilenetv1/boxPredictionLayer.js +++ /dev/null @@ -1,14 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export function boxPredictionLayer(x, params) { - return tf.tidy(function () { - var batchSize = x.shape[0]; - var boxPredictionEncoding = tf.reshape(TfjsImageRecognitionBase.convLayer(x, params.box_encoding_predictor), [batchSize, -1, 1, 4]); - var classPrediction = tf.reshape(TfjsImageRecognitionBase.convLayer(x, params.class_predictor), [batchSize, -1, 3]); - return { - boxPredictionEncoding: boxPredictionEncoding, - classPrediction: classPrediction - }; - }); -} -//# sourceMappingURL=boxPredictionLayer.js.map \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/boxPredictionLayer.js.map b/build/es6/ssdMobilenetv1/boxPredictionLayer.js.map deleted file mode 100644 index 264009f1..00000000 --- a/build/es6/ssdMobilenetv1/boxPredictionLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"boxPredictionLayer.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/boxPredictionLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAKvE,MAAM,UAAU,kBAAkB,CAChC,CAAc,EACd,MAA2B;IAE3B,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAE5B,IAAM,qBAAqB,GAAG,EAAE,CAAC,OAAO,CACtC,wBAAwB,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,sBAAsB,CAAC,EACpE,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACtB,CAAA;QACD,IAAM,eAAe,GAAG,EAAE,CAAC,OAAO,CAChC,wBAAwB,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,EAC7D,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CACnB,CAAA;QAED,OAAO;YACL,qBAAqB,uBAAA;YACrB,eAAe,iBAAA;SAChB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"} \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/extractParams.d.ts b/build/es6/ssdMobilenetv1/extractParams.d.ts deleted file mode 100644 index 14d45d2b..00000000 --- a/build/es6/ssdMobilenetv1/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/es6/ssdMobilenetv1/extractParams.js b/build/es6/ssdMobilenetv1/extractParams.js deleted file mode 100644 index ec767ff1..00000000 --- a/build/es6/ssdMobilenetv1/extractParams.js +++ /dev/null @@ -1,159 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -function extractorsFactory(extractWeights, paramMappings) { - function extractDepthwiseConvParams(numChannels, mappedPrefix) { - var filters = tf.tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]); - var batch_norm_scale = tf.tensor1d(extractWeights(numChannels)); - var batch_norm_offset = tf.tensor1d(extractWeights(numChannels)); - var batch_norm_mean = tf.tensor1d(extractWeights(numChannels)); - var batch_norm_variance = tf.tensor1d(extractWeights(numChannels)); - paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/batch_norm_scale" }, { paramPath: mappedPrefix + "/batch_norm_offset" }, { paramPath: mappedPrefix + "/batch_norm_mean" }, { paramPath: mappedPrefix + "/batch_norm_variance" }); - return { - filters: filters, - batch_norm_scale: batch_norm_scale, - batch_norm_offset: batch_norm_offset, - batch_norm_mean: batch_norm_mean, - batch_norm_variance: batch_norm_variance - }; - } - function extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, isPointwiseConv) { - var filters = tf.tensor4d(extractWeights(channelsIn * channelsOut * filterSize * filterSize), [filterSize, filterSize, channelsIn, channelsOut]); - var bias = tf.tensor1d(extractWeights(channelsOut)); - paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/" + (isPointwiseConv ? 'batch_norm_offset' : 'bias') }); - return { filters: filters, bias: bias }; - } - function extractPointwiseConvParams(channelsIn, channelsOut, filterSize, mappedPrefix) { - var _a = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true), filters = _a.filters, bias = _a.bias; - return { - filters: filters, - batch_norm_offset: bias - }; - } - function extractConvPairParams(channelsIn, channelsOut, mappedPrefix) { - var depthwise_conv = extractDepthwiseConvParams(channelsIn, mappedPrefix + "/depthwise_conv"); - var pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, mappedPrefix + "/pointwise_conv"); - return { depthwise_conv: depthwise_conv, pointwise_conv: pointwise_conv }; - } - function extractMobilenetV1Params() { - var conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0'); - var conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1'); - var conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2'); - var conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3'); - var conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4'); - var conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5'); - var conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6'); - var conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7'); - var conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8'); - var conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9'); - var conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10'); - var conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11'); - var conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12'); - var conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13'); - return { - conv_0: conv_0, - conv_1: conv_1, - conv_2: conv_2, - conv_3: conv_3, - conv_4: conv_4, - conv_5: conv_5, - conv_6: conv_6, - conv_7: conv_7, - conv_8: conv_8, - conv_9: conv_9, - conv_10: conv_10, - conv_11: conv_11, - conv_12: conv_12, - conv_13: conv_13 - }; - } - function extractPredictionLayerParams() { - var conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0'); - var conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1'); - var conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2'); - var conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3'); - var conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4'); - var conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5'); - var conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6'); - var conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7'); - var box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor'); - var class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor'); - var box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor'); - var class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor'); - var box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor'); - var class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor'); - var box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor'); - var class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor'); - var box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor'); - var class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor'); - var box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor'); - var class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor'); - var box_predictor_0 = { - box_encoding_predictor: box_encoding_0_predictor, - class_predictor: class_predictor_0 - }; - var box_predictor_1 = { - box_encoding_predictor: box_encoding_1_predictor, - class_predictor: class_predictor_1 - }; - var box_predictor_2 = { - box_encoding_predictor: box_encoding_2_predictor, - class_predictor: class_predictor_2 - }; - var box_predictor_3 = { - box_encoding_predictor: box_encoding_3_predictor, - class_predictor: class_predictor_3 - }; - var box_predictor_4 = { - box_encoding_predictor: box_encoding_4_predictor, - class_predictor: class_predictor_4 - }; - var box_predictor_5 = { - box_encoding_predictor: box_encoding_5_predictor, - class_predictor: class_predictor_5 - }; - return { - conv_0: conv_0, - conv_1: conv_1, - conv_2: conv_2, - conv_3: conv_3, - conv_4: conv_4, - conv_5: conv_5, - conv_6: conv_6, - conv_7: conv_7, - box_predictor_0: box_predictor_0, - box_predictor_1: box_predictor_1, - box_predictor_2: box_predictor_2, - box_predictor_3: box_predictor_3, - box_predictor_4: box_predictor_4, - box_predictor_5: box_predictor_5 - }; - } - return { - extractMobilenetV1Params: extractMobilenetV1Params, - extractPredictionLayerParams: extractPredictionLayerParams - }; -} -export function extractParams(weights) { - var paramMappings = []; - var _a = TfjsImageRecognitionBase.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var _b = extractorsFactory(extractWeights, paramMappings), extractMobilenetV1Params = _b.extractMobilenetV1Params, extractPredictionLayerParams = _b.extractPredictionLayerParams; - var mobilenetv1 = extractMobilenetV1Params(); - var prediction_layer = extractPredictionLayerParams(); - var extra_dim = tf.tensor3d(extractWeights(5118 * 4), [1, 5118, 4]); - var output_layer = { - extra_dim: extra_dim - }; - paramMappings.push({ paramPath: 'output_layer/extra_dim' }); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { - params: { - mobilenetv1: mobilenetv1, - prediction_layer: prediction_layer, - output_layer: output_layer - }, - paramMappings: paramMappings - }; -} -//# sourceMappingURL=extractParams.js.map \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/extractParams.js.map b/build/es6/ssdMobilenetv1/extractParams.js.map deleted file mode 100644 index 108d3168..00000000 --- a/build/es6/ssdMobilenetv1/extractParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/extractParams.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/extractParamsFromWeigthMap.d.ts b/build/es6/ssdMobilenetv1/extractParamsFromWeigthMap.d.ts deleted file mode 100644 index 7bf5a66d..00000000 --- a/build/es6/ssdMobilenetv1/extractParamsFromWeigthMap.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; -}; diff --git a/build/es6/ssdMobilenetv1/extractParamsFromWeigthMap.js b/build/es6/ssdMobilenetv1/extractParamsFromWeigthMap.js deleted file mode 100644 index 37ed358a..00000000 --- a/build/es6/ssdMobilenetv1/extractParamsFromWeigthMap.js +++ /dev/null @@ -1,99 +0,0 @@ -import { isTensor3D, TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -function extractorsFactory(weightMap, paramMappings) { - var extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings); - function extractPointwiseConvParams(prefix, idx, mappedPrefix) { - var filters = extractWeightEntry(prefix + "/Conv2d_" + idx + "_pointwise/weights", 4, mappedPrefix + "/filters"); - var batch_norm_offset = extractWeightEntry(prefix + "/Conv2d_" + idx + "_pointwise/convolution_bn_offset", 1, mappedPrefix + "/batch_norm_offset"); - return { filters: filters, batch_norm_offset: batch_norm_offset }; - } - function extractConvPairParams(idx) { - var mappedPrefix = "mobilenetv1/conv_" + idx; - var prefixDepthwiseConv = "MobilenetV1/Conv2d_" + idx + "_depthwise"; - var mappedPrefixDepthwiseConv = mappedPrefix + "/depthwise_conv"; - var mappedPrefixPointwiseConv = mappedPrefix + "/pointwise_conv"; - var filters = extractWeightEntry(prefixDepthwiseConv + "/depthwise_weights", 4, mappedPrefixDepthwiseConv + "/filters"); - var batch_norm_scale = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/gamma", 1, mappedPrefixDepthwiseConv + "/batch_norm_scale"); - var batch_norm_offset = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/beta", 1, mappedPrefixDepthwiseConv + "/batch_norm_offset"); - var batch_norm_mean = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/moving_mean", 1, mappedPrefixDepthwiseConv + "/batch_norm_mean"); - var batch_norm_variance = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/moving_variance", 1, mappedPrefixDepthwiseConv + "/batch_norm_variance"); - return { - depthwise_conv: { - filters: filters, - batch_norm_scale: batch_norm_scale, - batch_norm_offset: batch_norm_offset, - batch_norm_mean: batch_norm_mean, - batch_norm_variance: batch_norm_variance - }, - pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv) - }; - } - function extractMobilenetV1Params() { - return { - conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'), - conv_1: extractConvPairParams(1), - conv_2: extractConvPairParams(2), - conv_3: extractConvPairParams(3), - conv_4: extractConvPairParams(4), - conv_5: extractConvPairParams(5), - conv_6: extractConvPairParams(6), - conv_7: extractConvPairParams(7), - conv_8: extractConvPairParams(8), - conv_9: extractConvPairParams(9), - conv_10: extractConvPairParams(10), - conv_11: extractConvPairParams(11), - conv_12: extractConvPairParams(12), - conv_13: extractConvPairParams(13) - }; - } - function extractConvParams(prefix, mappedPrefix) { - var filters = extractWeightEntry(prefix + "/weights", 4, mappedPrefix + "/filters"); - var bias = extractWeightEntry(prefix + "/biases", 1, mappedPrefix + "/bias"); - return { filters: filters, bias: bias }; - } - function extractBoxPredictorParams(idx) { - var box_encoding_predictor = extractConvParams("Prediction/BoxPredictor_" + idx + "/BoxEncodingPredictor", "prediction_layer/box_predictor_" + idx + "/box_encoding_predictor"); - var class_predictor = extractConvParams("Prediction/BoxPredictor_" + idx + "/ClassPredictor", "prediction_layer/box_predictor_" + idx + "/class_predictor"); - return { box_encoding_predictor: box_encoding_predictor, class_predictor: class_predictor }; - } - function extractPredictionLayerParams() { - return { - conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'), - conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'), - conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'), - conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'), - conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'), - conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'), - conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'), - conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'), - box_predictor_0: extractBoxPredictorParams(0), - box_predictor_1: extractBoxPredictorParams(1), - box_predictor_2: extractBoxPredictorParams(2), - box_predictor_3: extractBoxPredictorParams(3), - box_predictor_4: extractBoxPredictorParams(4), - box_predictor_5: extractBoxPredictorParams(5) - }; - } - return { - extractMobilenetV1Params: extractMobilenetV1Params, - extractPredictionLayerParams: extractPredictionLayerParams - }; -} -export function extractParamsFromWeigthMap(weightMap) { - var paramMappings = []; - var _a = extractorsFactory(weightMap, paramMappings), extractMobilenetV1Params = _a.extractMobilenetV1Params, extractPredictionLayerParams = _a.extractPredictionLayerParams; - var extra_dim = weightMap['Output/extra_dim']; - paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' }); - if (!isTensor3D(extra_dim)) { - throw new Error("expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have " + extra_dim); - } - var params = { - mobilenetv1: extractMobilenetV1Params(), - prediction_layer: extractPredictionLayerParams(), - output_layer: { - extra_dim: extra_dim - } - }; - TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: params, paramMappings: paramMappings }; -} -//# sourceMappingURL=extractParamsFromWeigthMap.js.map \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/extractParamsFromWeigthMap.js.map b/build/es6/ssdMobilenetv1/extractParamsFromWeigthMap.js.map deleted file mode 100644 index cf2bfadc..00000000 --- a/build/es6/ssdMobilenetv1/extractParamsFromWeigthMap.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParamsFromWeigthMap.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/extractParamsFromWeigthMap.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/index.d.ts b/build/es6/ssdMobilenetv1/index.d.ts deleted file mode 100644 index b83f4792..00000000 --- a/build/es6/ssdMobilenetv1/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { SsdMobilenetv1 } from './SsdMobilenetv1'; -export * from './SsdMobilenetv1'; -export * from './SsdMobilenetv1Options'; -export declare function createSsdMobilenetv1(weights: Float32Array): SsdMobilenetv1; -export declare function createFaceDetectionNet(weights: Float32Array): SsdMobilenetv1; -export declare class FaceDetectionNet extends SsdMobilenetv1 { -} diff --git a/build/es6/ssdMobilenetv1/index.js b/build/es6/ssdMobilenetv1/index.js deleted file mode 100644 index eb81abea..00000000 --- a/build/es6/ssdMobilenetv1/index.js +++ /dev/null @@ -1,22 +0,0 @@ -import * as tslib_1 from "tslib"; -import { SsdMobilenetv1 } from './SsdMobilenetv1'; -export * from './SsdMobilenetv1'; -export * from './SsdMobilenetv1Options'; -export function createSsdMobilenetv1(weights) { - var net = new SsdMobilenetv1(); - net.extractWeights(weights); - return net; -} -export function createFaceDetectionNet(weights) { - return createSsdMobilenetv1(weights); -} -// alias for backward compatibily -var FaceDetectionNet = /** @class */ (function (_super) { - tslib_1.__extends(FaceDetectionNet, _super); - function FaceDetectionNet() { - return _super !== null && _super.apply(this, arguments) || this; - } - return FaceDetectionNet; -}(SsdMobilenetv1)); -export { FaceDetectionNet }; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/index.js.map b/build/es6/ssdMobilenetv1/index.js.map deleted file mode 100644 index 2a2b2099..00000000 --- a/build/es6/ssdMobilenetv1/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AAExC,MAAM,UAAU,oBAAoB,CAAC,OAAqB;IACxD,IAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAA;IAChC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAqB;IAC1D,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAA;AACtC,CAAC;AAED,iCAAiC;AACjC;IAAsC,4CAAc;IAApD;;IAAsD,CAAC;IAAD,uBAAC;AAAD,CAAC,AAAvD,CAAsC,cAAc,GAAG"} \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/mobileNetV1.d.ts b/build/es6/ssdMobilenetv1/mobileNetV1.d.ts deleted file mode 100644 index 05f5c5fe..00000000 --- a/build/es6/ssdMobilenetv1/mobileNetV1.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { MobileNetV1 } from './types'; -export declare function mobileNetV1(x: tf.Tensor4D, params: MobileNetV1.Params): { - out: tf.Tensor; - conv11: any; -}; diff --git a/build/es6/ssdMobilenetv1/mobileNetV1.js b/build/es6/ssdMobilenetv1/mobileNetV1.js deleted file mode 100644 index 04a28aea..00000000 --- a/build/es6/ssdMobilenetv1/mobileNetV1.js +++ /dev/null @@ -1,51 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { pointwiseConvLayer } from './pointwiseConvLayer'; -var epsilon = 0.0010000000474974513; -function depthwiseConvLayer(x, params, strides) { - return tf.tidy(function () { - var out = tf.depthwiseConv2d(x, params.filters, strides, 'same'); - out = tf.batchNorm(out, params.batch_norm_mean, params.batch_norm_variance, params.batch_norm_offset, params.batch_norm_scale, epsilon); - return tf.clipByValue(out, 0, 6); - }); -} -function getStridesForLayerIdx(layerIdx) { - return [2, 4, 6, 12].some(function (idx) { return idx === layerIdx; }) ? [2, 2] : [1, 1]; -} -export function mobileNetV1(x, params) { - return tf.tidy(function () { - var conv11 = null; - var out = pointwiseConvLayer(x, params.conv_0, [2, 2]); - var convPairParams = [ - params.conv_1, - params.conv_2, - params.conv_3, - params.conv_4, - params.conv_5, - params.conv_6, - params.conv_7, - params.conv_8, - params.conv_9, - params.conv_10, - params.conv_11, - params.conv_12, - params.conv_13 - ]; - convPairParams.forEach(function (param, i) { - var layerIdx = i + 1; - var depthwiseConvStrides = getStridesForLayerIdx(layerIdx); - out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides); - out = pointwiseConvLayer(out, param.pointwise_conv, [1, 1]); - if (layerIdx === 11) { - conv11 = out; - } - }); - if (conv11 === null) { - throw new Error('mobileNetV1 - output of conv layer 11 is null'); - } - return { - out: out, - conv11: conv11 - }; - }); -} -//# sourceMappingURL=mobileNetV1.js.map \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/mobileNetV1.js.map b/build/es6/ssdMobilenetv1/mobileNetV1.js.map deleted file mode 100644 index 0a990d19..00000000 --- a/build/es6/ssdMobilenetv1/mobileNetV1.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mobileNetV1.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/mobileNetV1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,IAAM,OAAO,GAAG,qBAAqB,CAAA;AAErC,SAAS,kBAAkB,CACzB,CAAc,EACd,MAAuC,EACvC,OAAyB;IAEzB,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAChE,GAAG,GAAG,EAAE,CAAC,SAAS,CAChB,GAAG,EACH,MAAM,CAAC,eAAe,EACtB,MAAM,CAAC,mBAAmB,EAC1B,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,gBAAgB,EACvB,OAAO,CACR,CAAA;QACD,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAElC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,KAAK,QAAQ,EAAhB,CAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACtE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAc,EAAE,MAA0B;IACpE,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,MAAM,GAAG,IAAI,CAAA;QACjB,IAAI,GAAG,GAAG,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEtD,IAAM,cAAc,GAAG;YACrB,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,OAAO;YACd,MAAM,CAAC,OAAO;YACd,MAAM,CAAC,OAAO;YACd,MAAM,CAAC,OAAO;SACf,CAAA;QAED,cAAc,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,CAAC;YAC9B,IAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAA;YACtB,IAAM,oBAAoB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAA;YAC5D,GAAG,GAAG,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAA;YACzE,GAAG,GAAG,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC3D,IAAI,QAAQ,KAAK,EAAE,EAAE;gBACnB,MAAM,GAAG,GAAG,CAAA;aACb;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;SACjE;QAED,OAAO;YACL,GAAG,KAAA;YACH,MAAM,EAAE,MAAa;SACtB,CAAA;IAEH,CAAC,CAAC,CAAA;AACJ,CAAC"} \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/nonMaxSuppression.d.ts b/build/es6/ssdMobilenetv1/nonMaxSuppression.d.ts deleted file mode 100644 index 6b215a26..00000000 --- a/build/es6/ssdMobilenetv1/nonMaxSuppression.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export declare function nonMaxSuppression(boxes: tf.Tensor2D, scores: number[], maxOutputSize: number, iouThreshold: number, scoreThreshold: number): number[]; diff --git a/build/es6/ssdMobilenetv1/nonMaxSuppression.js b/build/es6/ssdMobilenetv1/nonMaxSuppression.js deleted file mode 100644 index f3d248d6..00000000 --- a/build/es6/ssdMobilenetv1/nonMaxSuppression.js +++ /dev/null @@ -1,54 +0,0 @@ -export function nonMaxSuppression(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold) { - var numBoxes = boxes.shape[0]; - var outputSize = Math.min(maxOutputSize, numBoxes); - var candidates = scores - .map(function (score, boxIndex) { return ({ score: score, boxIndex: boxIndex }); }) - .filter(function (c) { return c.score > scoreThreshold; }) - .sort(function (c1, c2) { return c2.score - c1.score; }); - var suppressFunc = function (x) { return x <= iouThreshold ? 1 : 0; }; - var selected = []; - candidates.forEach(function (c) { - if (selected.length >= outputSize) { - return; - } - var originalScore = c.score; - for (var j = selected.length - 1; j >= 0; --j) { - var iou = IOU(boxes, c.boxIndex, selected[j]); - if (iou === 0.0) { - continue; - } - c.score *= suppressFunc(iou); - if (c.score <= scoreThreshold) { - break; - } - } - if (originalScore === c.score) { - selected.push(c.boxIndex); - } - }); - return selected; -} -function IOU(boxes, i, j) { - var boxesData = boxes.arraySync(); - var yminI = Math.min(boxesData[i][0], boxesData[i][2]); - var xminI = Math.min(boxesData[i][1], boxesData[i][3]); - var ymaxI = Math.max(boxesData[i][0], boxesData[i][2]); - var xmaxI = Math.max(boxesData[i][1], boxesData[i][3]); - var yminJ = Math.min(boxesData[j][0], boxesData[j][2]); - var xminJ = Math.min(boxesData[j][1], boxesData[j][3]); - var ymaxJ = Math.max(boxesData[j][0], boxesData[j][2]); - var xmaxJ = Math.max(boxesData[j][1], boxesData[j][3]); - var areaI = (ymaxI - yminI) * (xmaxI - xminI); - var areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ); - if (areaI <= 0 || areaJ <= 0) { - return 0.0; - } - var intersectionYmin = Math.max(yminI, yminJ); - var intersectionXmin = Math.max(xminI, xminJ); - var intersectionYmax = Math.min(ymaxI, ymaxJ); - var intersectionXmax = Math.min(xmaxI, xmaxJ); - var intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0) * - Math.max(intersectionXmax - intersectionXmin, 0.0); - return intersectionArea / (areaI + areaJ - intersectionArea); -} -//# sourceMappingURL=nonMaxSuppression.js.map \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/nonMaxSuppression.js.map b/build/es6/ssdMobilenetv1/nonMaxSuppression.js.map deleted file mode 100644 index 8e9b4470..00000000 --- a/build/es6/ssdMobilenetv1/nonMaxSuppression.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"nonMaxSuppression.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/nonMaxSuppression.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAC/B,KAAkB,EAClB,MAAgB,EAChB,aAAqB,EACrB,YAAoB,EACpB,cAAsB;IAGtB,IAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC/B,IAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,aAAa,EACb,QAAQ,CACT,CAAA;IAED,IAAM,UAAU,GAAG,MAAM;SACtB,GAAG,CAAC,UAAC,KAAK,EAAE,QAAQ,IAAK,OAAA,CAAC,EAAE,KAAK,OAAA,EAAE,QAAQ,UAAA,EAAE,CAAC,EAArB,CAAqB,CAAC;SAC/C,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,GAAG,cAAc,EAAxB,CAAwB,CAAC;SACrC,IAAI,CAAC,UAAC,EAAE,EAAE,EAAE,IAAK,OAAA,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,EAAnB,CAAmB,CAAC,CAAA;IAExC,IAAM,YAAY,GAAG,UAAC,CAAS,IAAK,OAAA,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAzB,CAAyB,CAAA;IAE7D,IAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,UAAU,CAAC,OAAO,CAAC,UAAA,CAAC;QAClB,IAAI,QAAQ,CAAC,MAAM,IAAI,UAAU,EAAE;YACjC,OAAM;SACP;QACD,IAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAA;QAE7B,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;YAC7C,IAAM,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;YAC/C,IAAI,GAAG,KAAK,GAAG,EAAE;gBACf,SAAQ;aACT;YACD,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,GAAG,CAAC,CAAA;YAC5B,IAAI,CAAC,CAAC,KAAK,IAAI,cAAc,EAAE;gBAC7B,MAAK;aACN;SACF;QAED,IAAI,aAAa,KAAK,CAAC,CAAC,KAAK,EAAE;YAC7B,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;SAC1B;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,GAAG,CAAC,KAAkB,EAAE,CAAS,EAAE,CAAS;IACnD,IAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,CAAA;IACnC,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,IAAM,KAAK,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAA;IAC/C,IAAM,KAAK,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAA;IAC/C,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;QAC5B,OAAO,GAAG,CAAA;KACX;IACD,IAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC/C,IAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC/C,IAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC/C,IAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC/C,IAAM,gBAAgB,GAClB,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,gBAAgB,EAAE,GAAG,CAAC;QAClD,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,gBAAgB,EAAE,GAAG,CAAC,CAAA;IACtD,OAAO,gBAAgB,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,gBAAgB,CAAC,CAAA;AAC9D,CAAC"} \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/outputLayer.d.ts b/build/es6/ssdMobilenetv1/outputLayer.d.ts deleted file mode 100644 index 9ce8d135..00000000 --- a/build/es6/ssdMobilenetv1/outputLayer.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { OutputLayerParams } from './types'; -export declare function outputLayer(boxPredictions: tf.Tensor4D, classPredictions: tf.Tensor4D, params: OutputLayerParams): { - boxes: tf.Tensor[]; - scores: tf.Tensor[]; -}; diff --git a/build/es6/ssdMobilenetv1/outputLayer.js b/build/es6/ssdMobilenetv1/outputLayer.js deleted file mode 100644 index ebae3195..00000000 --- a/build/es6/ssdMobilenetv1/outputLayer.js +++ /dev/null @@ -1,47 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -function getCenterCoordinatesAndSizesLayer(x) { - var vec = tf.unstack(tf.transpose(x, [1, 0])); - var sizes = [ - tf.sub(vec[2], vec[0]), - tf.sub(vec[3], vec[1]) - ]; - var centers = [ - tf.add(vec[0], tf.div(sizes[0], tf.scalar(2))), - tf.add(vec[1], tf.div(sizes[1], tf.scalar(2))) - ]; - return { - sizes: sizes, - centers: centers - }; -} -function decodeBoxesLayer(x0, x1) { - var _a = getCenterCoordinatesAndSizesLayer(x0), sizes = _a.sizes, centers = _a.centers; - var vec = tf.unstack(tf.transpose(x1, [1, 0])); - var div0_out = tf.div(tf.mul(tf.exp(tf.div(vec[2], tf.scalar(5))), sizes[0]), tf.scalar(2)); - var add0_out = tf.add(tf.mul(tf.div(vec[0], tf.scalar(10)), sizes[0]), centers[0]); - var div1_out = tf.div(tf.mul(tf.exp(tf.div(vec[3], tf.scalar(5))), sizes[1]), tf.scalar(2)); - var add1_out = tf.add(tf.mul(tf.div(vec[1], tf.scalar(10)), sizes[1]), centers[1]); - return tf.transpose(tf.stack([ - tf.sub(add0_out, div0_out), - tf.sub(add1_out, div1_out), - tf.add(add0_out, div0_out), - tf.add(add1_out, div1_out) - ]), [1, 0]); -} -export function outputLayer(boxPredictions, classPredictions, params) { - return tf.tidy(function () { - var batchSize = boxPredictions.shape[0]; - var boxes = decodeBoxesLayer(tf.reshape(tf.tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]), tf.reshape(boxPredictions, [-1, 4])); - boxes = tf.reshape(boxes, [batchSize, (boxes.shape[0] / batchSize), 4]); - var scoresAndClasses = tf.sigmoid(tf.slice(classPredictions, [0, 0, 1], [-1, -1, -1])); - var scores = tf.slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]); - scores = tf.reshape(scores, [batchSize, scores.shape[1]]); - var boxesByBatch = tf.unstack(boxes); - var scoresByBatch = tf.unstack(scores); - return { - boxes: boxesByBatch, - scores: scoresByBatch - }; - }); -} -//# sourceMappingURL=outputLayer.js.map \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/outputLayer.js.map b/build/es6/ssdMobilenetv1/outputLayer.js.map deleted file mode 100644 index f2e074ee..00000000 --- a/build/es6/ssdMobilenetv1/outputLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"outputLayer.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/outputLayer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/pointwiseConvLayer.d.ts b/build/es6/ssdMobilenetv1/pointwiseConvLayer.d.ts deleted file mode 100644 index f7a92d55..00000000 --- a/build/es6/ssdMobilenetv1/pointwiseConvLayer.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { PointwiseConvParams } from './types'; -export declare function pointwiseConvLayer(x: tf.Tensor4D, params: PointwiseConvParams, strides: [number, number]): tf.Tensor; diff --git a/build/es6/ssdMobilenetv1/pointwiseConvLayer.js b/build/es6/ssdMobilenetv1/pointwiseConvLayer.js deleted file mode 100644 index 41845f29..00000000 --- a/build/es6/ssdMobilenetv1/pointwiseConvLayer.js +++ /dev/null @@ -1,9 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -export function pointwiseConvLayer(x, params, strides) { - return tf.tidy(function () { - var out = tf.conv2d(x, params.filters, strides, 'same'); - out = tf.add(out, params.batch_norm_offset); - return tf.clipByValue(out, 0, 6); - }); -} -//# sourceMappingURL=pointwiseConvLayer.js.map \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/pointwiseConvLayer.js.map b/build/es6/ssdMobilenetv1/pointwiseConvLayer.js.map deleted file mode 100644 index a494c41d..00000000 --- a/build/es6/ssdMobilenetv1/pointwiseConvLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"pointwiseConvLayer.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/pointwiseConvLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAI5C,MAAM,UAAU,kBAAkB,CAChC,CAAc,EACd,MAA2B,EAC3B,OAAyB;IAEzB,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QACvD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAA;QAC3C,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAElC,CAAC,CAAC,CAAA;AACJ,CAAC"} \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/predictionLayer.d.ts b/build/es6/ssdMobilenetv1/predictionLayer.d.ts deleted file mode 100644 index 3f136062..00000000 --- a/build/es6/ssdMobilenetv1/predictionLayer.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { PredictionLayerParams } from './types'; -export declare function predictionLayer(x: tf.Tensor4D, conv11: tf.Tensor4D, params: PredictionLayerParams): { - boxPredictions: tf.Tensor; - classPredictions: tf.Tensor; -}; diff --git a/build/es6/ssdMobilenetv1/predictionLayer.js b/build/es6/ssdMobilenetv1/predictionLayer.js deleted file mode 100644 index 9ebad6bb..00000000 --- a/build/es6/ssdMobilenetv1/predictionLayer.js +++ /dev/null @@ -1,42 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { boxPredictionLayer } from './boxPredictionLayer'; -import { pointwiseConvLayer } from './pointwiseConvLayer'; -export function predictionLayer(x, conv11, params) { - return tf.tidy(function () { - var conv0 = pointwiseConvLayer(x, params.conv_0, [1, 1]); - var conv1 = pointwiseConvLayer(conv0, params.conv_1, [2, 2]); - var conv2 = pointwiseConvLayer(conv1, params.conv_2, [1, 1]); - var conv3 = pointwiseConvLayer(conv2, params.conv_3, [2, 2]); - var conv4 = pointwiseConvLayer(conv3, params.conv_4, [1, 1]); - var conv5 = pointwiseConvLayer(conv4, params.conv_5, [2, 2]); - var conv6 = pointwiseConvLayer(conv5, params.conv_6, [1, 1]); - var conv7 = pointwiseConvLayer(conv6, params.conv_7, [2, 2]); - var boxPrediction0 = boxPredictionLayer(conv11, params.box_predictor_0); - var boxPrediction1 = boxPredictionLayer(x, params.box_predictor_1); - var boxPrediction2 = boxPredictionLayer(conv1, params.box_predictor_2); - var boxPrediction3 = boxPredictionLayer(conv3, params.box_predictor_3); - var boxPrediction4 = boxPredictionLayer(conv5, params.box_predictor_4); - var boxPrediction5 = boxPredictionLayer(conv7, params.box_predictor_5); - var boxPredictions = tf.concat([ - boxPrediction0.boxPredictionEncoding, - boxPrediction1.boxPredictionEncoding, - boxPrediction2.boxPredictionEncoding, - boxPrediction3.boxPredictionEncoding, - boxPrediction4.boxPredictionEncoding, - boxPrediction5.boxPredictionEncoding - ], 1); - var classPredictions = tf.concat([ - boxPrediction0.classPrediction, - boxPrediction1.classPrediction, - boxPrediction2.classPrediction, - boxPrediction3.classPrediction, - boxPrediction4.classPrediction, - boxPrediction5.classPrediction - ], 1); - return { - boxPredictions: boxPredictions, - classPredictions: classPredictions - }; - }); -} -//# sourceMappingURL=predictionLayer.js.map \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/predictionLayer.js.map b/build/es6/ssdMobilenetv1/predictionLayer.js.map deleted file mode 100644 index bea02c16..00000000 --- a/build/es6/ssdMobilenetv1/predictionLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"predictionLayer.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/predictionLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,MAAM,UAAU,eAAe,CAC7B,CAAc,EACd,MAAmB,EACnB,MAA6B;IAE7B,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAM,KAAK,GAAG,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1D,IAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAE9D,IAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACzE,IAAM,cAAc,GAAG,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACpE,IAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACxE,IAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACxE,IAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACxE,IAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QAExE,IAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;YAC/B,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;SACrC,EAAE,CAAC,CAAgB,CAAA;QAEpB,IAAM,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC;YACjC,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;SAC/B,EAAE,CAAC,CAAgB,CAAA;QAEpB,OAAO;YACL,cAAc,gBAAA;YACd,gBAAgB,kBAAA;SACjB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"} \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/types.d.ts b/build/es6/ssdMobilenetv1/types.d.ts deleted file mode 100644 index c303dc6a..00000000 --- a/build/es6/ssdMobilenetv1/types.d.ts +++ /dev/null @@ -1,63 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export declare type PointwiseConvParams = { - filters: tf.Tensor4D; - batch_norm_offset: tf.Tensor1D; -}; -export declare namespace MobileNetV1 { - type DepthwiseConvParams = { - filters: tf.Tensor4D; - batch_norm_scale: tf.Tensor1D; - batch_norm_offset: tf.Tensor1D; - batch_norm_mean: tf.Tensor1D; - batch_norm_variance: tf.Tensor1D; - }; - type ConvPairParams = { - depthwise_conv: DepthwiseConvParams; - pointwise_conv: PointwiseConvParams; - }; - type Params = { - conv_0: PointwiseConvParams; - conv_1: ConvPairParams; - conv_2: ConvPairParams; - conv_3: ConvPairParams; - conv_4: ConvPairParams; - conv_5: ConvPairParams; - conv_6: ConvPairParams; - conv_7: ConvPairParams; - conv_8: ConvPairParams; - conv_9: ConvPairParams; - conv_10: ConvPairParams; - conv_11: ConvPairParams; - conv_12: ConvPairParams; - conv_13: ConvPairParams; - }; -} -export declare type BoxPredictionParams = { - box_encoding_predictor: TfjsImageRecognitionBase.ConvParams; - class_predictor: TfjsImageRecognitionBase.ConvParams; -}; -export declare type PredictionLayerParams = { - conv_0: PointwiseConvParams; - conv_1: PointwiseConvParams; - conv_2: PointwiseConvParams; - conv_3: PointwiseConvParams; - conv_4: PointwiseConvParams; - conv_5: PointwiseConvParams; - conv_6: PointwiseConvParams; - conv_7: PointwiseConvParams; - box_predictor_0: BoxPredictionParams; - box_predictor_1: BoxPredictionParams; - box_predictor_2: BoxPredictionParams; - box_predictor_3: BoxPredictionParams; - box_predictor_4: BoxPredictionParams; - box_predictor_5: BoxPredictionParams; -}; -export declare type OutputLayerParams = { - extra_dim: tf.Tensor3D; -}; -export declare type NetParams = { - mobilenetv1: MobileNetV1.Params; - prediction_layer: PredictionLayerParams; - output_layer: OutputLayerParams; -}; diff --git a/build/es6/ssdMobilenetv1/types.js b/build/es6/ssdMobilenetv1/types.js deleted file mode 100644 index 5b2306a4..00000000 --- a/build/es6/ssdMobilenetv1/types.js +++ /dev/null @@ -1 +0,0 @@ -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/types.js.map b/build/es6/ssdMobilenetv1/types.js.map deleted file mode 100644 index 977d82a6..00000000 --- a/build/es6/ssdMobilenetv1/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/build/es6/tinyFaceDetector/TinyFaceDetector.d.ts b/build/es6/tinyFaceDetector/TinyFaceDetector.d.ts deleted file mode 100644 index 5cef3f56..00000000 --- a/build/es6/tinyFaceDetector/TinyFaceDetector.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { Point, TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes'; -export declare class TinyFaceDetector extends TfjsImageRecognitionBase.TinyYolov2 { - constructor(); - readonly anchors: Point[]; - locateFaces(input: TNetInput, forwardParams: TfjsImageRecognitionBase.ITinyYolov2Options): Promise; - protected getDefaultModelName(): string; - protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: TfjsImageRecognitionBase.TinyYolov2NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; - }; -} diff --git a/build/es6/tinyFaceDetector/TinyFaceDetector.js b/build/es6/tinyFaceDetector/TinyFaceDetector.js deleted file mode 100644 index 93df77d7..00000000 --- a/build/es6/tinyFaceDetector/TinyFaceDetector.js +++ /dev/null @@ -1,50 +0,0 @@ -import * as tslib_1 from "tslib"; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes'; -import { BOX_ANCHORS, IOU_THRESHOLD, MEAN_RGB } from './const'; -var TinyFaceDetector = /** @class */ (function (_super) { - tslib_1.__extends(TinyFaceDetector, _super); - function TinyFaceDetector() { - var _this = this; - var config = { - withSeparableConvs: true, - iouThreshold: IOU_THRESHOLD, - classes: ['face'], - anchors: BOX_ANCHORS, - meanRgb: MEAN_RGB, - isFirstLayerConv2d: true, - filterSizes: [3, 16, 32, 64, 128, 256, 512] - }; - _this = _super.call(this, config) || this; - return _this; - } - Object.defineProperty(TinyFaceDetector.prototype, "anchors", { - get: function () { - return this.config.anchors; - }, - enumerable: true, - configurable: true - }); - TinyFaceDetector.prototype.locateFaces = function (input, forwardParams) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var objectDetections; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.detect(input, forwardParams)]; - case 1: - objectDetections = _a.sent(); - return [2 /*return*/, objectDetections.map(function (det) { return new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }); })]; - } - }); - }); - }; - TinyFaceDetector.prototype.getDefaultModelName = function () { - return 'tiny_face_detector_model'; - }; - TinyFaceDetector.prototype.extractParamsFromWeigthMap = function (weightMap) { - return _super.prototype.extractParamsFromWeigthMap.call(this, weightMap); - }; - return TinyFaceDetector; -}(TfjsImageRecognitionBase.TinyYolov2)); -export { TinyFaceDetector }; -//# sourceMappingURL=TinyFaceDetector.js.map \ No newline at end of file diff --git a/build/es6/tinyFaceDetector/TinyFaceDetector.js.map b/build/es6/tinyFaceDetector/TinyFaceDetector.js.map deleted file mode 100644 index 3ca07cca..00000000 --- a/build/es6/tinyFaceDetector/TinyFaceDetector.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TinyFaceDetector.js","sourceRoot":"","sources":["../../../src/tinyFaceDetector/TinyFaceDetector.ts"],"names":[],"mappings":";AACA,OAAO,EAAS,wBAAwB,EAAa,MAAM,6BAA6B,CAAC;AAEzF,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/D;IAAsC,4CAAmC;IAEvE;QAAA,iBAYC;QAXC,IAAM,MAAM,GAAG;YACb,kBAAkB,EAAE,IAAI;YACxB,YAAY,EAAE,aAAa;YAC3B,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,QAAQ;YACjB,kBAAkB,EAAE,IAAI;YACxB,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;SAC5C,CAAA;QAED,QAAA,kBAAM,MAAM,CAAC,SAAA;;IACf,CAAC;IAED,sBAAW,qCAAO;aAAlB;YACE,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QAC5B,CAAC;;;OAAA;IAEY,sCAAW,GAAxB,UAAyB,KAAgB,EAAE,aAA0D;;;;;4BAC1E,qBAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,EAAA;;wBAA1D,gBAAgB,GAAG,SAAuC;wBAChE,sBAAO,gBAAgB,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,EAAjG,CAAiG,CAAC,EAAA;;;;KACtI;IAES,8CAAmB,GAA7B;QACE,OAAO,0BAA0B,CAAA;IACnC,CAAC;IAES,qDAA0B,GAApC,UAAqC,SAA4B;QAC/D,OAAO,iBAAM,0BAA0B,YAAC,SAAS,CAAC,CAAA;IACpD,CAAC;IACH,uBAAC;AAAD,CAAC,AAhCD,CAAsC,wBAAwB,CAAC,UAAU,GAgCxE"} \ No newline at end of file diff --git a/build/es6/tinyFaceDetector/TinyFaceDetectorOptions.d.ts b/build/es6/tinyFaceDetector/TinyFaceDetectorOptions.d.ts deleted file mode 100644 index c367c5fa..00000000 --- a/build/es6/tinyFaceDetector/TinyFaceDetectorOptions.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -export interface ITinyFaceDetectorOptions extends TfjsImageRecognitionBase.ITinyYolov2Options { -} -export declare class TinyFaceDetectorOptions extends TfjsImageRecognitionBase.TinyYolov2Options { - protected _name: string; -} diff --git a/build/es6/tinyFaceDetector/TinyFaceDetectorOptions.js b/build/es6/tinyFaceDetector/TinyFaceDetectorOptions.js deleted file mode 100644 index c2ab1142..00000000 --- a/build/es6/tinyFaceDetector/TinyFaceDetectorOptions.js +++ /dev/null @@ -1,13 +0,0 @@ -import * as tslib_1 from "tslib"; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -var TinyFaceDetectorOptions = /** @class */ (function (_super) { - tslib_1.__extends(TinyFaceDetectorOptions, _super); - function TinyFaceDetectorOptions() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this._name = 'TinyFaceDetectorOptions'; - return _this; - } - return TinyFaceDetectorOptions; -}(TfjsImageRecognitionBase.TinyYolov2Options)); -export { TinyFaceDetectorOptions }; -//# sourceMappingURL=TinyFaceDetectorOptions.js.map \ No newline at end of file diff --git a/build/es6/tinyFaceDetector/TinyFaceDetectorOptions.js.map b/build/es6/tinyFaceDetector/TinyFaceDetectorOptions.js.map deleted file mode 100644 index e9484672..00000000 --- a/build/es6/tinyFaceDetector/TinyFaceDetectorOptions.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TinyFaceDetectorOptions.js","sourceRoot":"","sources":["../../../src/tinyFaceDetector/TinyFaceDetectorOptions.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAIvE;IAA6C,mDAA0C;IAAvF;QAAA,qEAEC;QADW,WAAK,GAAW,yBAAyB,CAAA;;IACrD,CAAC;IAAD,8BAAC;AAAD,CAAC,AAFD,CAA6C,wBAAwB,CAAC,iBAAiB,GAEtF"} \ No newline at end of file diff --git a/build/es6/tinyFaceDetector/const.d.ts b/build/es6/tinyFaceDetector/const.d.ts deleted file mode 100644 index 11a84e48..00000000 --- a/build/es6/tinyFaceDetector/const.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Point } from 'tfjs-image-recognition-base'; -export declare const IOU_THRESHOLD = 0.4; -export declare const BOX_ANCHORS: Point[]; -export declare const MEAN_RGB: [number, number, number]; diff --git a/build/es6/tinyFaceDetector/const.js b/build/es6/tinyFaceDetector/const.js deleted file mode 100644 index 2cc3434c..00000000 --- a/build/es6/tinyFaceDetector/const.js +++ /dev/null @@ -1,11 +0,0 @@ -import { Point } from 'tfjs-image-recognition-base'; -export var IOU_THRESHOLD = 0.4; -export var BOX_ANCHORS = [ - new Point(1.603231, 2.094468), - new Point(6.041143, 7.080126), - new Point(2.882459, 3.518061), - new Point(4.266906, 5.178857), - new Point(9.041765, 10.66308) -]; -export var MEAN_RGB = [117.001, 114.697, 97.404]; -//# sourceMappingURL=const.js.map \ No newline at end of file diff --git a/build/es6/tinyFaceDetector/const.js.map b/build/es6/tinyFaceDetector/const.js.map deleted file mode 100644 index 44c05629..00000000 --- a/build/es6/tinyFaceDetector/const.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../src/tinyFaceDetector/const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEpD,MAAM,CAAC,IAAM,aAAa,GAAG,GAAG,CAAA;AAEhC,MAAM,CAAC,IAAM,WAAW,GAAG;IACzB,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC9B,CAAA;AAED,MAAM,CAAC,IAAM,QAAQ,GAA6B,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA"} \ No newline at end of file diff --git a/build/es6/tinyFaceDetector/index.d.ts b/build/es6/tinyFaceDetector/index.d.ts deleted file mode 100644 index cde93ca0..00000000 --- a/build/es6/tinyFaceDetector/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { TinyFaceDetector } from './TinyFaceDetector'; -export * from './TinyFaceDetector'; -export * from './TinyFaceDetectorOptions'; -export declare function createTinyFaceDetector(weights: Float32Array): TinyFaceDetector; diff --git a/build/es6/tinyFaceDetector/index.js b/build/es6/tinyFaceDetector/index.js deleted file mode 100644 index 9c17b2de..00000000 --- a/build/es6/tinyFaceDetector/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import { TinyFaceDetector } from './TinyFaceDetector'; -export * from './TinyFaceDetector'; -export * from './TinyFaceDetectorOptions'; -export function createTinyFaceDetector(weights) { - var net = new TinyFaceDetector(); - net.extractWeights(weights); - return net; -} -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/es6/tinyFaceDetector/index.js.map b/build/es6/tinyFaceDetector/index.js.map deleted file mode 100644 index e8d93f44..00000000 --- a/build/es6/tinyFaceDetector/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tinyFaceDetector/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAE1C,MAAM,UAAU,sBAAsB,CAAC,OAAqB;IAC1D,IAAM,GAAG,GAAG,IAAI,gBAAgB,EAAE,CAAA;IAClC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC"} \ No newline at end of file diff --git a/build/es6/tinyYolov2/TinyYolov2.d.ts b/build/es6/tinyYolov2/TinyYolov2.d.ts deleted file mode 100644 index c4a286ef..00000000 --- a/build/es6/tinyYolov2/TinyYolov2.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { Point, TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes'; -export declare class TinyYolov2 extends TfjsImageRecognitionBase.TinyYolov2 { - constructor(withSeparableConvs?: boolean); - readonly withSeparableConvs: boolean; - readonly anchors: Point[]; - locateFaces(input: TNetInput, forwardParams: TfjsImageRecognitionBase.ITinyYolov2Options): Promise; - protected getDefaultModelName(): string; - protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { - params: TfjsImageRecognitionBase.TinyYolov2NetParams; - paramMappings: TfjsImageRecognitionBase.ParamMapping[]; - }; -} diff --git a/build/es6/tinyYolov2/TinyYolov2.js b/build/es6/tinyYolov2/TinyYolov2.js deleted file mode 100644 index 58987ad4..00000000 --- a/build/es6/tinyYolov2/TinyYolov2.js +++ /dev/null @@ -1,62 +0,0 @@ -import * as tslib_1 from "tslib"; -import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes'; -import { BOX_ANCHORS, BOX_ANCHORS_SEPARABLE, DEFAULT_MODEL_NAME, DEFAULT_MODEL_NAME_SEPARABLE_CONV, IOU_THRESHOLD, MEAN_RGB_SEPARABLE, } from './const'; -var TinyYolov2 = /** @class */ (function (_super) { - tslib_1.__extends(TinyYolov2, _super); - function TinyYolov2(withSeparableConvs) { - if (withSeparableConvs === void 0) { withSeparableConvs = true; } - var _this = this; - var config = Object.assign({}, { - withSeparableConvs: withSeparableConvs, - iouThreshold: IOU_THRESHOLD, - classes: ['face'] - }, withSeparableConvs - ? { - anchors: BOX_ANCHORS_SEPARABLE, - meanRgb: MEAN_RGB_SEPARABLE - } - : { - anchors: BOX_ANCHORS, - withClassScores: true - }); - _this = _super.call(this, config) || this; - return _this; - } - Object.defineProperty(TinyYolov2.prototype, "withSeparableConvs", { - get: function () { - return this.config.withSeparableConvs; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TinyYolov2.prototype, "anchors", { - get: function () { - return this.config.anchors; - }, - enumerable: true, - configurable: true - }); - TinyYolov2.prototype.locateFaces = function (input, forwardParams) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var objectDetections; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.detect(input, forwardParams)]; - case 1: - objectDetections = _a.sent(); - return [2 /*return*/, objectDetections.map(function (det) { return new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }); })]; - } - }); - }); - }; - TinyYolov2.prototype.getDefaultModelName = function () { - return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME; - }; - TinyYolov2.prototype.extractParamsFromWeigthMap = function (weightMap) { - return _super.prototype.extractParamsFromWeigthMap.call(this, weightMap); - }; - return TinyYolov2; -}(TfjsImageRecognitionBase.TinyYolov2)); -export { TinyYolov2 }; -//# sourceMappingURL=TinyYolov2.js.map \ No newline at end of file diff --git a/build/es6/tinyYolov2/TinyYolov2.js.map b/build/es6/tinyYolov2/TinyYolov2.js.map deleted file mode 100644 index ad98f103..00000000 --- a/build/es6/tinyYolov2/TinyYolov2.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TinyYolov2.js","sourceRoot":"","sources":["../../../src/tinyYolov2/TinyYolov2.ts"],"names":[],"mappings":";AACA,OAAO,EAAS,wBAAwB,EAAa,MAAM,6BAA6B,CAAC;AAEzF,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,iCAAiC,EACjC,aAAa,EACb,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAEjB;IAAgC,sCAAmC;IAEjE,oBAAY,kBAAkC;QAAlC,mCAAA,EAAA,yBAAkC;QAA9C,iBAkBC;QAjBC,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;YAC/B,kBAAkB,oBAAA;YAClB,YAAY,EAAE,aAAa;YAC3B,OAAO,EAAE,CAAC,MAAM,CAAC;SAClB,EACD,kBAAkB;YAChB,CAAC,CAAC;gBACA,OAAO,EAAE,qBAAqB;gBAC9B,OAAO,EAAE,kBAAkB;aAC5B;YACD,CAAC,CAAC;gBACA,OAAO,EAAE,WAAW;gBACpB,eAAe,EAAE,IAAI;aACtB,CACF,CAAA;QAED,QAAA,kBAAM,MAAM,CAAC,SAAA;;IACf,CAAC;IAED,sBAAW,0CAAkB;aAA7B;YACE,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAA;QACvC,CAAC;;;OAAA;IAED,sBAAW,+BAAO;aAAlB;YACE,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QAC5B,CAAC;;;OAAA;IAEY,gCAAW,GAAxB,UAAyB,KAAgB,EAAE,aAA0D;;;;;4BAC1E,qBAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,EAAA;;wBAA1D,gBAAgB,GAAG,SAAuC;wBAChE,sBAAO,gBAAgB,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,EAAjG,CAAiG,CAAC,EAAA;;;;KACtI;IAES,wCAAmB,GAA7B;QACE,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,kBAAkB,CAAA;IACzF,CAAC;IAES,+CAA0B,GAApC,UAAqC,SAA4B;QAC/D,OAAO,iBAAM,0BAA0B,YAAC,SAAS,CAAC,CAAA;IACpD,CAAC;IACH,iBAAC;AAAD,CAAC,AA1CD,CAAgC,wBAAwB,CAAC,UAAU,GA0ClE"} \ No newline at end of file diff --git a/build/es6/tinyYolov2/const.d.ts b/build/es6/tinyYolov2/const.d.ts deleted file mode 100644 index e64e2478..00000000 --- a/build/es6/tinyYolov2/const.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Point } from 'tfjs-image-recognition-base'; -export declare const IOU_THRESHOLD = 0.4; -export declare const BOX_ANCHORS: Point[]; -export declare const BOX_ANCHORS_SEPARABLE: Point[]; -export declare const MEAN_RGB_SEPARABLE: [number, number, number]; -export declare const DEFAULT_MODEL_NAME = "tiny_yolov2_model"; -export declare const DEFAULT_MODEL_NAME_SEPARABLE_CONV = "tiny_yolov2_separable_conv_model"; diff --git a/build/es6/tinyYolov2/const.js b/build/es6/tinyYolov2/const.js deleted file mode 100644 index 1a0cc8db..00000000 --- a/build/es6/tinyYolov2/const.js +++ /dev/null @@ -1,20 +0,0 @@ -import { Point } from 'tfjs-image-recognition-base'; -export var IOU_THRESHOLD = 0.4; -export var BOX_ANCHORS = [ - new Point(0.738768, 0.874946), - new Point(2.42204, 2.65704), - new Point(4.30971, 7.04493), - new Point(10.246, 4.59428), - new Point(12.6868, 11.8741) -]; -export var BOX_ANCHORS_SEPARABLE = [ - new Point(1.603231, 2.094468), - new Point(6.041143, 7.080126), - new Point(2.882459, 3.518061), - new Point(4.266906, 5.178857), - new Point(9.041765, 10.66308) -]; -export var MEAN_RGB_SEPARABLE = [117.001, 114.697, 97.404]; -export var DEFAULT_MODEL_NAME = 'tiny_yolov2_model'; -export var DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model'; -//# sourceMappingURL=const.js.map \ No newline at end of file diff --git a/build/es6/tinyYolov2/const.js.map b/build/es6/tinyYolov2/const.js.map deleted file mode 100644 index 0cc1b153..00000000 --- a/build/es6/tinyYolov2/const.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../src/tinyYolov2/const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEpD,MAAM,CAAC,IAAM,aAAa,GAAG,GAAG,CAAA;AAEhC,MAAM,CAAC,IAAM,WAAW,GAAG;IACzB,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;IAC3B,IAAI,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;IAC3B,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1B,IAAI,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;CAC5B,CAAA;AAED,MAAM,CAAC,IAAM,qBAAqB,GAAG;IACnC,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC9B,CAAA;AAED,MAAM,CAAC,IAAM,kBAAkB,GAA6B,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAEtF,MAAM,CAAC,IAAM,kBAAkB,GAAG,mBAAmB,CAAA;AACrD,MAAM,CAAC,IAAM,iCAAiC,GAAG,kCAAkC,CAAA"} \ No newline at end of file diff --git a/build/es6/tinyYolov2/index.d.ts b/build/es6/tinyYolov2/index.d.ts deleted file mode 100644 index 5721a203..00000000 --- a/build/es6/tinyYolov2/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { TinyYolov2 } from './TinyYolov2'; -export { TinyYolov2 }; -export declare function createTinyYolov2(weights: Float32Array, withSeparableConvs?: boolean): TinyYolov2; diff --git a/build/es6/tinyYolov2/index.js b/build/es6/tinyYolov2/index.js deleted file mode 100644 index 584f5d7e..00000000 --- a/build/es6/tinyYolov2/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import { TinyYolov2 } from './TinyYolov2'; -export { TinyYolov2 }; -export function createTinyYolov2(weights, withSeparableConvs) { - if (withSeparableConvs === void 0) { withSeparableConvs = true; } - var net = new TinyYolov2(withSeparableConvs); - net.extractWeights(weights); - return net; -} -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/es6/tinyYolov2/index.js.map b/build/es6/tinyYolov2/index.js.map deleted file mode 100644 index b63dcb23..00000000 --- a/build/es6/tinyYolov2/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tinyYolov2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,CAAA;AAErB,MAAM,UAAU,gBAAgB,CAAC,OAAqB,EAAE,kBAAkC;IAAlC,mCAAA,EAAA,yBAAkC;IACxF,IAAM,GAAG,GAAG,IAAI,UAAU,CAAC,kBAAkB,CAAC,CAAA;IAC9C,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC"} \ No newline at end of file diff --git a/dist/face-api.js b/dist/face-api.js index 3b980b0c..a4373418 100644 --- a/dist/face-api.js +++ b/dist/face-api.js @@ -1,5802 +1,6568 @@ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (global = global || self, factory(global.faceapi = global.faceapi || {})); -}(this, function (exports) { 'use strict'; - - /** - * @license - * Copyright 2019 Google LLC. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================================= - */ - var extendStatics=function(e,t){return (extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t;}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);})(e,t)};function __extends(e,t){function n(){this.constructor=e;}extendStatics(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n);}var __assign=function(){return (__assign=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])&&(6===a[0]||2===a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0;)r=Math.random()*t|0,n=e[--t],e[t]=e[r],e[r]=n;}function clamp(e,t,n){return Math.max(e,Math.min(t,n))}function nearestLargerEven(e){return e%2==0?e:e+1}function sum(e){for(var t=0,n=0;n=n?o():setTimeout(i,s);}};i();})}function inferFromImplicitShape(e,t){for(var n=1,r=-1,o=0;o=0)n*=e[o];else if(-1===e[o]){if(-1!==r)throw Error("Shapes can only have 1 implicit size. Found -1 at dim "+r+" and dim "+o);r=o;}else if(e[o]<0)throw Error("Shapes can not be < 0. Found "+e[o]+" at dim "+o);if(-1===r){if(t>0&&t!==n)throw Error("Size("+t+") must match the product of shape "+e);return e}if(0===n)throw Error("Cannot infer the missing size in ["+e+"] when there are 0 elements");if(t%n!=0)throw Error("The implicit shape can't be a fractional number. Got "+t+" / "+n);var a=e.slice();return a[r]=t/n,a}function parseAxisParam(e,t){var n=t.length;return assert((e=null==e?t.map(function(e,t){return t}):[].concat(e)).every(function(e){return e>=-n&&ei)&&1===e[i]&&(n.push(e[i]),r.push(i)),o[a]<=i&&a++;}1!==e[i]&&(n.push(e[i]),r.push(i));}return {newShape:n,keptDims:r}}function getTypedArrayFromDType(e,t){var n=null;if(null==e||"float32"===e)n=new Float32Array(t);else if("int32"===e)n=new Int32Array(t);else{if("bool"!==e)throw new Error("Unknown data type "+e);n=new Uint8Array(t);}return n}function getArrayFromDType(e,t){var n=null;if(null==e||"float32"===e)n=new Float32Array(t);else if("int32"===e)n=new Int32Array(t);else if("bool"===e)n=new Uint8Array(t);else{if("string"!==e)throw new Error("Unknown data type "+e);n=new Array(t);}return n}function checkComputationForErrors(e,t,n){if("float32"===t)for(var r=0;r=0;--r)n[r]=n[r+1]*e[r+1];return n}function toTypedArray(e,t,n){if("string"===t)throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=flatten(e)),n&&checkConversionForErrors(e,t),noConversionNeeded(e,t))return e;if(null==t||"float32"===t||"complex64"===t)return new Float32Array(e);if("int32"===t)return new Int32Array(e);if("bool"===t){for(var r=new Uint8Array(e.length),o=0;o=0,function(){return "Tensor must have a shape comprised of positive integers but got shape ["+e+"]."});});}var util=Object.freeze({shuffle:shuffle,clamp:clamp,nearestLargerEven:nearestLargerEven,sum:sum,randUniform:randUniform,distSquared:distSquared,assert:assert,assertShapesMatch:assertShapesMatch,assertNonNull:assertNonNull,flatten:flatten,sizeFromShape:sizeFromShape,isScalarShape:isScalarShape,arraysEqual:arraysEqual,isInt:isInt,tanh:tanh,sizeToSquarishShape:sizeToSquarishShape,createShuffledIndices:createShuffledIndices,rightPad:rightPad,repeatedTry:repeatedTry,inferFromImplicitShape:inferFromImplicitShape,parseAxisParam:parseAxisParam,squeezeShape:squeezeShape,getTypedArrayFromDType:getTypedArrayFromDType,getArrayFromDType:getArrayFromDType,checkComputationForErrors:checkComputationForErrors,checkConversionForErrors:checkConversionForErrors,hasEncodingLoss:hasEncodingLoss,isTypedArray:isTypedArray,bytesPerElement:bytesPerElement,bytesFromStringArray:bytesFromStringArray,isString:isString,isBoolean:isBoolean,isNumber:isNumber,inferDtype:inferDtype,isFunction:isFunction,nearestDivisor:nearestDivisor,computeStrides:computeStrides,toTypedArray:toTypedArray,toNestedArray:toNestedArray,makeOnesTypedArray:makeOnesTypedArray,makeZerosTypedArray:makeZerosTypedArray,now:now,assertNonNegativeIntegerDimensions:assertNonNegativeIntegerDimensions}),Profiler=function(){function e(e,t){this.backendTimer=e,this.logger=t,null==t&&(this.logger=new Logger);}return e.prototype.profileKernel=function(e,t){var n,r=this,o=this.backendTimer.time(function(){n=t();});return (Array.isArray(n)?n:[n]).forEach(function(t){var n=t.dataSync();checkComputationForErrors(n,t.dtype,e),o.then(function(o){var a="";null!=o.getExtraProfileInfo&&(a=o.getExtraProfileInfo()),r.logger.logKernelProfile(e,t,n,o.kernelMs,a);});}),n},e}(),Logger=function(){function e(){}return e.prototype.logKernelProfile=function(e,t,n,r,o){var a=rightPad(r+"ms",9),i=rightPad(e,25),s=t.rank,u=t.size,c=rightPad(t.shape.toString(),14);console.log("%c"+i+"\t%c"+a+"\t%c"+s+"D "+c+"\t%c"+u+"\t%c"+o,"font-weight:bold","color:red","color:blue","color: orange","color: green");},e}(),FORMAT_LIMIT_NUM_VALS=20,FORMAT_NUM_FIRST_LAST_VALS=3,FORMAT_NUM_SIG_DIGITS=7;function tensorToString(e,t,n,r){var o=computeStrides(t),a=computeMaxSizePerColumn(e,t,n,o),i=t.length,s=subTensorToString(e,t,n,o,a),u=["Tensor"];return r&&(u.push(" dtype: "+n),u.push(" rank: "+i),u.push(" shape: ["+t+"]"),u.push(" values:")),u.push(s.map(function(e){return " "+e}).join("\n")),u.join("\n")}function computeMaxSizePerColumn(e,t,n,r){var o=sizeFromShape(t),a=r[r.length-1],i=new Array(a).fill(0),s=t.length,u="complex64"===n?createComplexTuples(e):e;if(s>1)for(var c=0;cFORMAT_LIMIT_NUM_VALS){var c=FORMAT_NUM_FIRST_LAST_VALS*i,l=Array.from(e.slice(0,c)),p=Array.from(e.slice(s-FORMAT_NUM_FIRST_LAST_VALS*i,s));return "complex64"===n&&(l=createComplexTuples(l),p=createComplexTuples(p)),["["+l.map(function(e,t){return valToString(e,o[t],n)}).join(", ")+", ..., "+p.map(function(e,t){return valToString(e,o[s-FORMAT_NUM_FIRST_LAST_VALS+t],n)}).join(", ")+"]"]}return ["["+("complex64"===n?createComplexTuples(e):Array.from(e)).map(function(e,t){return valToString(e,o[t],n)}).join(", ")+"]"]}var d=t.slice(1),h=r.slice(1),f=r[0]*i,m=[];if(s>FORMAT_LIMIT_NUM_VALS){for(var g=0;g=this.shape[n]){var i="Requested out of range element at "+e+". Buffer shape="+this.shape;throw new Error(i)}n++;}for(var s=e[e.length-1],u=0;u=0;a--)for(i=(f=e[a]).inputs,l=0;l=0;o--)r(o);}!function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6";}(Rank||(Rank={})),function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64";}(UpcastInt32AndMap||(UpcastInt32AndMap={})),function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64";}(UpcastBoolAndMap||(UpcastBoolAndMap={})),function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64";}(UpcastFloat32AndMap||(UpcastFloat32AndMap={})),function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64";}(UpcastComplex64AndMap||(UpcastComplex64AndMap={}));var upcastTypeMap={float32:UpcastFloat32AndMap,int32:UpcastInt32AndMap,bool:UpcastBoolAndMap,complex64:UpcastComplex64AndMap};function upcastType(e,t){if("string"===e||"string"===t){if("string"===e&&"string"===t)return "string";throw new Error("Can not upcast "+e+" with "+t)}return upcastTypeMap[e][t]}function sumOutType(e){return upcastType(e,"int32")}function makeTypesMatch(e,t){if(e.dtype===t.dtype)return [e,t];var n=upcastType(e.dtype,t.dtype);return [e.cast(n),t.cast(n)]}function assertTypesMatch(e,t){assert(e.dtype===t.dtype,function(){return "The dtypes of the first("+e.dtype+") and second("+t.dtype+") input must match"});}function isTensorInList(e,t){for(var n=0;n0&&(e.unreliable=!0,null==e.reasons&&(e.reasons=[]),e.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),e},e.prototype.profile=function(e){return __awaiter(this,void 0,void 0,function(){var t,n;return __generator(this,function(r){return this.profiling=!0,t=this.numBytes,n=this.numTensors,this.activeProfile.kernels=[],this.activeProfile.result=e(),this.profiling=!1,this.activeProfile.peakBytes=Math.max.apply(Math,this.activeProfile.kernels.map(function(e){return e.totalBytesSnapshot})),this.activeProfile.newBytes=this.numBytes-t,this.activeProfile.newTensors=this.numTensors-n,[2,this.activeProfile]})})},e.prototype.isTapeOn=function(){return this.gradientDepth>0&&0===this.kernelDepth},e.prototype.addTapeNode=function(e,t,n){var r={};e.forEach(function(e,t){r[t]=e;});var o={id:this.nextTapeNodeId++,name:this.activeScope.name,inputs:r,outputs:[t],gradient:function(e){var t={};return n(e).forEach(function(e,n){t[n]=function(){return e};}),t}};this.activeTape.push(o);},e.prototype.keep=function(e){if(1===this.scopeStack.length&&this.safeMode)throw new Error("Safe mode is ON. Enclose all tensor operations inside tf.tidy(): tf.tidy(() => {...}) to avoid memory leaks.");return e.kept=!0,e},e.prototype.startTape=function(){0===this.gradientDepth&&(this.activeTape=[]),this.gradientDepth++;},e.prototype.endTape=function(){this.gradientDepth--;},e.prototype.startScope=function(e){var t={track:[],name:"unnamed scope",id:this.nextScopeId++};e&&(t.name=e),this.scopeStack.push(t),this.activeScope=t;},e.prototype.endScope=function(e){for(var t=this,n=getTensorsInContainer(e),r=new Set(n.map(function(e){return e.id})),o=0;o0,function(){return "gradients() received an empty list of xs."}),null!=n&&"float32"!==n.dtype)throw new Error("dy must have 'float32' dtype, but has '"+n.dtype+"'");var a=this.scopedRun(function(){return o.startTape()},function(){return o.endTape()},function(){return o.tidy("forward",e)});assert(a instanceof Tensor,function(){return "The result y returned by f() must be a tensor."});var i=getFilteredNodesXToY(this.activeTape,t,a);if(!r&&0===i.length&&t.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",function(){var e={};e[a.id]=null==n?ones(a.shape):n,backpropagateGradients(e,i,function(e){return o.tidy(e)});var r=t.map(function(t){return e[t.id]});return 0===o.gradientDepth&&(o.activeTape.forEach(function(e){for(var t in e.saved)e.saved[t].dispose();}),o.activeTape=null),{value:a,grads:r}})},e.prototype.customGrad=function(e){var t=this;return assert(isFunction(e),function(){return "The f passed in customGrad(f) must be a function."}),function(){for(var n,r=[],o=0;o {op();...}); to avoid memory leaks.");return null!=this.activeScope&&(e.scopeId=this.activeScope.id,this.activeScope.track.push(e)),e},e.nextTensorId=0,e.nextVariableId=0,e}();function ones(e){var t=makeOnesTypedArray(sizeFromShape(e),"float32");return Tensor.make(e,{values:t})}!function(e){e[e.NUMBER=0]="NUMBER",e[e.BOOLEAN=1]="BOOLEAN",e[e.STRING=2]="STRING";}(Type||(Type={}));var MAX_TEXTURE_SIZE,MAX_TEXTURES_IN_SHADER,URL_PROPERTIES=[{name:"DEBUG",type:Type.BOOLEAN},{name:"IS_BROWSER",type:Type.BOOLEAN},{name:"WEBGL_LAZILY_UNPACK",type:Type.BOOLEAN},{name:"WEBGL_CPU_FORWARD",type:Type.BOOLEAN},{name:"WEBGL_PACK",type:Type.BOOLEAN},{name:"WEBGL_PACK_BATCHNORMALIZATION",type:Type.BOOLEAN},{name:"WEBGL_PACK_CLIP",type:Type.BOOLEAN},{name:"WEBGL_PACK_DEPTHWISECONV",type:Type.BOOLEAN},{name:"WEBGL_PACK_BINARY_OPERATIONS",type:Type.BOOLEAN},{name:"WEBGL_PACK_ARRAY_OPERATIONS",type:Type.BOOLEAN},{name:"WEBGL_PACK_IMAGE_OPERATIONS",type:Type.BOOLEAN},{name:"WEBGL_PACK_REDUCE",type:Type.BOOLEAN},{name:"WEBGL_CONV_IM2COL",type:Type.BOOLEAN},{name:"WEBGL_MAX_TEXTURE_SIZE",type:Type.NUMBER},{name:"WEBGL_NUM_MB_BEFORE_PAGING",type:Type.NUMBER},{name:"WEBGL_MAX_TEXTURES_IN_SHADER",type:Type.NUMBER},{name:"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",type:Type.NUMBER},{name:"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",type:Type.BOOLEAN},{name:"WEBGL_VERSION",type:Type.NUMBER},{name:"WEBGL_RENDER_FLOAT32_ENABLED",type:Type.BOOLEAN},{name:"WEBGL_DOWNLOAD_FLOAT_ENABLED",type:Type.BOOLEAN},{name:"WEBGL_FENCE_API_ENABLED",type:Type.BOOLEAN},{name:"WEBGL_SIZE_UPLOAD_UNIFORM",type:Type.NUMBER},{name:"BACKEND",type:Type.STRING},{name:"EPSILON",type:Type.NUMBER},{name:"PROD",type:Type.BOOLEAN},{name:"TENSORLIKE_CHECK_SHAPE_CONSISTENCY",type:Type.BOOLEAN},{name:"DEPRECATION_WARNINGS_ENABLED",type:Type.BOOLEAN}];function isWebGLVersionEnabled(e){try{if(null!=getWebGLContext(e))return !0}catch(e){return !1}return !1}function getWebGLMaxTextureSize(e){if(null==MAX_TEXTURE_SIZE){var t=getWebGLContext(e);MAX_TEXTURE_SIZE=t.getParameter(t.MAX_TEXTURE_SIZE);}return MAX_TEXTURE_SIZE}function getMaxTexturesInShader(e){if(null==MAX_TEXTURES_IN_SHADER){var t=getWebGLContext(e);MAX_TEXTURES_IN_SHADER=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS);}return Math.min(16,MAX_TEXTURES_IN_SHADER)}function getWebGLDisjointQueryTimerVersion(e){if(0===e)return 0;var t=getWebGLContext(e);return hasExtension(t,"EXT_disjoint_timer_query_webgl2")&&2===e?2:hasExtension(t,"EXT_disjoint_timer_query")?1:0}function isRenderToFloatTextureEnabled(e){if(0===e)return !1;var t=getWebGLContext(e);if(1===e){if(!hasExtension(t,"OES_texture_float"))return !1}else if(!hasExtension(t,"EXT_color_buffer_float"))return !1;return createFloatTextureAndBindToFramebuffer(t,e)}function isDownloadFloatTextureEnabled(e){if(0===e)return !1;var t=getWebGLContext(e);if(1===e){if(!hasExtension(t,"OES_texture_float"))return !1;if(!hasExtension(t,"WEBGL_color_buffer_float"))return !1}else if(!hasExtension(t,"EXT_color_buffer_float"))return !1;return createFloatTextureAndBindToFramebuffer(t,e)}function isWebGLFenceEnabled(e){return 2===e&&null!=getWebGLContext(e).fenceSync}function isChrome(){return "undefined"!=typeof navigator&&null!=navigator&&null!=navigator.userAgent&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor)}var TENSORFLOWJS_FLAGS_PREFIX="tfjsflags";function getFeaturesFromURL(){var e={};if("undefined"==typeof window||void 0===window.location||void 0===window.location.search)return e;var t=getQueryParams(window.location.search);if(TENSORFLOWJS_FLAGS_PREFIX in t){var n={};t[TENSORFLOWJS_FLAGS_PREFIX].split(",").forEach(function(e){var t=e.split(":"),r=t[0],o=t[1];n[r]=o;}),URL_PROPERTIES.forEach(function(t){t.name in n&&(console.log("Setting feature override from URL "+t.name+": "+n[t.name]),t.type===Type.NUMBER?e[t.name]=+n[t.name]:t.type===Type.BOOLEAN?e[t.name]="true"===n[t.name]:t.type===Type.STRING?e[t.name]=n[t.name]:console.warn("Unknown URL param: "+t.name+"."));});}return e}function hasExtension(e,t){return null!=e.getExtension(t)}function createFloatTextureAndBindToFramebuffer(e,t){var n=e.createFramebuffer(),r=e.createTexture();e.bindTexture(e.TEXTURE_2D,r);var o=2===t?e.RGBA32F:e.RGBA;e.texImage2D(e.TEXTURE_2D,0,o,1,1,0,e.RGBA,e.FLOAT,null),e.bindFramebuffer(e.FRAMEBUFFER,n),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,r,0);var a=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(r),e.deleteFramebuffer(n),a}function getQueryParams(e){var t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,function(e){for(var n=[],r=1;r0&&!isMobile();if("HAS_WEBGL"===e)return this.get("WEBGL_VERSION")>0;if("WEBGL_VERSION"===e)return isWebGLVersionEnabled(2)?2:isWebGLVersionEnabled(1)?1:0;if("WEBGL_RENDER_FLOAT32_ENABLED"===e)return isRenderToFloatTextureEnabled(this.get("WEBGL_VERSION"));if("WEBGL_DOWNLOAD_FLOAT_ENABLED"===e)return isDownloadFloatTextureEnabled(this.get("WEBGL_VERSION"));if("WEBGL_FENCE_API_ENABLED"===e)return isWebGLFenceEnabled(this.get("WEBGL_VERSION"));if("WEBGL_SIZE_UPLOAD_UNIFORM"===e)return this.get("WEBGL_RENDER_FLOAT32_ENABLED")?4:0;if("TEST_EPSILON"===e)return 32===this.backend.floatPrecision()?TEST_EPSILON_FLOAT32:TEST_EPSILON_FLOAT16;if("EPSILON"===e)return 32===this.backend.floatPrecision()?EPSILON_FLOAT32:EPSILON_FLOAT16;if("PROD"===e)return !1;if("TENSORLIKE_CHECK_SHAPE_CONSISTENCY"===e)return !this.get("PROD");if("DEPRECATION_WARNINGS_ENABLED"===e)return !0;throw new Error("Unknown feature "+e+".")},e.prototype.setFeatures=function(e){this.features=Object.assign({},e);},e.prototype.reset=function(){this.features=getFeaturesFromURL(),null!=this.globalEngine&&(this.globalEngine=null);},Object.defineProperty(e.prototype,"backend",{get:function(){return this.engine.backend},enumerable:!0,configurable:!0}),e.prototype.findBackend=function(e){return e in this.registry?this.registry[e].backend:null},e.prototype.findBackendFactory=function(e){return e in this.registryFactory?this.registryFactory[e]:null},e.prototype.registerBackend=function(e,t,n){var r=this;if(void 0===n&&(n=1),e in this.registry)return console.warn(e+" backend was already registered. Reusing existing backend"),!1;try{var o=t();return o.setDataMover({moveData:function(e){return r.engine.moveData(e)}}),this.registry[e]={backend:o,priority:n},this.registryFactory[e]=t,!0}catch(t){return console.warn("Registration of backend "+e+" failed"),console.warn(t.stack||t.message),!1}},e.prototype.removeBackend=function(e){if(!(e in this.registry))throw new Error(e+" backend not found in registry");this.registry[e].backend.dispose(),delete this.registry[e];},Object.defineProperty(e.prototype,"engine",{get:function(){return this.initEngine(),this.globalEngine},enumerable:!0,configurable:!0}),e.prototype.initEngine=function(){var e=this;if(null==this.globalEngine){this.backendName=this.get("BACKEND");var t=this.findBackend(this.backendName);this.globalEngine=new Engine(t,!1,function(){return e.get("DEBUG")});}},Object.defineProperty(e.prototype,"global",{get:function(){return getGlobalNamespace()},enumerable:!0,configurable:!0}),e}();function getGlobalNamespace(){if(null==_global){var e=void 0;if("undefined"!=typeof window)e=window;else if("undefined"!=typeof global)e=global;else{if("undefined"==typeof process)throw new Error("Could not find a global object");e=process;}_global=e;}return _global}function getOrMakeEnvironment(){var e=getGlobalNamespace();return null==e.ENV&&(e.ENV=new Environment(getFeaturesFromURL())),setTensorTracker(function(){return e.ENV.engine}),e.ENV}function enableProdMode(){ENV.set("PROD",!0);}function enableDebugMode(){ENV.set("DEBUG",!0);}function disableDeprecationWarnings(){ENV.set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.");}function deprecationWarn(e){ENV.get("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().");}setDeprecationWarningFn(deprecationWarn);var ENV=getOrMakeEnvironment(),environment=Object.freeze({EPSILON_FLOAT16:EPSILON_FLOAT16,EPSILON_FLOAT32:EPSILON_FLOAT32,Environment:Environment,enableProdMode:enableProdMode,enableDebugMode:enableDebugMode,disableDeprecationWarnings:disableDeprecationWarnings,deprecationWarn:deprecationWarn,ENV:ENV});function inferShape(e){var t=e;if(isTypedArray(e))return [e.length];if(!Array.isArray(e))return [];for(var n=[];Array.isArray(t)||isTypedArray(t);)n.push(t.length),t=t[0];return Array.isArray(e)&&ENV.get("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&deepAssertShapeConsistency(e,n,[]),n}function deepAssertShapeConsistency(e,t,n){if(n=n||[],Array.isArray(e)||isTypedArray(e)){assert(t.length>0,function(){return "Element arr["+n.join("][")+"] should be a primitive, but is an array of "+e.length+" elements"}),assert(e.length===t[0],function(){return "Element arr["+n.join("][")+"] should have "+t[0]+" elements, but has "+e.length+" elements"});for(var r=t.slice(1),o=0;o=0&&(o=r),assertDtype(r,o,t,n),null==e||!isTypedArray(e)&&!Array.isArray(e)&&"number"!=typeof e&&"boolean"!=typeof e&&"string"!=typeof e){var a=null==e?"null":e.constructor.name;throw new Error("Argument '"+t+"' passed to '"+n+"' must be a Tensor or TensorLike, but got '"+a+"'")}var i=inferShape(e);isTypedArray(e)||Array.isArray(e)||(e=[e]);var s="string"!==o?toTypedArray(e,o,ENV.get("DEBUG")):flatten(e);return Tensor.make(i,{values:s},o)}function convertToTensorArray(e,t,n,r){if(void 0===r&&(r="numeric"),!Array.isArray(e))throw new Error("Argument "+t+" passed to "+n+" must be a `Tensor[]` or `TensorLike[]`");return e.map(function(e,r){return convertToTensor(e,t+"["+r+"]",n)},r)}function grad(e){return assert(isFunction(e),function(){return "The f passed in grad(f) must be a function"}),function(t,n){var r=convertToTensor(t,"x","tf.grad",null),o=null!=n?convertToTensor(n,"dy","tf.grad"):null;return ENV.engine.tidy(function(){var t=ENV.engine.gradients(function(){return e(r)},[r],o),n=t.value,a=t.grads;return null!=o&&assertShapesMatch(n.shape,o.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),checkGrads(a),a[0]})}}function grads(e){return assert(isFunction(e),function(){return "The f passed in grads(f) must be a function"}),function(t,n){assert(Array.isArray(t),function(){return "The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s"});var r=convertToTensorArray(t,"args","tf.grads",null),o=null!=n?convertToTensor(n,"dy","tf.grads"):null;return ENV.engine.tidy(function(){var t=ENV.engine.gradients(function(){return e.apply(void 0,r)},r,o),n=t.value,a=t.grads;return null!=o&&assertShapesMatch(n.shape,o.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),checkGrads(a),a})}}function valueAndGrad(e){return assert(isFunction(e),function(){return "The f passed in valueAndGrad(f) must be a function"}),function(t,n){assert(t instanceof Tensor,function(){return "The x passed in valueAndGrad(f)(x) must be a tensor"}),assert(null==n||n instanceof Tensor,function(){return "The dy passed in valueAndGrad(f)(x, dy) must be a tensor"});var r=ENV.engine.gradients(function(){return e(t)},[t],n),o=r.grads,a=r.value;return checkGrads(o),{grad:o[0],value:a}}}function valueAndGrads(e){return assert(isFunction(e),function(){return "The f passed in valueAndGrads(f) must be a function"}),function(t,n){assert(Array.isArray(t)&&t.every(function(e){return e instanceof Tensor}),function(){return "The args passed in valueAndGrads(f)(args) must be array of tensors"}),assert(null==n||n instanceof Tensor,function(){return "The dy passed in valueAndGrads(f)(args, dy) must be a tensor"});var r=ENV.engine.gradients(function(){return e.apply(void 0,t)},t,n);return null!=n&&assertShapesMatch(r.value.shape,n.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),checkGrads(r.grads),r}}function variableGrads(e,t){if(assert(isFunction(e),function(){return "The f passed in variableGrads(f) must be a function"}),assert(null==t||Array.isArray(t)&&t.every(function(e){return e instanceof Variable}),function(){return "The varList passed in variableGrads(f, varList) must be an array of variables"}),null==t)for(var n in t=[],ENV.engine.registeredVariables)t.push(ENV.engine.registeredVariables[n]);var r=t.length;assert((t=t.filter(function(e){return e.trainable})).length>0,function(){return "variableGrads() expects at least one of the input variables to be trainable, but none of the "+r+" variables is trainable."});var o=ENV.engine.gradients(e,t,null,!0),a=o.value,i=o.grads;assert(i.some(function(e){return null!=e}),function(){return "Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."}),assert(0===a.rank,function(){return "The f passed in variableGrads(f) must return a scalar, but it returned a rank-"+a.rank+" tensor"});var s={};return t.forEach(function(e,t){null!=i[t]&&(s[e.name]=i[t]);}),{value:a,grads:s}}function customGrad(e){return ENV.engine.customGrad(e)}function checkGrads(e){if(e.filter(function(e){return null==e}).length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that\n the f you passed encloses all operations that lead from x to y.")}var tidy=Environment.tidy,keep=Environment.keep,dispose=Environment.dispose,time=Environment.time,profile=Environment.profile;function warn(){for(var e=[],t=0;t=2*t+1||o%2==1?i.push(o):a.push(o);r.push.apply(r,a),r.push(0),r.push.apply(r,i);}return r}function getReshapedPermuted(e,t,n,r){void 0===r&&(r=!0);var o=[];r?o.push(e[0]/n):o.push(e[0]*n);for(var a=1;a=0&&te.rank)throw new Error("index innermost dimension length must be <= tensor rank; saw: "+t.shape[t.rank-1]+" vs. "+e.rank);if(0===e.size)throw new Error("Requested more than 0 entries, but input is empty. Input shape: "+e.shape+".");for(var n=t.shape,r=n[n.length-1],o=1,a=0;a1?t.shape[t.rank-1]:1,o=t.rank>1?t.rank-1:1,a="Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: "+n.shape+", indices.shape: "+t.shape+", shape: "+e+", sliceDim: "+r+", and batchDim: "+o+".";if(n.rank1?t.shape[t.rank-1]:1,o=n.length,a=1,i=r;it||n===e?r=!0:n=nearestDivisor(e,n+1);return n}function computeOutShape$1(e,t,n){for(var r=[],o=e.length,a=0;a0?a>=l[t]:a<=l[t]);a+=o)n+=1;return n}),[c,h,p]}function startForAxis(e,t,n,r,o){var a=t[o],i=n[o]||1;(e&1<0?Number.MIN_SAFE_INTEGER:Number.MAX_SAFE_INTEGER);var s=r[o];return a<0&&(a+=s),a=clamp(0,a,s-1)}function stopForAxis(e,t,n,r,o){var a=t[o],i=n[o]||1;(e&1<0?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER);var s=r[o];return a<0&&(a+=s),a=i>0?clamp(0,a,s):clamp(-1,a,s-1)}function isSliceContinous(e,t,n){for(var r=n.length,o=0;o1){r=o;break}for(o=r+1;o0||n[o]!==e[o])return !1;return !0}function computeFlatOffset(e,t){for(var n=e.length>0?e[e.length-1]:1,r=0;r1)return zeros([0],r);var o=makeZerosTypedArray(Math.abs(Math.ceil((t-e)/n)),r);to}).sort(function(e,t){return t.score-e.score}),i=[],s=0;s=0;--d){if(intersectionOverUnion(e,l,i[d])>=r){p=!0;break}}if(!p&&(i.push(l),i.length>=n))break}return tensor1d(i,"int32")}function intersectionOverUnion(e,t,n){var r=e.subarray(4*t,4*t+4),o=e.subarray(4*n,4*n+4),a=Math.min(r[0],r[2]),i=Math.min(r[1],r[3]),s=Math.max(r[0],r[2]),u=Math.max(r[1],r[3]),c=Math.min(o[0],o[2]),l=Math.min(o[1],o[3]),p=Math.max(o[0],o[2]),d=Math.max(o[1],o[3]),h=(s-a)*(u-i),f=(p-c)*(d-l);if(h<=0||f<=0)return 0;var m=Math.max(a,c),g=Math.max(i,l),v=Math.min(s,p),y=Math.min(u,d),x=Math.max(v-m,0)*Math.max(y-g,0);return x/(h+f-x)}function split(e,t,n){var r=new Array(e.rank).fill(0),o=e.shape.slice();return t.map(function(t){o[n]=t;var a=e.slice(r,o);return r[n]+=t,a})}function topkImpl(e,t,n,r,o){for(var a=t[t.length-1],i=[e.length/a,a],s=i[0],u=i[1],c=getTypedArrayFromDType(n,s*r),l=getTypedArrayFromDType("int32",s*r),p=0;p":"<",u=n?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * "+r+";\n\n int bestIndex = inOffset;\n float bestValue = getA(batch, bestIndex);\n\n for (int i = 0; i < "+r+"; i++) {\n int inIdx = "+u+";\n float candidate = getA(batch, inIdx);\n if (candidate "+s+" bestValue) {\n bestValue = candidate;\n bestIndex = inIdx;\n }\n }\n setOutput(float(bestIndex));\n }\n ";}}();function getVecChannels(e,t){return ["x","y","z","w","u","v"].slice(0,t).map(function(t){return e+"."+t})}function getChannels(e,t){return 1===t?[e]:getVecChannels(e,t)}function getSourceCoords(e,t){if(1===e)return "rc";for(var n="",r=0;r1&&1===i&&r.unshift(a);}return r}function getReductionAxes(e,t){for(var n=[],r=0;r1)&&n.unshift(a);}return n}function assertAndGetBroadcastShape(e,t){for(var n=[],r=Math.max(e.length,t.length),o=0;o1?"["+t+"]":"")+";"):(o.push("uniform sampler2D "+e.name+";"),o.push("uniform int offset"+e.name+";"));});var a,i,s=o.join("\n"),u=e.map(function(e){return getInputSamplingSnippet(e,t,r)}).join("\n"),c=t.texShape,l=getGlslDifferences(),p=getFloatTextureSampleSnippet(l),d=getShaderPrefix(l);return t.isPacked?(a=getPackedOutputSamplingSnippet(t.logicalShape,c),i=getFloatTextureSetRGBASnippet(l)):(a=getOutputSamplingSnippet(t.logicalShape,c),i=getFloatTextureSetRSnippet(l)),r&&(d+=SHADER_PACKED_PREFIX),[d,p,i,s,a,u,n].join("\n")}function getSamplerFromInInfo(e){var t=e.shapeInfo.logicalShape;switch(t.length){case 0:return getSamplerScalar(e);case 1:return getSampler1D(e);case 2:return getSampler2D(e);case 3:return getSampler3D(e);case 4:return getSampler4D(e);case 5:return getSampler5D(e);case 6:return getSampler6D(e);default:throw new Error(t.length+"-D input sampling is not yet supported")}}function getPackedSamplerFromInInfo(e){switch(e.shapeInfo.logicalShape.length){case 0:return getPackedSamplerScalar(e);case 1:return getPackedSampler1D(e);case 2:return getPackedSampler2D(e);case 3:return getPackedSampler3D(e);default:return getPackedSamplerND(e)}}function getInputSamplingSnippet(e,t,n){void 0===n&&(n=!1);var r="";r+=n?getPackedSamplerFromInInfo(e):getSamplerFromInInfo(e);var o=e.shapeInfo.logicalShape,a=t.logicalShape;return o.length<=a.length&&(r+=n?getPackedSamplerAtOutputCoords(e,t):getSamplerAtOutputCoords(e,t)),r}function getPackedOutputSamplingSnippet(e,t){switch(e.length){case 0:return getOutputScalarCoords();case 1:return getOutputPacked1DCoords(e,t);case 2:return getOutputPacked2DCoords(e,t);case 3:return getOutputPacked3DCoords(e,t);default:return getOutputPackedNDCoords(e,t)}}function getOutputSamplingSnippet(e,t){switch(e.length){case 0:return getOutputScalarCoords();case 1:return getOutput1DCoords(e,t);case 2:return getOutput2DCoords(e,t);case 3:return getOutput3DCoords(e,t);case 4:return getOutput4DCoords(e,t);case 5:return getOutput5DCoords(e,t);case 6:return getOutput6DCoords(e,t);default:throw new Error(e.length+"-D output sampling is not yet supported")}}function getFloatTextureSampleSnippet(e){return "\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return "+e.texture2D+"(textureSampler, uv).r;\n }\n "}function getFloatTextureSetRSnippet(e){return "\n void setOutput(float val) {\n "+e.output+" = vec4(val, 0, 0, 0);\n }\n "}function getFloatTextureSetRGBASnippet(e){return "\n void setOutput(vec4 val) {\n "+e.output+" = val;\n }\n "}function getShaderPrefix(e){return e.version+"\n precision highp float;\n precision highp int;\n precision highp sampler2D;\n "+e.varyingFs+" vec2 resultUV;\n "+e.defineOutput+"\n const vec2 halfCR = vec2(0.5, 0.5);\n\n struct ivec5\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n };\n\n struct ivec6\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n int v;\n };\n\n "+e.defineSpecialNaN+"\n "+e.defineSpecialInf+"\n "+e.defineRound+"\n\n int imod(int x, int y) {\n return x - y * (x / y);\n }\n\n //Based on the work of Dave Hoskins\n //https://www.shadertoy.com/view/4djSRW\n #define HASHSCALE1 443.8975\n float random(float seed){\n vec2 p = resultUV * seed;\n vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n }\n\n "+SAMPLE_1D_SNIPPET+"\n "+SAMPLE_2D_SNIPPET+"\n "+SAMPLE_3D_SNIPPET+"\n "}var SAMPLE_1D_SNIPPET="\nvec2 uvFromFlat(int texNumR, int texNumC, int index) {\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\nvec2 packedUVfrom1D(int texNumR, int texNumC, int index) {\n int texelIndex = index / 2;\n int texR = texelIndex / texNumC;\n int texC = texelIndex - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",SAMPLE_2D_SNIPPET="\nvec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR,\n int texNumC, int row, int col) {\n int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);\n int texR = texelIndex / texNumC;\n int texC = texelIndex - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",SAMPLE_3D_SNIPPET="\nvec2 packedUVfrom3D(int texNumR, int texNumC,\n int texelsInBatch, int texelsInLogicalRow, int b,\n int row, int col) {\n int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",SHADER_PACKED_PREFIX="\n float getChannel(vec4 frag, vec2 innerDims) {\n vec2 modCoord = mod(innerDims, 2.);\n return modCoord.x == 0. ?\n (modCoord.y == 0. ? frag.r : frag.g) :\n (modCoord.y == 0. ? frag.b : frag.a);\n }\n float getChannel(vec4 frag, int dim) {\n float modCoord = mod(float(dim), 2.);\n return modCoord == 0. ? frag.r : frag.g;\n }\n";function getOutputScalarCoords(){return "\n int getOutputCoords() {\n return 0;\n }\n "}function getOutputPacked1DCoords(e,t){var n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return 1===n[0]?"\n int getOutputCoords() {\n return 2 * int(resultUV.x * "+n[1]+".0);\n }\n ":1===n[1]?"\n int getOutputCoords() {\n return 2 * int(resultUV.y * "+n[0]+".0);\n }\n ":"\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+n[0]+", "+n[1]+"));\n return resTexRC.x * "+n[1]+" + resTexRC.y;\n }\n "}function getOutput1DCoords(e,t){return 1===t[0]?"\n int getOutputCoords() {\n return int(resultUV.x * "+t[1]+".0);\n }\n ":1===t[1]?"\n int getOutputCoords() {\n return int(resultUV.y * "+t[0]+".0);\n }\n ":"\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+t[0]+", "+t[1]+"));\n return resTexRC.x * "+t[1]+" + resTexRC.y;\n }\n "}function getOutputPacked3DCoords(e,t){var n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],r=Math.ceil(e[2]/2),o=r*Math.ceil(e[1]/2);return "\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+n[0]+", "+n[1]+"));\n int index = resTexRC.x * "+n[1]+" + resTexRC.y;\n\n int b = index / "+o+";\n index -= b * "+o+";\n\n int r = 2 * (index / "+r+");\n int c = imod(index, "+r+") * 2;\n\n return ivec3(b, r, c);\n }\n "}function getOutput3DCoords(e,t){var n=getLogicalCoordinatesFromFlatIndex(["r","c","d"],e);return "\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+t[0]+", "+t[1]+"));\n int index = resTexRC.x * "+t[1]+" + resTexRC.y;\n "+n+"\n return ivec3(r, c, d);\n }\n "}function getOutputPackedNDCoords(e,t){for(var n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],r=Math.ceil(e[e.length-1]/2),o=r*Math.ceil(e[e.length-2]/2),a=o,i="",s="b, r, c",u=2;u=1?"coords = 0;":u.map(function(e){return "coords."+p[e+l]+" = 0;"}).join("\n");var d="";d=s<2&&i>0?"coords":e.shapeInfo.logicalShape.map(function(e,t){return "coords."+p[t+l]}).join(", ");var h="return outputValue;";if(1===i&&s>1)h="\n return vec4(outputValue.xy, outputValue.xy);\n ";else if(0===i&&s>0)h=1===s?"\n return vec4(outputValue.x, outputValue.x, 0., 0.);\n ":"\n return vec4(outputValue.x);\n ";else if(u.length){var f=i-2,m=i-1;u.indexOf(f)>-1&&u.indexOf(m)>-1?h="return vec4(outputValue.x);":u.indexOf(f)>-1?h="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":u.indexOf(m)>-1&&(h="return vec4(outputValue.xx, outputValue.zz);");}return "\n vec4 "+a+"() {\n "+c+" coords = getOutputCoords();\n "+n+"\n vec4 outputValue = get"+o+"("+d+");\n "+h+"\n }\n "}function getSamplerAtOutputCoords(e,t){var n=e.name,r=n.charAt(0).toUpperCase()+n.slice(1),o="get"+r+"AtOutCoords",a=t.texShape,i=e.shapeInfo.texShape,s=e.shapeInfo.logicalShape.length,u=t.logicalShape.length;if(!e.shapeInfo.isUniform&&s===u&&null==e.shapeInfo.flatOffset&&arraysEqual(i,a))return "\n float "+o+"() {\n return sampleTexture("+n+", resultUV);\n }\n ";var c=getCoordsDataType(u),l=getBroadcastDims(e.shapeInfo.logicalShape,t.logicalShape),p=u-s,d=["x","y","z","w","u","v"];return "\n float "+o+"() {\n "+c+" coords = getOutputCoords();\n "+(0===s?"":u<2&&l.length>=1?"coords = 0;":l.map(function(e){return "coords."+d[e+p]+" = 0;"}).join("\n"))+"\n return get"+r+"("+(u<2&&s>0?"coords":e.shapeInfo.logicalShape.map(function(e,t){return "coords."+d[t+p]}).join(", "))+");\n }\n "}function getCoordsDataType(e){if(e<=1)return "int";if(2===e)return "ivec2";if(3===e)return "ivec3";if(4===e)return "ivec4";if(5===e)return "ivec5";if(6===e)return "ivec6";throw Error("GPU for rank "+e+" is not yet supported")}function squeezeInputInfo(e,t){var n=JSON.parse(JSON.stringify(e));return n.shapeInfo.logicalShape=t,n}function getSqueezedParams(e,t){return t.map(function(t){return e[t]}).join(", ")}var ArgMinMaxPackedProgram=function(){return function(e,t,n,r){this.variableNames=["A"],this.usesPackedTextures=!0,assert(e.length>2,function(){return "Packed arg"+(n.charAt(0).toUpperCase()+n.slice(1))+" supports only inputs with rank above 2."});var o=e[e.length-1],a=Math.ceil(o/t);this.outputShape=e.slice(0,-1),a>1&&this.outputShape.push(a),r||this.variableNames.push("bestIndicesA");var i,s,u=this.outputShape,c=u.length,l=getCoordsDataType(c),p=getChannels("coords",c);if(1===a){var d=getCoordsDataType(s=c+1);i="\n "+d+" sourceLocR = "+d+"("+p.join()+", 0);\n ++"+p[c-1]+";\n "+d+" sourceLocG = "+d+"("+p.join()+", 0);\n ++"+p[c-2]+";\n "+d+" sourceLocA = "+d+"("+p.join()+", 0);\n --"+p[c-1]+";\n "+d+" sourceLocB = "+d+"("+p.join()+", 0);\n --"+p[c-2]+";";}else s=c,i="\n "+l+" sourceLocR = coords;\n ++"+p[c-1]+";\n "+l+" sourceLocG = coords;\n ++"+p[c-2]+";\n "+l+" sourceLocA = coords;\n --"+p[c-1]+";\n "+l+" sourceLocB = coords;\n --"+p[c-2]+";";var h=["x","y","z","w","u","v"].slice(0,s),f="."+h[s-1],m=h.map(function(e){return "int "+e}),g=getChannels("sourceLocR",s-1).concat("inIdx.r"),v=getChannels("sourceLocG",s-1).concat("inIdx.g"),y=getChannels("sourceLocB",s-1).concat("inIdx.b"),x=getChannels("sourceLocA",s-1).concat("inIdx.a"),E="max"===n?"greaterThan":"lessThan",T=r?"":"\n inIdx = round(vec4(getBestIndicesAChannel("+g.join()+"),\n getBestIndicesAChannel("+v.join()+"),\n getBestIndicesAChannel("+y.join()+"),\n getBestIndicesAChannel("+x.join()+")));",b="vec4(\n getAChannel("+g.join()+"),\n hasNextCol ? getAChannel("+v.join()+") : 0.,\n hasNextRow ? getAChannel("+y.join()+") : 0.,\n hasNextRow && hasNextCol ? getAChannel("+x.join()+") : 0.)",w=r?"":"\n float getBestIndicesAChannel("+m.join()+") {\n return getChannel(getBestIndicesA("+h.join()+"),\n vec2("+h.slice(-2).join()+"));\n }";this.userCode="\n float getAChannel("+m.join()+") {\n return getChannel(getA("+h.join()+"),\n vec2("+h.slice(-2).join()+"));\n }\n "+w+"\n void main() {\n "+l+" coords = getOutputCoords();\n bool hasNextCol = "+p[c-1]+" < "+(u[c-1]-1)+";\n bool hasNextRow = "+p[c-2]+" < "+(u[c-2]-1)+";\n "+i+"\n ivec4 srcIdx = ivec4(sourceLocR"+f+", sourceLocG"+f+",\n sourceLocB"+f+", sourceLocA"+f+") * "+t+";\n ivec4 inIdx = srcIdx;\n vec4 bestIndex = vec4(inIdx);\n vec4 bestValue = "+b+";\n\n for (int i = 0; i < "+t+"; i++) {\n inIdx = srcIdx;\n "+T+"\n vec4 candidate = "+b+";\n bvec4 nan = isnan(candidate);\n bvec4 replace = bvec4(\n vec4("+E+"(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\n\n bestValue = vec4(replace.x ? candidate.x : bestValue.x,\n replace.y ? candidate.y : bestValue.y,\n replace.z ? candidate.z : bestValue.z,\n replace.w ? candidate.w : bestValue.w);\n bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\n srcIdx++;\n }\n setOutput(bestIndex);\n }\n ";}}(),AvgPool2DBackpropProgram=function(){return function(e){this.variableNames=["dy"],this.outputShape=e.inShape;var t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,o=e.strideWidth,a=e.dilationHeight,i=e.dilationWidth,s=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=s-1-e.padInfo.top,l=u-1-e.padInfo.left,p=1/(t*n);this.userCode="\n const ivec2 pads = ivec2("+c+", "+l+");\n const float avgMultiplier = float("+p+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+s+";\n wR += "+a+") {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+e.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+u+";\n wC+= "+i+") {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+e.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n setOutput(dotProd);\n }\n ";}}(),BatchNormProgram=function(){return function(e,t,n,r,o,a){this.outputShape=[],this.variableNames=["x","mean","variance"],assertAndGetBroadcastShape(e,t),assertAndGetBroadcastShape(e,n);var i="0.0";null!=r&&(assertAndGetBroadcastShape(e,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");var s="1.0";null!=o&&(assertAndGetBroadcastShape(e,o),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=e,this.userCode="\n void main() {\n float x = getXAtOutCoords();\n float mean = getMeanAtOutCoords();\n float variance = getVarianceAtOutCoords();\n float offset = "+i+";\n float scale = "+s+";\n float inv = scale * inversesqrt(variance + float("+a+"));\n setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n }\n ";}}(),BatchNormPackedProgram=function(){return function(e,t,n,r,o,a){this.usesPackedTextures=!0,this.variableNames=["x","mean","variance"],assertAndGetBroadcastShape(e,t),assertAndGetBroadcastShape(e,n);var i="vec4(0.0)";null!=r&&(assertAndGetBroadcastShape(e,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");var s="vec4(1.0)";null!=o&&(assertAndGetBroadcastShape(e,o),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=e,this.userCode="\n void main() {\n vec4 offset = "+i+";\n vec4 scale = "+s+";\n\n vec4 x = getXAtOutCoords();\n vec4 mean = getMeanAtOutCoords();\n vec4 variance = getVarianceAtOutCoords();\n\n vec4 inv = scale * inversesqrt(variance + vec4("+a+"));\n\n setOutput((x - mean) * inv + offset);\n }\n ";}}(),COMPLEX_MULTIPLY={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"},BinaryOpComplexProgram=function(){return function(e,t,n){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=assertAndGetBroadcastShape(t,n),this.userCode="\n float binaryOpComplex(\n float areal, float aimag, float breal, float bimag) {\n "+e+"\n }\n\n void main() {\n float areal = getARealAtOutCoords();\n float aimag = getAImagAtOutCoords();\n float breal = getBRealAtOutCoords();\n float bimag = getBImagAtOutCoords();\n setOutput(binaryOpComplex(areal, aimag, breal, bimag));\n }\n ";}}(),CHECK_NAN_SNIPPET="\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n",ADD="return a + b;",SUB="return a - b;",MUL="return a * b;",DIV="if (a == b) return 1.0;\n return a / b;",INT_DIV="\n float resultSign = sign(a) * sign(b);\n int ia = round(a);\n int ib = round(b);\n int result = ia / ib;\n int amodb = ia - ib * result;\n\n if (resultSign < 0.0 && amodb != 0) {\n result -= 1;\n }\n return float(result);\n",POW="\nif(a < 0.0 && floor(b) < b){\n return NAN;\n}\nreturn (round(mod(b, 2.0)) != 1) ?\n pow(abs(a), b) : sign(a) * pow(abs(a), b);\n",SQUARED_DIFFERENCE="return (a - b) * (a - b);",EQUAL="return float(a == b);",NOT_EQUAL="return float(a != b);",LESS="return float(a < b);",LESS_EQUAL="return float(a <= b);",GREATER="return float(a > b);",GREATER_EQUAL="return float(a >= b);",LOGICAL_AND="return float(a >= 1.0 && b >= 1.0);",LOGICAL_OR="return float(a >= 1.0 || b >= 1.0);",MAX=CHECK_NAN_SNIPPET+"\n return max(a, b);\n",MIN=CHECK_NAN_SNIPPET+"\n return min(a, b);\n",MOD="if (b == 0.0) return NAN;\n return mod(a, b);",ATAN2=CHECK_NAN_SNIPPET+"\n return atan(a, b);\n",ELU_DER="return (b >= 1.0) ? a : a * (b + 1.0);",PRELU="return (a < 0.) ? b * a : a;",BinaryOpProgram=function(){return function(e,t,n){this.variableNames=["A","B"],this.outputShape=assertAndGetBroadcastShape(t,n),this.userCode="\n float binaryOperation(float a, float b) {\n "+e+"\n }\n\n void main() {\n float a = getAAtOutCoords();\n float b = getBAtOutCoords();\n setOutput(binaryOperation(a, b));\n }\n ";}}(),CHECK_NAN_SNIPPET$1="\n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n",INT_DIV$1="\n vec4 resultSign = sign(a) * sign(b);\n ivec4 ia = round(a);\n ivec4 ib = round(b);\n ivec4 result = ia / ib;\n ivec4 amodb = ia - ib * result;\n\n // Vectorize INT_DIV\n // if (resultSign < 0.0 && amodb != 0) result -= 1;\n // return float(result);\n return vec4(result -\n ivec4(lessThan(resultSign, vec4(0.0))) * ivec4(notEqual(amodb, ivec4(0))));\n",POW$1="\n // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\n vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\n vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n vec4 result = multiplier * pow(abs(a), b);\n\n vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b));\n "+CHECK_NAN_SNIPPET$1+"\n return result;\n",PRELU$1="\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n",ELU_DER$1="\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n",ATAN2$1="\n vec4 result = atan(a, b);\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n "+CHECK_NAN_SNIPPET$1+"\n return result;\n",EQUAL$1="\n return vec4(equal(a, b));\n",NOT_EQUAL$1="\n return vec4(notEqual(a, b));\n",LESS$1="\n return vec4(lessThan(a, b));\n",LESS_EQUAL$1="\n return vec4(lessThanEqual(a, b));\n",GREATER$1="\n return vec4(greaterThan(a, b));\n",GREATER_EQUAL$1="\n return vec4(greaterThanEqual(a, b));\n",LOGICAL_AND$1="\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n",LOGICAL_OR$1="\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n",MAX$1="\n vec4 result = vec4(max(a, b));\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n "+CHECK_NAN_SNIPPET$1+"\n return result;\n",MIN$1="\n vec4 result = vec4(min(a, b));\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n "+CHECK_NAN_SNIPPET$1+"\n return result;\n",MOD$1="\n vec4 result = mod(a, b);\n vec4 isNaN = vec4(equal(b, vec4(0.0)));\n "+CHECK_NAN_SNIPPET$1+"\n return result;\n",BinaryOpPackedProgram=function(){return function(e,t,n){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.usesPackedTextures=!0,this.outputShape=assertAndGetBroadcastShape(t,n),this.userCode="\n vec4 binaryOperation(vec4 a, vec4 b) {\n "+e+"\n }\n\n void main() {\n vec4 a = getAAtOutCoords();\n vec4 b = getBAtOutCoords();\n setOutput(binaryOperation(a, b));\n }\n ";}}(),ClipProgram=function(){function e(e){this.variableNames=["A"],this.outputShape=e,this.userCode="\n uniform float min;\n uniform float max;\n\n void main() {\n float value = getAAtOutCoords();\n if (isnan(value)) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, min, max));\n }\n ";}return e.prototype.getCustomSetupFunc=function(e,t){var n=this;return function(r,o){null==n.minLoc&&(n.minLoc=r.getUniformLocationNoThrow(o,"min"),n.maxLoc=r.getUniformLocationNoThrow(o,"max")),r.gl.uniform1f(n.minLoc,e),r.gl.uniform1f(n.maxLoc,t);}},e}(),ClipPackedProgram=function(){function e(e){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=e,this.userCode="\n uniform float min;\n uniform float max;\n\n void main() {\n vec4 value = getAAtOutCoords();\n\n if (any(isnan(value))) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, vec4(min), vec4(max)));\n }\n ";}return e.prototype.getCustomSetupFunc=function(e,t){var n=this;return function(r,o){null==n.minLoc&&(n.minLoc=r.getUniformLocationNoThrow(o,"min"),n.maxLoc=r.getUniformLocationNoThrow(o,"max")),r.gl.uniform1f(n.minLoc,e),r.gl.uniform1f(n.maxLoc,t);}},e}(),ComplexAbsProgram=function(){return function(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode="\n void main() {\n float re = abs(getRealAtOutCoords());\n float im = abs(getImagAtOutCoords());\n float mx = max(re, im);\n\n // sadly the length function in glsl is not underflow-safe\n // (at least not on Intel GPUs). So the safe solution is\n // to ensure underflow-safety in all cases.\n setOutput(\n mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\n );\n }\n ";}}(),ConcatProgram=function(){return function(e){this.outputShape=[],this.outputShape=computeOutShape(e,1),this.variableNames=e.map(function(e,t){return "T"+t});var t=new Array(e.length-1);t[0]=e[0][1];for(var n=1;n= "+e.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+e.outWidth+"; yC++) {\n int xC = wC + yC * "+n+" - "+o+";\n\n if (xC < 0 || xC >= "+e.inWidth+") {\n continue;\n }\n\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n setOutput(dotProd);\n }\n ";}}(),Conv2DDerInputProgram=function(){return function(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;var t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,o=e.strideWidth,a=t-1-e.padInfo.top,i=n-1-e.padInfo.left;this.userCode="\n const ivec2 pads = ivec2("+a+", "+i+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n\n ivec2 dyCorner = coords.yz - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+t+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+e.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+t+" - 1 - wR;\n\n for (int wC = 0; wC < "+n+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+e.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+n+" - 1 - wC;\n\n for (int d2 = 0; d2 < "+e.outChannels+"; d2++) {\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutput(dotProd);\n }\n ";}}(),Conv3DDerFilterProgram=function(){return function(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;var t=e.strideDepth,n=e.strideHeight,r=e.strideWidth,o=e.padInfo.front,a=e.padInfo.top,i=e.padInfo.left;this.userCode="\n void main() {\n ivec5 coords = getOutputCoords();\n int wF = coords.x;\n int wR = coords.y;\n int wC = coords.z;\n int d1 = coords.w;\n int d2 = coords.u;\n\n float dotProd = 0.0;\n\n for (int b = 0; b < "+e.batchSize+"; b++) {\n for (int yF = 0; yF < "+e.outDepth+"; yF++) {\n int xF = wF + yF * "+t+" - "+o+";\n\n if (xF < 0 || xF >= "+e.inDepth+") {\n continue;\n }\n\n for (int yR = 0; yR < "+e.outHeight+"; yR++) {\n int xR = wR + yR * "+n+" - "+a+";\n\n if (xR < 0 || xR >= "+e.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+e.outWidth+"; yC++) {\n int xC = wC + yC * "+r+" - "+i+";\n\n if (xC < 0 || xC >= "+e.inWidth+") {\n continue;\n }\n\n float dyValue = getDy(b, yF, yR, yC, d2);\n float xValue = getX(b, xF, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n ";}}(),Conv3DDerInputProgram=function(){return function(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;var t=e.filterDepth,n=e.filterHeight,r=e.filterWidth,o=e.strideDepth,a=e.strideHeight,i=e.strideWidth,s=t-1-e.padInfo.front,u=n-1-e.padInfo.top,c=r-1-e.padInfo.left;this.userCode="\n const ivec3 pads = ivec3("+s+", "+u+", "+c+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d1 = coords.u;\n\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyFCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n float dotProd = 0.0;\n for (int wF = 0; wF < "+t+"; wF++) {\n float dyF = float(dyFCorner + wF) / "+o+".0;\n\n if (dyF < 0.0 || dyF >= "+e.outDepth+".0 || fract(dyF) > 0.0) {\n continue;\n }\n int idyF = int(dyF);\n\n int wFPerm = "+t+" - 1 - wF;\n\n for (int wR = 0; wR < "+n+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+a+".0;\n\n if (dyR < 0.0 || dyR >= "+e.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+n+" - 1 - wR;\n\n for (int wC = 0; wC < "+r+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+i+".0;\n\n if (dyC < 0.0 || dyC >= "+e.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+r+" - 1 - wC;\n\n for (int d2 = 0; d2 < "+e.outChannels+"; d2++) {\n float xValue = getDy(batch, idyF, idyR, idyC, d2);\n float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n }\n setOutput(dotProd);\n }\n ";}}(),DepthwiseConv2DDerFilterProgram=function(){return function(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;var t=e.strideHeight,n=e.strideWidth,r=e.padInfo.top,o=e.padInfo.left,a=e.outChannels/e.inChannels;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int dm = coords.w;\n int d2 = d1 * "+a+" + dm;\n\n float dotProd = 0.0;\n\n // TODO: Vec4 over the batch size\n for (int b = 0; b < "+e.batchSize+"; b++) {\n for (int yR = 0; yR < "+e.outHeight+"; yR++) {\n int xR = wR + yR * "+t+" - "+r+";\n\n if (xR < 0 || xR >= "+e.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+e.outWidth+"; yC++) {\n int xC = wC + yC * "+n+" - "+o+";\n\n if (xC < 0 || xC >= "+e.inWidth+") {\n continue;\n }\n\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n setOutput(dotProd);\n }\n ";}}(),DepthwiseConv2DDerInputProgram=function(){return function(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;var t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,o=e.strideWidth,a=t-1-e.padInfo.top,i=n-1-e.padInfo.left,s=e.outChannels/e.inChannels;this.userCode="\n const ivec2 pads = ivec2("+a+", "+i+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n ivec2 dyCorner = coords.yz - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n float dotProd = 0.0;\n\n for (int wR = 0; wR < "+t+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+e.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+t+" - 1 - wR;\n\n for (int wC = 0; wC < "+n+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+e.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+n+" - 1 - wC;\n\n // TODO: Vec4 over the channelMul\n for (int dm = 0; dm < "+s+"; dm++) {\n int d2 = d1 * "+s+" + dm;\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, dm);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutput(dotProd);\n }\n ";}}(),Conv2DProgram=function(){return function(e){this.variableNames=["x","W"],this.outputShape=e.outShape;var t=e.padInfo.top,n=e.padInfo.left,r=e.strideHeight,o=e.strideWidth,a=e.dilationHeight,i=e.dilationWidth,s=e.filterHeight,u=e.filterWidth,c=4*Math.floor(e.inChannels/4),l=e.inChannels%4;this.userCode="\n const ivec2 strides = ivec2("+r+", "+o+");\n const ivec2 pads = ivec2("+t+", "+n+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d2 = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+s+"; wR++) {\n int xR = xRCorner + wR * "+a+";\n\n if (xR < 0 || xR >= "+e.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+u+"; wC++) {\n int xC = xCCorner + wC * "+i+";\n\n if (xC < 0 || xC >= "+e.inWidth+") {\n continue;\n }\n\n for (int d1 = 0; d1 < "+c+"; d1 += 4) {\n vec4 xValues = vec4(\n getX(batch, xR, xC, d1),\n getX(batch, xR, xC, d1 + 1),\n getX(batch, xR, xC, d1 + 2),\n getX(batch, xR, xC, d1 + 3)\n );\n vec4 wValues = vec4(\n getW(wR, wC, d1, d2),\n getW(wR, wC, d1 + 1, d2),\n getW(wR, wC, d1 + 2, d2),\n getW(wR, wC, d1 + 3, d2)\n );\n\n dotProd += dot(xValues, wValues);\n }\n\n if ("+(1===l)+") {\n dotProd +=\n getX(batch, xR, xC, "+c+") *\n getW(wR, wC, "+c+", d2);\n } else if ("+(2===l)+") {\n vec2 xValues = vec2(\n getX(batch, xR, xC, "+c+"),\n getX(batch, xR, xC, "+c+" + 1)\n );\n vec2 wValues = vec2(\n getW(wR, wC, "+c+", d2),\n getW(wR, wC, "+c+" + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if ("+(3===l)+") {\n vec3 xValues = vec3(\n getX(batch, xR, xC, "+c+"),\n getX(batch, xR, xC, "+c+" + 1),\n getX(batch, xR, xC, "+c+" + 2)\n );\n vec3 wValues = vec3(\n getW(wR, wC, "+c+", d2),\n getW(wR, wC, "+c+" + 1, d2),\n getW(wR, wC, "+c+" + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n setOutput(dotProd);\n }\n ";}}(),Conv3DProgram=function(){return function(e){this.variableNames=["x","W"],this.outputShape=e.outShape;var t=e.padInfo.front,n=e.padInfo.top,r=e.padInfo.left,o=e.strideDepth,a=e.strideHeight,i=e.strideWidth,s=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,l=e.filterDepth,p=e.filterHeight,d=e.filterWidth,h=4*Math.floor(e.inChannels/4),f=e.inChannels%4;this.userCode="\n const ivec3 strides = ivec3("+o+", "+a+", "+i+");\n const ivec3 pads = ivec3("+t+", "+n+", "+r+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d2 = coords.u;\n\n ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xFCorner = xFRCCorner.x;\n int xRCorner = xFRCCorner.y;\n int xCCorner = xFRCCorner.z;\n\n // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\n // y(yF, yR, yC, d2). ? = to be determined. : = across all\n // values in that axis.\n float dotProd = 0.0;\n for (int wF = 0; wF < "+l+"; wF++) {\n int xF = xFCorner + wF * "+s+";\n\n if (xF < 0 || xF >= "+e.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+p+"; wR++) {\n int xR = xRCorner + wR * "+u+";\n\n if (xR < 0 || xR >= "+e.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+d+"; wC++) {\n int xC = xCCorner + wC * "+c+";\n\n if (xC < 0 || xC >= "+e.inWidth+") {\n continue;\n }\n\n for (int d1 = 0; d1 < "+h+"; d1 += 4) {\n vec4 xValues = vec4(\n getX(batch, xF, xR, xC, d1),\n getX(batch, xF, xR, xC, d1 + 1),\n getX(batch, xF, xR, xC, d1 + 2),\n getX(batch, xF, xR, xC, d1 + 3)\n );\n vec4 wValues = vec4(\n getW(wF, wR, wC, d1, d2),\n getW(wF, wR, wC, d1 + 1, d2),\n getW(wF, wR, wC, d1 + 2, d2),\n getW(wF, wR, wC, d1 + 3, d2)\n );\n\n dotProd += dot(xValues, wValues);\n }\n\n if ("+(1===f)+") {\n dotProd +=\n getX(batch, xF, xR, xC, "+h+") *\n getW(wF, wR, wC, "+h+", d2);\n } else if ("+(2===f)+") {\n vec2 xValues = vec2(\n getX(batch, xF, xR, xC, "+h+"),\n getX(batch, xF, xR, xC, "+h+" + 1)\n );\n vec2 wValues = vec2(\n getW(wF, wR, wC, "+h+", d2),\n getW(wF, wR, wC, "+h+" + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if ("+(3===f)+") {\n vec3 xValues = vec3(\n getX(batch, xF, xR, xC, "+h+"),\n getX(batch, xF, xR, xC, "+h+" + 1),\n getX(batch, xF, xR, xC, "+h+" + 2)\n );\n vec3 wValues = vec3(\n getW(wF, wR, wC, "+h+", d2),\n getW(wF, wR, wC, "+h+" + 1, d2),\n getW(wF, wR, wC, "+h+" + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n ";}}(),DepthwiseConv2DProgram=function(){return function(e){this.variableNames=["x","W"],this.outputShape=e.outShape;var t=e.inHeight,n=e.inWidth,r=e.padInfo.top,o=e.padInfo.left,a=e.strideHeight,i=e.strideWidth,s=e.dilationHeight,u=e.dilationWidth,c=e.filterHeight,l=e.filterWidth,p=e.outChannels/e.inChannels;this.userCode="\n const ivec2 strides = ivec2("+a+", "+i+");\n const ivec2 pads = ivec2("+r+", "+o+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n ivec2 xRCCorner = coords.yz * strides - pads;\n int d2 = coords.w;\n int d1 = d2 / "+p+";\n int q = d2 - d1 * "+p+";\n\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n // TODO(dsmilkov): Flatten the two for loops and vec4 the operations.\n for (int wR = 0; wR < "+c+"; wR++) {\n int xR = xRCorner + wR * "+s+";\n\n if (xR < 0 || xR >= "+t+") {\n continue;\n }\n\n for (int wC = 0; wC < "+l+"; wC++) {\n int xC = xCCorner + wC * "+u+";\n\n if (xC < 0 || xC >= "+n+") {\n continue;\n }\n\n float xVal = getX(batch, xR, xC, d1);\n float wVal = getW(wR, wC, d1, q);\n dotProd += xVal * wVal;\n }\n }\n setOutput(dotProd);\n }\n ";}}(),DepthwiseConvPacked2DProgram=function(){return function(e){this.variableNames=["x","W"],this.usesPackedTextures=!0,this.outputShape=e.outShape;for(var t=e.inHeight,n=e.inWidth,r=e.padInfo.top,o=e.padInfo.left,a=e.strideHeight,i=e.strideWidth,s=e.dilationHeight,u=e.dilationWidth,c=e.filterHeight,l=e.filterWidth,p=l,d="int xR; int xC; int xCOffset;",h=0;h= 0 && xR < "+t+" && xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+h+"C"+f+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+h+"C"+f+" = vec4(0.);\n }\n\n xCOffset = xC + 1 - 2;\n if(xR >= 0 && xR < "+t+" && xCOffset >= 0 && xCOffset < "+n+") {\n vec4 previous = getX(batch, xR, xCOffset, d1);\n xR"+h+"C"+f+" = vec4(previous.zw, xTexelR"+h+"C"+f+".xy);\n } else {\n xR"+h+"C"+f+" = vec4(0, 0, xTexelR"+h+"C"+f+".xy);\n }\n ":"\n if(xR >= 0 && xR < "+t+" && xC >= 0 && xC < "+n+") {\n xTexelR"+h+"C"+f+" = getX(batch, xR, xC, d1);\n } else {\n xTexelR"+h+"C"+f+" = vec4(0.);\n }\n\n xR"+h+"C"+f+" = xTexelR"+h+"C"+f+";\n ",f+1= 0 && xR < "+t+" &&\n xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+h+"C"+(f+2)+" = getX(batch, xR, xCOffset, d1);\n }\n ",u>1&&(d+="\n xCOffset -= 2;\n if(xR >= 0 && xR < "+t+" &&\n xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+h+"C"+f+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+h+"C"+f+" = vec4(0.);\n }\n "),d+="\n xR"+h+"C"+(f+1)+" = vec4(\n xTexelR"+h+"C"+f+".zw, xTexelR"+h+"C"+(f+2)+".xy);\n "):d+="\n xCOffset = xC + "+g+";\n\n if(xR >= 0 && xR < "+t+" &&\n xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+h+"C"+(f+2)+" = getX(batch, xR, xCOffset, d1);\n }\n\n xR"+h+"C"+(f+1)+" = xTexelR"+h+"C"+(f+2)+";\n ";}}else f= 0 && xR < "+t+") {\n ",o%2==1?(d+="\n xCOffset = xC + 1 - "+i+";\n if(xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+h+"C"+f+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+h+"C"+f+" = vec4(0.);\n }\n\n if(xC + 1 >= 0 && xC + 1 < "+n+") {\n xTexelR"+h+"C"+(f+2)+" = getX(batch, xR, xC + 1, d1);\n } else {\n xTexelR"+h+"C"+(f+2)+" = vec4(0.);\n }\n\n xR"+h+"C"+f+" = vec4(\n xTexelR"+h+"C"+f+".zw, xTexelR"+h+"C"+(f+2)+".zw);\n ",f+1= 0 && xCOffset < "+n+") {\n final = getX(batch, xR, xCOffset, d1);\n }\n xR"+h+"C"+(f+1)+" = vec4(xTexelR"+h+"C"+(f+2)+".xy, final.xy);\n ")):(d+="\n if(xC >= 0 && xC < "+n+") {\n xTexelR"+h+"C"+f+" = getX(batch, xR, xC, d1);\n } else {\n xTexelR"+h+"C"+f+" = vec4(0.);\n }\n\n xCOffset = xC + "+i+";\n if(xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+h+"C"+(f+2)+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+h+"C"+(f+2)+" = vec4(0.);\n }\n\n xR"+h+"C"+f+" = vec4(\n xTexelR"+h+"C"+f+".xy, xTexelR"+h+"C"+(f+2)+".xy);\n ",f+11?[""+(i-1)/(l-1),"(y2-y1) * height_ratio","y1*"+f+" + float(y)*(height_scale)"]:["0.0","0.0","0.5 * (y1+y2) * "+f],v=g[0],y=g[1],x=g[2],E=p>1?[""+(s-1)/(p-1),"(x2-x1) * width_ratio","x1*"+m+" + float(x)*(width_scale)"]:["0.0","0.0","0.5 * (x1+x2) * "+m],T=E[0],b=E[1],w=E[2];this.userCode="\n const float height_ratio = float("+v+");\n const float width_ratio = float("+T+");\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int y = coords[1];\n int x = coords[2];\n int d = coords[3];\n\n // get box vals\n float y1 = getBoxes(b,0);\n float x1 = getBoxes(b,1);\n float y2 = getBoxes(b,2);\n float x2 = getBoxes(b,3);\n\n // get image in batch index\n int bInd = round(getBoxInd(b));\n if(bInd < 0 || bInd >= "+a+") {\n return;\n }\n\n float height_scale = "+y+";\n float width_scale = "+b+";\n\n float in_y = "+x+";\n if( in_y < 0.0 || in_y > "+f+" ) {\n setOutput(float("+o+"));\n return;\n }\n float in_x = "+w+";\n if( in_x < 0.0 || in_x > "+m+" ) {\n setOutput(float("+o+"));\n return;\n }\n\n vec2 sourceFracIndexCR = vec2(in_x,in_y);\n if("+d+" == 1) {\n // Compute the four integer indices.\n ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\n ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\n\n float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\n float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\n float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\n float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\n\n vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n\n float top = topLeft + (topRight - topLeft) * fracCR.x;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n float newValue = top + (bottom - top) * fracCR.y;\n setOutput(newValue);\n } else {\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestCR = ivec2(floor(\n sourceFracIndexCR + vec2(0.5,0.5)));\n float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\n setOutput(newValue);\n }\n }\n ";}}(),CumSumProgram=function(){return function(e,t,n){this.variableNames=["x"],this.outputShape=e;var r=e.length,o=e[e.length-1],a=n?"<":">";this.userCode="\n int getIndex(int i) {\n "+(n?"return "+o+" -i - 1;":"return i;")+"\n }\n\n void main() {\n "+getCoordsDataType(r)+" coords = getOutputCoords();\n int end = "+getFinalCoord(r,"coords")+";\n float val = 0.0;\n for (int i = "+o+" - 1; i >= 0; i -= 1) {\n int idx = getIndex(i);\n if (idx "+a+" end) {\n continue;\n }\n if (idx == end && "+t+") {\n continue;\n }\n "+getFinalCoord(r,"coords")+" = idx;\n val += getX("+getCoords(r,"coords")+");\n }\n setOutput(val);\n }\n ";}}();function getCoords(e,t){if(1===e)return ""+t;if(2===e)return t+".x, "+t+".y";if(3===e)return t+".x, "+t+".y, "+t+".z";if(4===e)return t+".x, "+t+".y, "+t+".z, "+t+".w";throw Error("Cumulative sum for rank "+e+" is not yet supported")}function getFinalCoord(e,t){if(1===e)return ""+t;if(2===e)return t+".y";if(3===e)return t+".z";if(4===e)return t+".w";throw Error("Cumulative sum for rank "+e+" is not yet supported")}var DepthToSpaceProgram=function(){function e(e,t,n){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=n,this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int h = "+this.getHeightCoordString()+";\n int w = "+this.getWidthCoordString()+";\n int d = "+this.getDepthCoordString()+";\n\n int in_h = h / "+t+";\n int offset_h = imod(h, "+t+");\n int in_w = w / "+t+";\n int offset_w = imod(w, "+t+");\n int offset_d = (offset_h * "+t+" + offset_w) *\n "+this.getOutputDepthSize()+";\n int in_d = d + offset_d;\n\n float result = "+this.getInputSamplingString()+";\n setOutput(result);\n }\n ";}return e.prototype.getHeightCoordString=function(){return "NHWC"===this.dataFormat?"coords[1]":"coords[2]"},e.prototype.getWidthCoordString=function(){return "NHWC"===this.dataFormat?"coords[2]":"coords[3]"},e.prototype.getDepthCoordString=function(){return "NHWC"===this.dataFormat?"coords[3]":"coords[1]"},e.prototype.getOutputDepthSize=function(){return "NHWC"===this.dataFormat?this.outputShape[3]:this.outputShape[1]},e.prototype.getInputSamplingString=function(){return "NHWC"===this.dataFormat?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"},e}(),EncodeFloatProgram=function(){return function(e){this.variableNames=["A"];var t=getGlslDifferences();this.outputShape=e,this.userCode="\n const float FLOAT_MAX = 1.70141184e38;\n const float FLOAT_MIN = 1.17549435e-38;\n\n lowp vec4 encode_float(highp float v) {\n if (isnan(v)) {\n return vec4(255, 255, 255, 255);\n }\n\n highp float av = abs(v);\n\n if(av < FLOAT_MIN) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n } else if(v > FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\n } else if(v < -FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;\n }\n\n highp vec4 c = vec4(0,0,0,0);\n\n highp float e = floor(log2(av));\n highp float m = exp2(fract(log2(av))) - 1.0;\n\n c[2] = floor(128.0 * m);\n m -= c[2] / 128.0;\n c[1] = floor(32768.0 * m);\n m -= c[1] / 32768.0;\n c[0] = floor(8388608.0 * m);\n\n highp float ebias = e + 127.0;\n c[3] = floor(ebias / 2.0);\n ebias -= c[3] * 2.0;\n c[2] += floor(ebias) * 128.0;\n\n c[3] += 128.0 * step(0.0, -v);\n\n return c / 255.0;\n }\n\n void main() {\n float x = getAAtOutCoords();\n "+t.output+" = encode_float(x);\n }\n ";}}(),COMPLEX_FFT={REAL:"return real * expR - imag * expI;",IMAG:"return real * expI + imag * expR;"},FFTProgram=function(){return function(e,t,n){this.variableNames=["real","imag"];var r=t[1];this.outputShape=t;var o=n?"2.0 * "+Math.PI:"-2.0 * "+Math.PI,a=n?r+".0":"1.0";this.userCode="\n const float exponentMultiplier = "+o+";\n\n float unaryOpComplex(float real, float expR, float imag, float expI) {\n "+e+"\n }\n\n float mulMatDFT(int batch, int index) {\n float indexRatio = float(index) / float("+r+");\n float exponentMultiplierTimesIndexRatio =\n exponentMultiplier * indexRatio;\n\n float result = 0.0;\n\n for (int i = 0; i < "+r+"; i++) {\n // x = (-2|2 * PI / N) * index * i;\n float x = exponentMultiplierTimesIndexRatio * float(i);\n float expR = cos(x);\n float expI = sin(x);\n float real = getReal(batch, i);\n float imag = getImag(batch, i);\n\n result +=\n unaryOpComplex(real, expR, imag, expI) / "+a+";\n }\n\n return result;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n setOutput(mulMatDFT(coords[0], coords[1]));\n }\n ";}}(),FillProgram=function(){function e(e,t){this.outputShape=[],this.variableNames=["x"],this.outputShape=e,this.userCode="\n uniform float value;\n void main() {\n // Input can be obtained from uniform value.\n setOutput(value);\n }\n ";}return e.prototype.getCustomSetupFunc=function(e){var t=this;return function(n,r){null==t.valueLoc&&(t.valueLoc=n.getUniformLocationNoThrow(r,"value")),n.gl.uniform1f(t.valueLoc,e);}},e}(),FromPixelsProgram=function(){return function(e){this.variableNames=["A"];var t=getGlslDifferences(),n=e[0],r=e[1];this.outputShape=e,this.userCode="\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+r+".0, "+n+".0);\n\n vec4 values = "+t.texture2D+"(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n setOutput(floor(value * 255.0 + 0.5));\n }\n ";}}(),GatherProgram=function(){return function(e,t,n){this.variableNames=["A","indices"];var r=e.slice();r[n]=t,this.outputShape=r,this.rank=r.length;var o=getCoordsDataType(this.rank),a=getSourceCoords$1(e,n);this.userCode="\n void main() {\n "+o+" resRC = getOutputCoords();\n setOutput(getA("+a+"));\n }\n ";}}();function getSourceCoords$1(e,t){var n=e.length;if(n>4)throw Error("Gather for rank "+n+" is not yet supported");if(1===n)return "int(getIndices(resRC))";for(var r=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],a=0;a1?"strides[j]":"strides";this.userCode="\n "+r+" strides = "+r+"("+this.strides+");\n void main() {\n "+o+" coords = getOutputCoords();\n int flattenIndex = 0;\n for (int j = 0; j < "+this.sliceDim+"; j++) {\n int index = round(getIndices(coords[0], j));\n flattenIndex += index * "+a+";\n }\n setOutput(getX(flattenIndex, coords[1]));\n }\n ";}}();function getUnpackedMatrixTextureShapeWidthHeight(e,t){return [t,e]}function getUnpackedArraySizeFromMatrixSize(e,t){return e*t}function getMatrixSizeFromUnpackedArraySize(e,t){if(e%t!=0)throw new Error("unpackedSize ("+e+") must be a multiple of "+t);return e/t}function encodeMatrixToUnpackedArray(e,t,n){var r=getUnpackedArraySizeFromMatrixSize(e.length,n);if(t.length= "+r);for(var o=0,a=0;a= "+r);for(var o=0,a=0;a= "+a);for(var i=r%2==1,s=n%2==1,u=Math.floor(r/2),c=Math.floor(n/2),l=Math.ceil(r/2),p=l*Math.ceil(n/2),d=nearestLargerEven(n)*nearestLargerEven(r),h=0;hn||t>n){r="["+e+"x"+t+"]";throw new Error("Requested texture size "+r+" greater than WebGL maximum on this browser / GPU "+("["+n+"x"+n+"]")+".")}}function createFramebuffer(e,t){return throwIfNull(e,t,function(){return e.createFramebuffer()},"Unable to create WebGLFramebuffer.")}function bindVertexBufferToProgramAttribute(e,t,n,r,o,a,i,s){var u=e.getAttribLocation(n,r);return -1!==u&&(callAndCheck(e,t,function(){return e.bindBuffer(e.ARRAY_BUFFER,o)}),callAndCheck(e,t,function(){return e.vertexAttribPointer(u,a,e.FLOAT,!1,i,s)}),callAndCheck(e,t,function(){return e.enableVertexAttribArray(u)}),!0)}function bindTextureUnit(e,t,n,r){validateTextureUnit(e,r),callAndCheck(e,t,function(){return e.activeTexture(e.TEXTURE0+r)}),callAndCheck(e,t,function(){return e.bindTexture(e.TEXTURE_2D,n)});}function unbindTextureUnit(e,t,n){validateTextureUnit(e,n),callAndCheck(e,t,function(){return e.activeTexture(e.TEXTURE0+n)}),callAndCheck(e,t,function(){return e.bindTexture(e.TEXTURE_2D,null)});}function getProgramUniformLocationOrThrow(e,t,n,r){return throwIfNull(e,t,function(){return e.getUniformLocation(n,r)},'uniform "'+r+'" not present in program.')}function getProgramUniformLocation(e,t,n){return e.getUniformLocation(t,n)}function bindTextureToProgramUniformSampler(e,t,n,r,o,a){callAndCheck(e,t,function(){return bindTextureUnit(e,t,r,a)}),callAndCheck(e,t,function(){return e.uniform1i(o,a)});}function bindCanvasToFramebuffer(e,t){callAndCheck(e,t,function(){return e.bindFramebuffer(e.FRAMEBUFFER,null)}),callAndCheck(e,t,function(){return e.viewport(0,0,e.canvas.width,e.canvas.height)}),callAndCheck(e,t,function(){return e.scissor(0,0,e.canvas.width,e.canvas.height)});}function bindColorTextureToFramebuffer(e,t,n,r){callAndCheck(e,t,function(){return e.bindFramebuffer(e.FRAMEBUFFER,r)}),callAndCheck(e,t,function(){return e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0)});}function unbindColorTextureFromFramebuffer(e,t,n){callAndCheck(e,t,function(){return e.bindFramebuffer(e.FRAMEBUFFER,n)}),callAndCheck(e,t,function(){return e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0)});}function validateFramebuffer(e){var t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+getFramebufferErrorMessage(e,t))}function getFramebufferErrorMessage(e,t){switch(t){case e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return "FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return "FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case e.FRAMEBUFFER_UNSUPPORTED:return "FRAMEBUFFER_UNSUPPORTED";default:return "unknown error "+t}}function throwIfNull(e,t,n,r){var o=callAndCheck(e,t,function(){return n()});if(null==o)throw new Error(r);return o}function validateTextureUnit(e,t){var n=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=t+e.TEXTURE0;if(rn)throw new Error("textureUnit must be in "+("[gl.TEXTURE0, gl.TEXTURE"+n+"]")+".")}function getBatchDim(e,t){return void 0===t&&(t=2),sizeFromShape(e.slice(0,e.length-t))}function getRowsCols(e){if(0===e.length)throw Error("Cannot get rows and columns of an empty shape array.");return [e.length>1?e[e.length-2]:1,e[e.length-1]]}function getTextureShapeFromLogicalShape(e,t){var n;void 0===t&&(t=!1);var r=ENV.get("WEBGL_MAX_TEXTURE_SIZE");if(t&&(r*=2,1===(e=e.map(function(t,n){return n>=e.length-2?nearestLargerEven(e[n]):e[n]})).length&&(e=[2,e[0]])),2!==e.length){var o=squeezeShape(e);e=o.newShape;}var a=sizeFromShape(e);if(e.length<=1&&a<=r)return [1,a];if(2===e.length&&e[0]<=r&&e[1]<=r)return e;if(3===e.length&&e[0]*e[1]<=r&&e[2]<=r)return [e[0]*e[1],e[2]];if(3===e.length&&e[0]<=r&&e[1]*e[2]<=r)return [e[0],e[1]*e[2]];if(4===e.length&&e[0]*e[1]*e[2]<=r&&e[3]<=r)return [e[0]*e[1]*e[2],e[3]];if(4===e.length&&e[0]<=r&&e[1]*e[2]*e[3]<=r)return [e[0],e[1]*e[2]*e[3]];if(t){var i=getBatchDim(e),s=2,u=2;return e.length&&(s=(n=getRowsCols(e))[0],u=n[1]),sizeToSquarishShape(a=i*(s/2)*(u/2)).map(function(e){return 2*e})}return sizeToSquarishShape(a)}function isEven(e){return e%2==0}function isReshapeFree(e,t){if(arraysEqual(e=e.slice(-2),t=t.slice(-2)))return !0;if(!e.length||!t.length)return !0;if(0===e[0]||0===e[1]||0===t[0]||0===t[1])return !0;if(e.length!==t.length){var n=e.slice(-1)[0],r=t.slice(-1)[0];if(n===r)return !0;if(isEven(n)&&isEven(r)&&(1===e[0]||1===t[0]))return !0}return e[1]===t[1]&&isEven(e[0])&&isEven(t[0])}var webgl_util=Object.freeze({callAndCheck:callAndCheck,canBeRepresented:canBeRepresented,getWebGLErrorMessage:getWebGLErrorMessage,getExtensionOrThrow:getExtensionOrThrow,createVertexShader:createVertexShader,createFragmentShader:createFragmentShader,createProgram:createProgram,linkProgram:linkProgram,validateProgram:validateProgram,createStaticVertexBuffer:createStaticVertexBuffer,createStaticIndexBuffer:createStaticIndexBuffer,getNumChannels:getNumChannels,createTexture:createTexture,validateTextureSize:validateTextureSize,createFramebuffer:createFramebuffer,bindVertexBufferToProgramAttribute:bindVertexBufferToProgramAttribute,bindTextureUnit:bindTextureUnit,unbindTextureUnit:unbindTextureUnit,getProgramUniformLocationOrThrow:getProgramUniformLocationOrThrow,getProgramUniformLocation:getProgramUniformLocation,bindTextureToProgramUniformSampler:bindTextureToProgramUniformSampler,bindCanvasToFramebuffer:bindCanvasToFramebuffer,bindColorTextureToFramebuffer:bindColorTextureToFramebuffer,unbindColorTextureFromFramebuffer:unbindColorTextureFromFramebuffer,validateFramebuffer:validateFramebuffer,getFramebufferErrorMessage:getFramebufferErrorMessage,getBatchDim:getBatchDim,getRowsCols:getRowsCols,getTextureShapeFromLogicalShape:getTextureShapeFromLogicalShape,isReshapeFree:isReshapeFree});function createVertexShader$1(e,t){var n=getGlslDifferences();return createVertexShader(e,t,n.version+"\n precision highp float;\n "+n.attribute+" vec3 clipSpacePos;\n "+n.attribute+" vec2 uv;\n "+n.varyingVs+" vec2 resultUV;\n\n void main() {\n gl_Position = vec4(clipSpacePos, 1);\n resultUV = uv;\n }")}function createVertexBuffer(e,t){return createStaticVertexBuffer(e,t,new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]))}function createIndexBuffer(e,t){return createStaticIndexBuffer(e,t,new Uint16Array([0,1,2,2,1,3]))}function getTextureConfig(e,t){var n,r,o,a,i,s,u,c,l=e;return 2===ENV.get("WEBGL_VERSION")?(n=l.R32F,r=l.R16F,o=l.RGBA16F,a=l.RGBA32F,i=l.RED,s=4,u=1,c=l.HALF_FLOAT):(n=e.RGBA,r=e.RGBA,o=e.RGBA,a=l.RGBA,i=e.RGBA,s=4,u=4,c=null!=t?t.HALF_FLOAT_OES:null),{internalFormatFloat:n,internalFormatHalfFloat:r,internalFormatPackedHalfFloat:o,internalFormatPackedFloat:a,textureFormatFloat:i,downloadTextureFormat:e.RGBA,downloadUnpackNumChannels:s,defaultNumChannels:u,textureTypeHalfFloat:c}}function createAndConfigureTexture(e,t,n,r,o,a,i){validateTextureSize(n,r);var s=createTexture(e,t),u=e.TEXTURE_2D;return callAndCheck(e,t,function(){return e.bindTexture(u,s)}),callAndCheck(e,t,function(){return e.texParameteri(u,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE)}),callAndCheck(e,t,function(){return e.texParameteri(u,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)}),callAndCheck(e,t,function(){return e.texParameteri(u,e.TEXTURE_MIN_FILTER,e.NEAREST)}),callAndCheck(e,t,function(){return e.texParameteri(u,e.TEXTURE_MAG_FILTER,e.NEAREST)}),callAndCheck(e,t,function(){return e.texImage2D(u,0,o,n,r,0,a,i,null)}),callAndCheck(e,t,function(){return e.bindTexture(e.TEXTURE_2D,null)}),s}function createFloat32MatrixTexture(e,t,n,r,o){var a=getUnpackedMatrixTextureShapeWidthHeight(n,r);return createAndConfigureTexture(e,t,a[0],a[1],o.internalFormatFloat,o.textureFormatFloat,e.FLOAT)}function createFloat16MatrixTexture(e,t,n,r,o){var a=getUnpackedMatrixTextureShapeWidthHeight(n,r);return createAndConfigureTexture(e,t,a[0],a[1],o.internalFormatHalfFloat,o.textureFormatFloat,o.textureTypeHalfFloat)}function createUnsignedBytesMatrixTexture(e,t,n,r,o){var a=getUnpackedMatrixTextureShapeWidthHeight(n,r);return createAndConfigureTexture(e,t,a[0],a[1],e.RGBA,e.RGBA,e.UNSIGNED_BYTE)}function createPackedMatrixTexture(e,t,n,r,o){var a=getPackedMatrixTextureShapeWidthHeight(n,r);return createAndConfigureTexture(e,t,a[0],a[1],o.internalFormatPackedFloat,e.RGBA,e.FLOAT)}function createFloat16PackedMatrixTexture(e,t,n,r,o){var a=getPackedMatrixTextureShapeWidthHeight(n,r);return createAndConfigureTexture(e,t,a[0],a[1],o.internalFormatPackedHalfFloat,e.RGBA,o.textureTypeHalfFloat)}function bindVertexProgramAttributeStreams(e,t,n,r){return callAndCheck(e,t,function(){return e.bindBuffer(e.ARRAY_BUFFER,r)}),bindVertexBufferToProgramAttribute(e,t,n,"clipSpacePos",r,3,20,0)&&bindVertexBufferToProgramAttribute(e,t,n,"uv",r,2,20,12)}function uploadPixelDataToTexture(e,t,n,r){callAndCheck(e,t,function(){return e.bindTexture(e.TEXTURE_2D,n)}),callAndCheck(e,t,function(){return e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r)}),callAndCheck(e,t,function(){return e.bindTexture(e.TEXTURE_2D,null)});}function uploadDataToTexture(e,t,n,r,o,a,i){validateTextureSize(r,o),callAndCheck(e,t,function(){return e.bindTexture(e.TEXTURE_2D,n)}),callAndCheck(e,t,function(){return e.texSubImage2D(e.TEXTURE_2D,0,0,0,r,o,i,e.FLOAT,a)}),callAndCheck(e,t,function(){return e.bindTexture(e.TEXTURE_2D,null)});}function uploadMatrixToTexture(e,t,n,r,o,a,i,s){var u,c=getUnpackedMatrixTextureShapeWidthHeight(r,o),l=c[0],p=c[1],d=r*o;1===s.defaultNumChannels&&d===a.length?u=a:encodeMatrixToUnpackedArray(a,u=new Float32Array(d*i),i),uploadDataToTexture(e,t,n,l,p,u,s.textureFormatFloat);}function uploadMatrixToPackedTexture(e,t,n,r,o,a,i,s,u,c){var l=getPackedMatrixTextureShapeWidthHeight(i,s),p=l[0],d=l[1],h=new Float32Array(getPackedRGBAArraySizeFromMatrixShape(i,s));encodeMatrixToPackedRGBA(u,r,o,a,h),uploadDataToTexture(e,t,n,p,d,h,e.RGBA);}function maybeCreateBufferFromOutputTexture(e,t,n,r,o,a){var i=n;if(2===ENV.get("WEBGL_VERSION")){var s=e,u=s.createBuffer();callAndCheck(e,t,function(){return e.bindBuffer(s.PIXEL_PACK_BUFFER,u)});var c=4*getUnpackedArraySizeFromMatrixSize(r*o,a.downloadUnpackNumChannels);callAndCheck(e,t,function(){return e.bufferData(s.PIXEL_PACK_BUFFER,c,s.STREAM_READ)}),callAndCheck(e,t,function(){return s.readPixels(0,0,o,r,e.RGBA,e.FLOAT,0)}),callAndCheck(e,t,function(){return e.bindBuffer(s.PIXEL_PACK_BUFFER,null)}),i=u;}return i}function downloadFloat32MatrixFromBuffer(e,t,n,r,o){var a=e,i=new Float32Array(getUnpackedArraySizeFromMatrixSize(n*r,o.downloadUnpackNumChannels));a.bindBuffer(a.PIXEL_PACK_BUFFER,t),a.getBufferSubData(a.PIXEL_PACK_BUFFER,0,i),a.bindBuffer(a.PIXEL_PACK_BUFFER,null);var s=new Float32Array(n*r);return decodeMatrixFromUnpackedArray(i,s,o.downloadUnpackNumChannels),s}function downloadFloat32MatrixFromOutputTexture(e,t,n,r,o){var a=getUnpackedMatrixTextureShapeWidthHeight(n,r),i=a[0],s=a[1],u=new Float32Array(getUnpackedArraySizeFromMatrixSize(n*r,o.downloadUnpackNumChannels));callAndCheck(e,t,function(){return e.readPixels(0,0,i,s,o.downloadTextureFormat,e.FLOAT,u)});var c=new Float32Array(n*r);return decodeMatrixFromUnpackedArray(u,c,o.downloadUnpackNumChannels),c}function downloadByteEncodedFloatMatrixFromOutputTexture(e,t,n,r,o){var a=getUnpackedMatrixTextureShapeWidthHeight(n,r),i=a[0],s=a[1],u=new Uint8Array(getUnpackedArraySizeFromMatrixSize(n*r,4));return callAndCheck(e,t,function(){return e.readPixels(0,0,i,s,o.downloadTextureFormat,e.UNSIGNED_BYTE,u)}),new Float32Array(u.buffer)}function downloadPackedMatrixFromBuffer(e,t,n,r,o,a,i,s){var u=e,c=new Float32Array(getPackedRGBAArraySizeFromMatrixShape(a,i));u.bindBuffer(u.PIXEL_PACK_BUFFER,t),u.getBufferSubData(u.PIXEL_PACK_BUFFER,0,c),u.bindBuffer(u.PIXEL_PACK_BUFFER,null);var l=new Float32Array(sizeFromShape([n,r,o]));return decodeMatrixFromPackedRGBA(c,n,r,o,l),l}function downloadMatrixFromPackedOutputTexture(e,t,n,r,o,a,i,s){var u=getPackedMatrixTextureShapeWidthHeight(a,i),c=u[0],l=u[1],p=new Float32Array(getPackedRGBAArraySizeFromMatrixShape(a,i));callAndCheck(e,t,function(){return e.readPixels(0,0,c,l,e.RGBA,e.FLOAT,p)});var d=new Float32Array(sizeFromShape([n,r,o]));return decodeMatrixFromPackedRGBA(p,n,r,o,d)}var gpgpu_util=Object.freeze({createVertexShader:createVertexShader$1,createVertexBuffer:createVertexBuffer,createIndexBuffer:createIndexBuffer,getTextureConfig:getTextureConfig,createFloat32MatrixTexture:createFloat32MatrixTexture,createFloat16MatrixTexture:createFloat16MatrixTexture,createUnsignedBytesMatrixTexture:createUnsignedBytesMatrixTexture,createPackedMatrixTexture:createPackedMatrixTexture,createFloat16PackedMatrixTexture:createFloat16PackedMatrixTexture,bindVertexProgramAttributeStreams:bindVertexProgramAttributeStreams,uploadPixelDataToTexture:uploadPixelDataToTexture,uploadMatrixToTexture:uploadMatrixToTexture,uploadMatrixToPackedTexture:uploadMatrixToPackedTexture,maybeCreateBufferFromOutputTexture:maybeCreateBufferFromOutputTexture,downloadFloat32MatrixFromBuffer:downloadFloat32MatrixFromBuffer,downloadFloat32MatrixFromOutputTexture:downloadFloat32MatrixFromOutputTexture,downloadByteEncodedFloatMatrixFromOutputTexture:downloadByteEncodedFloatMatrixFromOutputTexture,downloadPackedMatrixFromBuffer:downloadPackedMatrixFromBuffer,downloadMatrixFromPackedOutputTexture:downloadMatrixFromPackedOutputTexture}),GPGPUContext=function(){function e(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];var t=ENV.get("WEBGL_VERSION");null!=e?(this.gl=e,setWebGLContext(t,e)):this.gl=getWebGLContext(t),1===ENV.get("WEBGL_VERSION")?(this.textureFloatExtension=getExtensionOrThrow(this.gl,this.debug,"OES_texture_float"),this.colorBufferFloatExtension=this.gl.getExtension("WEBGL_color_buffer_float"),ENV.get("WEBGL_RENDER_FLOAT32_ENABLED")||(this.textureHalfFloatExtension=getExtensionOrThrow(this.gl,this.debug,"OES_texture_half_float"),this.colorBufferHalfFloatExtension=this.gl.getExtension("EXT_color_buffer_half_float"))):this.colorBufferFloatExtension=getExtensionOrThrow(this.gl,this.debug,"EXT_color_buffer_float"),this.vertexBuffer=createVertexBuffer(this.gl,this.debug),this.indexBuffer=createIndexBuffer(this.gl,this.debug),this.framebuffer=createFramebuffer(this.gl,this.debug),this.textureConfig=getTextureConfig(this.gl,this.textureHalfFloatExtension);}return Object.defineProperty(e.prototype,"debug",{get:function(){return ENV.get("DEBUG")},enumerable:!0,configurable:!0}),e.prototype.dispose=function(){var e=this;if(!this.disposed){null!=this.program&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),null!=this.outputTexture&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");var t=this.gl;callAndCheck(t,this.debug,function(){return t.finish()}),callAndCheck(t,this.debug,function(){return t.bindFramebuffer(t.FRAMEBUFFER,null)}),callAndCheck(t,this.debug,function(){return t.deleteFramebuffer(e.framebuffer)}),callAndCheck(t,this.debug,function(){return t.bindBuffer(t.ARRAY_BUFFER,null)}),callAndCheck(t,this.debug,function(){return t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null)}),callAndCheck(t,this.debug,function(){return t.deleteBuffer(e.indexBuffer)}),this.disposed=!0;}},e.prototype.createFloat32MatrixTexture=function(e,t){return this.throwIfDisposed(),createFloat32MatrixTexture(this.gl,this.debug,e,t,this.textureConfig)},e.prototype.createFloat16MatrixTexture=function(e,t){return this.throwIfDisposed(),createFloat16MatrixTexture(this.gl,this.debug,e,t,this.textureConfig)},e.prototype.createUnsignedBytesMatrixTexture=function(e,t){return this.throwIfDisposed(),createUnsignedBytesMatrixTexture(this.gl,this.debug,e,t,this.textureConfig)},e.prototype.uploadPixelDataToTexture=function(e,t){this.throwIfDisposed(),uploadPixelDataToTexture(this.gl,this.debug,e,t);},e.prototype.createFloat16PackedMatrixTexture=function(e,t){return this.throwIfDisposed(),createFloat16PackedMatrixTexture(this.gl,this.debug,e,t,this.textureConfig)},e.prototype.createPackedMatrixTexture=function(e,t){return this.throwIfDisposed(),createPackedMatrixTexture(this.gl,this.debug,e,t,this.textureConfig)},e.prototype.deleteMatrixTexture=function(e){var t=this;this.throwIfDisposed(),this.outputTexture===e&&(unbindColorTextureFromFramebuffer(this.gl,this.debug,this.framebuffer),this.outputTexture=null),callAndCheck(this.gl,this.debug,function(){return t.gl.deleteTexture(e)});},e.prototype.uploadMatrixToTexture=function(e,t,n,r){this.throwIfDisposed();var o=getNumChannels();return uploadMatrixToTexture(this.gl,this.debug,e,t,n,r,o,this.textureConfig)},e.prototype.uploadMatrixToPackedTexture=function(e,t,n,r,o,a,i){return this.throwIfDisposed(),uploadMatrixToPackedTexture(this.gl,this.debug,e,t,n,r,o,a,i,this.textureConfig)},e.prototype.downloadFloat32MatrixFromOutputTexture=function(e,t,n){var r=this;return this.downloadMatrixDriver(e,function(){return downloadFloat32MatrixFromOutputTexture(r.gl,r.debug,t,n,r.textureConfig)})},e.prototype.downloadByteEncodedFloatMatrixFromOutputTexture=function(e,t,n){var r=this;return this.downloadMatrixDriver(e,function(){return downloadByteEncodedFloatMatrixFromOutputTexture(r.gl,r.debug,t,n,r.textureConfig)})},e.prototype.downloadPackedMatrixFromBuffer=function(e,t,n,r,o,a){return downloadPackedMatrixFromBuffer(this.gl,e,t,n,r,o,a,this.textureConfig)},e.prototype.downloadFloat32MatrixFromBuffer=function(e,t,n){return downloadFloat32MatrixFromBuffer(this.gl,e,t,n,this.textureConfig)},e.prototype.maybeCreateBufferFromTexture=function(e,t,n){this.bindTextureToFrameBuffer(e);var r=maybeCreateBufferFromOutputTexture(this.gl,this.debug,e,t,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),r},e.prototype.createAndWaitForFence=function(){var e=this.createFence(this.gl);return this.pollFence(e)},e.prototype.createFence=function(e){var t,n,r=this;if(ENV.get("WEBGL_FENCE_API_ENABLED")){var o=e,a=o.fenceSync(o.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),n=function(){var e=o.clientWaitSync(a,0,0);return e===o.ALREADY_SIGNALED||e===o.CONDITION_SATISFIED},t=a;}else ENV.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),n=function(){return r.isQueryAvailable(t,ENV.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}):n=function(){return !0};return {query:t,isFencePassed:n}},e.prototype.downloadMatrixFromPackedTexture=function(e,t,n,r,o,a){var i=this;return this.downloadMatrixDriver(e,function(){return downloadMatrixFromPackedOutputTexture(i.gl,i.debug,t,n,r,o,a,i.textureConfig)})},e.prototype.createProgram=function(e){this.throwIfDisposed();var t=this.gl,n=createFragmentShader(t,this.debug,e),r=createVertexShader$1(t,this.debug),o=createProgram(t,this.debug);return callAndCheck(t,this.debug,function(){return t.attachShader(o,r)}),callAndCheck(t,this.debug,function(){return t.attachShader(o,n)}),linkProgram(t,this.debug,o),this.debug&&validateProgram(t,this.debug,o),this.vertexAttrsAreBound||(this.setProgram(o),this.vertexAttrsAreBound=bindVertexProgramAttributeStreams(t,this.debug,this.program,this.vertexBuffer)),o},e.prototype.deleteProgram=function(e){var t=this;this.throwIfDisposed(),e===this.program&&(this.program=null),null!=e&&callAndCheck(this.gl,this.debug,function(){return t.gl.deleteProgram(e)});},e.prototype.setProgram=function(e){var t=this;this.throwIfDisposed(),this.program=e,null!=this.program&&this.debug&&validateProgram(this.gl,this.debug,this.program),callAndCheck(this.gl,this.debug,function(){return t.gl.useProgram(e)});},e.prototype.getUniformLocation=function(e,t,n){return void 0===n&&(n=!0),this.throwIfDisposed(),n?getProgramUniformLocationOrThrow(this.gl,this.debug,e,t):getProgramUniformLocation(this.gl,e,t)},e.prototype.getAttributeLocation=function(e,t){var n=this;return this.throwIfDisposed(),callAndCheck(this.gl,this.debug,function(){return n.gl.getAttribLocation(e,t)})},e.prototype.getUniformLocationNoThrow=function(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)},e.prototype.setInputMatrixTexture=function(e,t,n){this.throwIfDisposed(),this.throwIfNoProgram(),bindTextureToProgramUniformSampler(this.gl,this.debug,this.program,e,t,n);},e.prototype.setOutputMatrixTexture=function(e,t,n){this.setOutputMatrixTextureDriver(e,n,t);},e.prototype.setOutputPackedMatrixTexture=function(e,t,n){this.throwIfDisposed();var r=getPackedMatrixTextureShapeWidthHeight(t,n),o=r[0],a=r[1];this.setOutputMatrixTextureDriver(e,o,a);},e.prototype.setOutputMatrixWriteRegion=function(e,t,n,r){this.setOutputMatrixWriteRegionDriver(n,e,r,t);},e.prototype.setOutputPackedMatrixWriteRegion=function(e,t,n,r){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")},e.prototype.debugValidate=function(){null!=this.program&&validateProgram(this.gl,this.debug,this.program),validateFramebuffer(this.gl);},e.prototype.executeProgram=function(){this.throwIfDisposed(),this.throwIfNoProgram();var e=this.gl;this.debug&&this.debugValidate(),callAndCheck(e,this.debug,function(){return e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0)});},e.prototype.blockUntilAllProgramsCompleted=function(){var e=this;this.throwIfDisposed(),callAndCheck(this.gl,this.debug,function(){return e.gl.finish()});},e.prototype.getQueryTimerExtension=function(){return null==this.disjointQueryTimerExtension&&(this.disjointQueryTimerExtension=getExtensionOrThrow(this.gl,this.debug,2===ENV.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension},e.prototype.getQueryTimerExtensionWebGL2=function(){return this.getQueryTimerExtension()},e.prototype.getQueryTimerExtensionWebGL1=function(){return this.getQueryTimerExtension()},e.prototype.beginQuery=function(){if(2===ENV.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){var e=this.gl,t=this.getQueryTimerExtensionWebGL2(),n=e.createQuery();return e.beginQuery(t.TIME_ELAPSED_EXT,n),n}var r=this.getQueryTimerExtensionWebGL1(),o=r.createQueryEXT();return r.beginQueryEXT(r.TIME_ELAPSED_EXT,o),o},e.prototype.endQuery=function(){if(2!==ENV.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){var e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT);}else{var t=this.gl,n=this.getQueryTimerExtensionWebGL2();t.endQuery(n.TIME_ELAPSED_EXT);}},e.prototype.waitForQueryAndGetTime=function(e){return __awaiter(this,void 0,void 0,function(){var t=this;return __generator(this,function(n){switch(n.label){case 0:return [4,repeatedTry(function(){return t.disposed||t.isQueryAvailable(e,ENV.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))})];case 1:return n.sent(),[2,this.getQueryTime(e,ENV.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))]}})})},e.prototype.getQueryTime=function(e,t){if(0===t)return null;if(2===t){var n=this.gl;return n.getQueryParameter(e,n.QUERY_RESULT)/1e6}var r=this.getQueryTimerExtensionWebGL1();return r.getQueryObjectEXT(e,r.QUERY_RESULT_EXT)/1e6},e.prototype.isQueryAvailable=function(e,t){if(0===t)return !0;if(2===t){var n=this.gl,r=this.getQueryTimerExtensionWebGL2(),o=n.getQueryParameter(e,n.QUERY_RESULT_AVAILABLE);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),o&&!this.disjoint}o=(r=this.getQueryTimerExtensionWebGL1()).getQueryObjectEXT(e,r.QUERY_RESULT_AVAILABLE_EXT);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),o&&!this.disjoint},e.prototype.pollFence=function(e){var t=this;return new Promise(function(n){t.addItemToPoll(function(){return e.isFencePassed()},function(){return n()});})},e.prototype.pollItems=function(){for(var e=linearSearchLastTrue(this.itemsToPoll.map(function(e){return e.isDoneFn})),t=0;t<=e;++t){(0, this.itemsToPoll[t].resolveFn)();}this.itemsToPoll=this.itemsToPoll.slice(e+1);},e.prototype.addItemToPoll=function(e,t){var n=this;this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1||repeatedTry(function(){return n.pollItems(),0===n.itemsToPoll.length});},e.prototype.bindTextureToFrameBuffer=function(e){this.throwIfDisposed(),bindColorTextureToFramebuffer(this.gl,this.debug,e,this.framebuffer),this.debug&&validateFramebuffer(this.gl);},e.prototype.unbindTextureToFrameBuffer=function(){null!=this.outputTexture?(bindColorTextureToFramebuffer(this.gl,this.debug,this.outputTexture,this.framebuffer),this.debug&&validateFramebuffer(this.gl)):unbindColorTextureFromFramebuffer(this.gl,this.debug,this.framebuffer);},e.prototype.downloadMatrixDriver=function(e,t){this.bindTextureToFrameBuffer(e);var n=t();return this.unbindTextureToFrameBuffer(),n},e.prototype.setOutputMatrixTextureDriver=function(e,t,n){this.throwIfDisposed();var r=this.gl;bindColorTextureToFramebuffer(r,this.debug,e,this.framebuffer),this.debug&&validateFramebuffer(r),this.outputTexture=e,callAndCheck(r,this.debug,function(){return r.viewport(0,0,t,n)}),callAndCheck(r,this.debug,function(){return r.scissor(0,0,t,n)});},e.prototype.setOutputMatrixWriteRegionDriver=function(e,t,n,r){var o=this;this.throwIfDisposed(),callAndCheck(this.gl,this.debug,function(){return o.gl.scissor(e,t,n,r)});},e.prototype.throwIfDisposed=function(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")},e.prototype.throwIfNoProgram=function(){if(null==this.program)throw new Error("No GPU program is currently set.")},e}();function linearSearchLastTrue(e){for(var t=0;t0&&(r.flatOffset=e.texData.slice.flatOffset),{name:t.variableNames[n],shapeInfo:r}}),i=a.map(function(e){return e.shapeInfo}),s={logicalShape:r.shape,texShape:r.texData.texShape,isUniform:!1,isPacked:r.texData.isPacked,flatOffset:null},u=makeShader(a,s,o,t.usesPackedTextures),c=e.createProgram(u),l=null,p=null;1===ENV.get("WEBGL_VERSION")&&(l=e.getUniformLocation(c,"INFINITY",!1),p=e.getUniformLocation(c,"NAN",!1));for(var d={},h=0;h0,n=e.isUniform?"uniform":e.texData.texShape;r+=e.shape+"_"+n+"_"+t;});var o=e.userCode,a=e.constructor.name;return a+="_"+r+"_"+o}var Im2ColPackedProgram=function(){return function(e,t,n){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=e;var r=n.filterWidth,o=n.inChannels,a=n.strideWidth,i=n.strideHeight,s=n.padInfo,u=n.outWidth,c=n.dilationWidth,l=n.dilationHeight,p=s.left,d=s.top,h=o*r,f=getGlslDifferences();this.userCode="\n void main() {\n ivec2 rc = getOutputCoords();\n\n vec4 result = vec4(0);\n\n for(int row=0; row<=1; row++) {\n for(int col=0; col<=1; col++) {\n int blockIndex = rc.y + col;\n int pos = rc.x + row;\n\n if(blockIndex >= "+e[1]+" || pos >= "+e[0]+") continue;\n\n int offsetY = int(blockIndex / ("+u+")) * "+i+" - "+d+";\n int d0 = offsetY + "+l+" * (pos / "+h+");\n\n if(d0 >= "+t[0]+" || d0 < 0) continue;\n\n int offsetX = int(mod(float(blockIndex), "+u+".) * "+a+". - "+p+".);\n int d1 = offsetX + "+c+" * (int(mod(float(pos), "+h+".) / "+o+".));\n\n if(d1 >= "+t[1]+" || d1 < 0) continue;\n\n vec2 innerDims = vec2(d1, int(mod(float(pos), "+o+".)));\n result[row * 2 + col] = getChannel(getA(d0, int(innerDims.x),\n int(innerDims.y)), innerDims);\n }\n }\n\n "+f.output+" = result;\n }\n ";}}(),LRNProgram=function(){return function(e,t,n,r,o){this.variableNames=["x"],this.outputShape=[];var a,i=t,s=e[3]-1;this.outputShape=e;var u="float("+n+") + float("+r+") * sum";a=.5===o?"inversesqrt("+u+")":1===o?"1.0/("+u+")":"exp(log("+u+") * float(-"+o+"));",this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n int d = coords[3];\n float x = getX(b, r, c, d);\n float sum = 0.0;\n for (int j = -"+i+"; j <= "+i+"; j++) {\n int idx = d + j;\n if (idx >= 0 && idx <= "+s+") {\n float z = getX(b, r, c, idx);\n sum += z * z;\n }\n }\n float val = x * "+a+";\n setOutput(val);\n }\n ";}}(),LRNGradProgram=function(){return function(e,t,n,r,o){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=n,this.alpha=r,this.beta=o,this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n\n float result = 0.0;\n for (int d = 0; d < "+this.depth+"; ++d) {\n int depthBegin = int(max(0.0, float(d - "+t+")));\n int depthEnd = int(min(float("+this.depth+"),\n float(d + "+t+" + 1)));\n\n const int MIN_DEPTH_BEGIN = 0;\n const int MAX_DEPTH_END = "+this.depth+";\n\n float norm = 0.0;\n for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd) {\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n }\n else {\n break;\n }\n }\n\n norm = float("+r+") * norm + float("+n+");\n\n for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd){\n float dyi = -2.0 * float("+r+")\n * float("+o+")\n * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)\n / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * "+o+");\n }\n if (k == coords[3]) {\n dyi *= getDy(b, r, c, d);\n result += dyi;\n }\n }\n else {\n break;\n }\n }\n }\n setOutput(result);\n }\n ";}}(),MaxPool2DBackpropProgram=function(){return function(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;var t=e.strideHeight,n=e.strideWidth,r=e.dilationHeight,o=e.effectiveFilterHeight,a=e.effectiveFilterWidth,i=o-1-e.padInfo.top,s=a-1-e.padInfo.left,u=o*a-1;this.userCode="\n const ivec2 pads = ivec2("+i+", "+s+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+o+";\n wR += "+r+") {\n float dyR = float(dyRCorner + wR) / "+t+".0;\n\n if (dyR < 0.0 || dyR >= "+e.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+a+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+n+".0;\n\n if (dyC < 0.0 || dyC >= "+e.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n int maxPosValue = "+u+" - int(getMaxPos(b, idyR, idyC, d));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue = wR * "+a+" + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n setOutput(dotProd);\n }\n ";}}(),MatMulPackedProgram=function(){return function(e,t,n,r,o,a){void 0===n&&(n=!1),void 0===r&&(r=!1),void 0===o&&(o=!1),void 0===a&&(a=null),this.variableNames=["matrixA","matrixB"],this.usesPackedTextures=!0,this.outputShape=t;var i=n?e[1]:e[2],s=Math.ceil(i/2),u=n?"i * 2, rc.y":"rc.y, i * 2",c=r?"rc.z, i * 2":"i * 2, rc.z",l=n?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],p=r?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],d="",h="";a&&(d="vec4 activation(vec4 x) {\n "+a+"\n }",h="result = activation(result);");var f=o?"result += getBiasAtOutCoords();":"";o&&this.variableNames.push("bias"),this.userCode="\n "+d+"\n\n const float sharedDimension = "+s+".0;\n\n vec4 dot2x2ARowBCol(ivec3 rc) {\n vec4 result = vec4(0);\n for (int i = 0; i < "+s+"; i++) {\n vec4 a = getMatrixA(rc.x, "+u+");\n vec4 b = getMatrixB(rc.x, "+c+");\n\n result += ("+l[0]+" * "+p[0]+") + ("+l[1]+" * "+p[1]+");\n }\n return result;\n }\n\n void main() {\n ivec3 rc = getOutputCoords();\n vec4 result = dot2x2ARowBCol(rc);\n\n "+f+"\n\n "+h+"\n\n setOutput(result);\n }\n ";}}(),MultinomialProgram=function(){function e(e,t,n){this.variableNames=["probs"],this.outputShape=[e,n],this.userCode="\n uniform float seed;\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n\n float r = random(seed);\n float cdf = 0.0;\n\n for (int i = 0; i < "+(t-1)+"; i++) {\n cdf += getProbs(batch, i);\n\n if (r < cdf) {\n setOutput(float(i));\n return;\n }\n }\n\n // If no other event happened, last event happened.\n setOutput(float("+(t-1)+"));\n }\n ";}return e.prototype.getCustomSetupFunc=function(e){var t=this;return function(n,r){null==t.seedLoc&&(t.seedLoc=n.getUniformLocation(r,"seed")),n.gl.uniform1f(t.seedLoc,e);}},e}(),OneHotProgram=function(){return function(e,t,n,r){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int index = round(getIndices(coords.x));\n setOutput(mix(float("+r+"), float("+n+"),\n float(index == coords.y)));\n }\n ";}}(),PackProgram=function(){return function(e){this.variableNames=["A"],this.isPackShader=!0,this.outputShape=e;var t=e.length;if(0===t)this.userCode="\n void main() {\n setOutput(vec4(getA(), 0., 0., 0.));\n }\n ";else{var n=getChannels("rc",t),r=getCoordsDataType(t),o=getOutOfBoundsCondition(t,e,n),a=getSetup(t,e[e.length-1],e[e.length-2],n),i=getOutput(e,n);this.userCode="\n void main() {\n "+r+" rc = getOutputCoords();\n\n if("+o+") {\n setOutput(vec4(0));\n } else {\n "+a+"\n\n setOutput(vec4("+i+"));\n }\n }\n ";}}}();function getSourceCoordsArr(e,t){for(var n=[],r=0;r<=1;r++)for(var o=0;o<=1;o++){for(var a=(0===r?"r":"rp1")+", "+(0===o?"c":"cp1"),i=2;i "+t[0];for(var r="",o=e-2;o= "+t[o],o= "+t+";\n bool rEdge = rp1 >= "+n+";\n "}function getOutput(e,t){var n=e.length,r=getSourceCoordsArr(n,t);return 1===n?"getA(rc),\n rc + 1 >= "+e[0]+" ? 0. : getA(rc + 1),\n 0, 0":"getA("+r[0]+"),\n cEdge ? 0. : getA("+r[1]+"),\n rEdge ? 0. : getA("+r[2]+"),\n rEdge || cEdge ? 0. : getA("+r[3]+")"}var PadProgram=function(){return function(e,t,n){this.variableNames=["x"],this.outputShape=t.map(function(t,n){return t[0]+e[n]+t[1]});var r=e.length,o=getCoordsDataType(r),a=t.map(function(e){return e[0]}).join(","),i=t.map(function(t,n){return t[0]+e[n]}).join(","),s=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r);this.userCode=1!==r?"\n "+o+" start = "+o+"("+a+");\n "+o+" end = "+o+"("+i+");\n\n void main() {\n "+o+" outC = getOutputCoords();\n if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n setOutput(float("+n+"));\n } else {\n "+o+" coords = outC - start;\n setOutput(getX("+s+"));\n }\n }\n ":"\n int start = "+a+";\n int end = "+i+";\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start || outC >= end) {\n setOutput(float("+n+"));\n } else {\n setOutput(getX(outC - start));\n }\n }\n ";}}(),PadPackedProgram=function(){return function(e,t,n){this.variableNames=["x"],this.usesPackedTextures=!0,this.outputShape=t.map(function(t,n){return t[0]+e[n]+t[1]});for(var r=e.length,o=getCoordsDataType(r),a=t.map(function(e){return e[0]}).join(","),i=t.map(function(t,n){return t[0]+e[n]}).join(","),s=getChannels("rc",r),u=getChannels("source",r),c=s[r-1]+" < "+this.outputShape[r-1],l=1===r?"source":"vec2("+u.slice(-2).join()+")",p=[o+" rc = outputLoc;",s[r-1]+" += 1;\n if("+c+") {\n ",1===r?"":"}\n rc = outputLoc;\n "+s[r-2]+" += 1;\n if("+s[r-2]+" < "+this.outputShape[r-2]+") {",1===r?"":" "+s[r-1]+" += 1;\n if("+c+") {"],d=1===r?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",h="",f=0,m=1===r?2:4;f= "+e.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+c+";\n wC += "+s+") {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= "+e.inWidth+") {\n continue;\n }\n\n float value = getX(batch, xR, xC, d);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value >= currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = wR * "+c+" + wC;\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n ";else{var f=t+"("+t+"("+t+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"avg"===t&&(f="avgValue / count");var m=4*Math.floor(r/4),g=r%4,v="\n if ("+d+") {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n ";this.userCode="\n const ivec2 strides = ivec2("+o+", "+a+");\n const ivec2 pads = ivec2("+l+", "+p+");\n const float initializationValue = "+h+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xR, int xC, int d) {\n if (xC < 0 || xC >= "+e.inWidth+") {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xR, xC, d);\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n vec4 minMaxValue = vec4("+h+");\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wR = 0; wR < "+u+";\n wR += "+i+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+e.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+m+"; wC += 4) {\n int xC = xCCorner + wC * "+s+";\n\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n getValue(batch, xR, xC + 2 * "+s+", d),\n getValue(batch, xR, xC + 3 * "+s+", d)\n );\n\n "+v+"\n }\n\n int xC = xCCorner + "+m+";\n if ("+(1===g)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+v+"\n } else if ("+(2===g)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n initializationValue,\n initializationValue\n );\n\n "+v+"\n } else if ("+(3===g)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n getValue(batch, xR, xC + 2 * "+s+", d),\n initializationValue\n );\n\n "+v+"\n }\n }\n setOutput("+f+");\n }\n ";}}}(),ReduceProgram=function(){return function(e,t){this.variableNames=["x"];var n=e.windowSize,r=e.batchSize,o=e.inSize,a=Math.ceil(o/n);this.outputShape=[r,a];var i="0.0",s="";"prod"===t?i="1.0":"min"===t?(i="1.0 / 1e-20",s="min"):"max"===t&&(i="-1.0 / 1e-20",s="max");var u=t+"("+t+"("+t+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"sum"===t?u="sumValue":"prod"===t?u="prodValue":"all"===t?u="allValue":"any"===t&&(u="anyValue");var c=4*Math.floor(n/4),l=n%4,p="\n if ("+("sum"===t)+") {\n sumValue += dot(values, ones);\n } else if ("+("prod"===t)+") {\n vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\n prodValue *= tmp[0] * tmp[1];\n } else {\n minMaxValue = "+s+"(values, minMaxValue);\n }\n ",d="vec4";"all"===t?(i="1.0",p="\n bool reducedAllValue = all(values);\n float floatedReducedAllValue = float(reducedAllValue);\n allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n ",d="bvec4"):"any"===t&&(i="0.0",p="\n bool reducedAnyValue = any(values);\n float floatedReducedAnyValue = float(reducedAnyValue);\n anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n ",d="bvec4");var h="";o%n>0&&(h="\n if (inIdx < 0 || inIdx >= "+o+") {\n return initializationValue;\n }\n "),this.userCode="\n const float initializationValue = "+i+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n "+h+"\n return getX(batch, inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * "+n+";\n\n vec4 minMaxValue = vec4("+i+");\n float prodValue = 1.0;\n float sumValue = 0.0;\n float allValue = 1.0;\n float anyValue = 0.0;\n\n for (int i = 0; i < "+c+"; i += 4) {\n int inIdx = inOffset + i;\n "+d+" values = "+d+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n "+p+"\n }\n\n int inIdx = inOffset + "+c+";\n if ("+(1===l)+") {\n "+d+" values = "+d+"(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+p+"\n } else if ("+(2===l)+") {\n "+d+" values = "+d+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n "+p+"\n } else if ("+(3===l)+") {\n "+d+" values = "+d+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n "+p+"\n }\n setOutput("+u+");\n }\n ";}}(),ReshapePackedProgram=function(){return function(e,t){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=e;for(var n="",r=0;r<4;r++){var o="thisRC = rc;";r%2==1&&(o+="thisRC.z += 1;"),r>1&&(o+="thisRC.y += 1;"),n+="\n "+o+"\n "+(r>0?"if(thisRC.y < rows && thisRC.z < cols){":"")+"\n int flatIndex = getFlatIndex(thisRC);\n\n ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\n vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\n\n result["+r+"] =\n getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n "+(r>0?"}":"")+"\n ";}this.userCode="\n "+getReshapedInputCoords(t)+"\n "+getFlatIndex(e)+"\n\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0.);\n\n ivec3 thisRC;\n int rows = "+e[1]+";\n int cols = "+e[2]+";\n\n "+n+"\n\n setOutput(result);\n }\n ";}}();function getFlatIndex(e){return "\n int getFlatIndex(ivec3 coords) {\n return round("+dotify(["coords.x","coords.y","coords.z"],computeStrides(e).map(function(e){return e.toString()}).concat(["1."]))+");\n }\n "}function getReshapedInputCoords(e){return "\n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n "+getLogicalCoordinatesFromFlatIndex(["r","c","d"],e)+"\n return ivec3(r, c, d);\n }\n "}var ResizeBilinearBackpropProgram=function(){return function(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t.shape;var r=t.shape,o=r[1],a=r[2],i=e.shape,s=i[1],u=i[2],c=[n&&s>1?o-1:o,n&&u>1?a-1:a],l=[n&&s>1?s-1:s,n&&u>1?u-1:u],p=c[0]/l[0],d=c[1]/l[1],h=1/p,f=1/d,m=2*Math.ceil(h)+2,g=2*Math.ceil(f)+2;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float("+p+");\n const float widthScale = float("+d+");\n\n const float invHeightScale = float("+h+");\n const float invWidthScale = float("+f+");\n\n const int winHeight = int("+m+");\n const int winWidth = int("+g+");\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(startRLerp - float(winHeight / 2));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(startCLerp - float(winWidth / 2));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= "+s+") {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= "+u+") {\n continue;\n }\n\n float dxR = float(dyR) * heightScale;\n int topDxRIndex = int(floor(dxR));\n int bottomDxRIndex = int(min(ceil(dxR), "+(o-1)+".0));\n float dxRLerp = dxR - float(topDxRIndex);\n float inverseDxRLerp = 1.0 - dxRLerp;\n\n float dxC = float(dyC) * widthScale;\n int leftDxCIndex = int(floor(dxC));\n int rightDxCIndex = int(min(ceil(dxC), "+(a-1)+".0));\n float dxCLerp = dxC - float(leftDxCIndex);\n float inverseDxCLerp = 1.0 - dxCLerp;\n\n if (r == topDxRIndex && c == leftDxCIndex) {\n // topLeft\n accumulator +=\n getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n }\n\n if (r == topDxRIndex && c == rightDxCIndex) {\n // topRight\n accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n }\n\n if (r == bottomDxRIndex && c == leftDxCIndex) {\n // bottomLeft\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n }\n\n if (r == bottomDxRIndex && c == rightDxCIndex) {\n // bottomRight\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n ";}}(),ResizeBilinearProgram=function(){return function(e,t,n,r){this.variableNames=["A"],this.outputShape=[];var o=e[0],a=e[1],i=e[2],s=e[3];this.outputShape=[o,t,n,s];var u=[r&&t>1?a-1:a,r&&n>1?i-1:i],c=[r&&t>1?t-1:t,r&&n>1?n-1:n];this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+u[0]/c[0]+",\n "+u[1]/c[1]+");\n const vec2 inputShapeRC = vec2("+a+".0, "+i+".0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the four integer indices.\n ivec2 sourceFloorRC = ivec2(sourceFracIndexRC);\n ivec2 sourceCeilRC = ivec2(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\n float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\n float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\n float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n float top = topLeft + (topRight - topLeft) * fracRC.y;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n float newValue = top + (bottom - top) * fracRC.x;\n\n setOutput(newValue);\n }\n ";}}(),ResizeBilinearPackedProgram=function(){return function(e,t,n,r){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=[];var o=e[0],a=e[1],i=e[2],s=e[3];this.outputShape=[o,t,n,s];var u=[r&&t>1?a-1:a,r&&n>1?i-1:i],c=[r&&t>1?t-1:t,r&&n>1?n-1:n];this.userCode="\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n "+u[0]/c[0]+",\n "+u[1]/c[1]+",\n "+u[1]/c[1]+");\n const vec3 inputShapeRC = vec3("+a+".0, "+i+".0,\n "+i+".0);\n\n float getAValue(int b, int r, int c, int d) {\n return getChannel(getA(b, r, c, d), vec2(c, d));\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n // Calculate values for next column in yRC.z.\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n // Fractional source index.\n vec3 sourceFracIndexRC = vec3(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the four integer indices.\n ivec3 sourceFloorRC = ivec3(sourceFracIndexRC);\n ivec3 sourceCeilRC = ivec3(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n \n // Should we calculate next column and row elements in 2x2 packed cell.\n bool hasNextCol = d < "+(s-1)+"; \n bool hasNextRow = coords.z < "+(n-1)+";\n\n // In parallel, construct four corners for all four components in\n // packed 2x2 cell.\n vec4 topLeft = vec4(\n getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 bottomLeft = vec4(\n getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 topRight = vec4(\n getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec4 bottomRight = vec4(\n getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\n\n vec4 top = mix(topLeft, topRight, fracRC.yyzz);\n vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\n vec4 newValue = mix(top, bottom, fracRC.x);\n\n setOutput(newValue);\n }\n ";}}(),ResizeNearestNeigborBackpropProgram=function(){return function(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t.shape;var r=t.shape,o=r[1],a=r[2],i=e.shape,s=i[1],u=i[2],c=[n&&s>1?o-1:o,n&&u>1?a-1:a],l=[n&&s>1?s-1:s,n&&u>1?u-1:u],p=c[0]/l[0],d=c[1]/l[1],h=1/p,f=1/d,m=2*Math.ceil(h)+2,g=2*Math.ceil(f)+2;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float("+p+");\n const float widthScale = float("+d+");\n\n const float invHeightScale = float("+h+");\n const float invWidthScale = float("+f+");\n\n const int winHeight = int("+m+");\n const int winWidth = int("+g+");\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(floor(startRLerp - float(winHeight / 2)));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(floor(startCLerp - float(winWidth / 2)));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= "+s+") {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= "+u+") {\n continue;\n }\n\n float sourceFracRow =\n float("+c[0]+") *\n (float(dyR) / float("+l[0]+"));\n\n float sourceFracCol =\n float("+c[1]+") *\n (float(dyC) / float("+l[1]+"));\n\n int sourceNearestRow = int(min(\n float(int("+o+") - 1),\n "+n+" ? float(round(sourceFracRow)) :\n float(floor(sourceFracRow))));\n\n int sourceNearestCol = int(min(\n float(int("+a+") - 1),\n "+n+" ? float(round(sourceFracCol)) :\n float(floor(sourceFracCol))));\n\n if (r == sourceNearestRow && c == sourceNearestCol) {\n accumulator += getDy(b, dyR, dyC, d);\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n ";}}(),ResizeNearestNeighborProgram=function(){return function(e,t,n,r){this.variableNames=["A"],this.outputShape=[];var o=e[0],a=e[1],i=e[2],s=e[3];this.outputShape=[o,t,n,s];var u=[r&&t>1?a-1:a,r&&n>1?i-1:i],c=[r&&t>1?t-1:t,r&&n>1?n-1:n],l=r?"0.5":"0.0";this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+u[0]/c[0]+",\n "+u[1]/c[1]+");\n const vec2 inputShapeRC = vec2("+a+".0, "+i+".0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestRC = ivec2(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + "+l+")));\n\n float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutput(newValue);\n }\n ";}}(),ReverseProgram=function(){return function(e,t){this.variableNames=["x"];var n=e.length;if(n>4)throw new Error("WebGL backend: Reverse of rank-"+n+" tensor is not yet supported");if(this.outputShape=e,1!==n){var r=e.map(function(n,r){return function(n){return -1!==t.indexOf(n)&&1!==e[n]?e[n]+" - coords["+n+"] - 1":"coords["+n+"]"}(r)}).join(","),o=getCoordsDataType(n);this.userCode="\n void main() {\n "+o+" coords = getOutputCoords();\n setOutput(getX("+r+"));\n }\n ";}else this.userCode="\n void main() {\n int coord = getOutputCoords();\n setOutput(getX("+e[0]+" - coord - 1));\n }\n ";}}(),ReversePackedProgram=function(){return function(e,t){this.variableNames=["x"],this.usesPackedTextures=!0;var n=e.length;if(n>4)throw new Error("WebGL backend: Reverse of rank-"+n+" tensor is not yet supported");this.outputShape=e;var r=getChannels("rc",n),o=r[n-1]+" + 1 < "+this.outputShape[n-1],a=r[n-2]+" + 1 < "+this.outputShape[n-2],i=getCoordsDataType(n);function s(n){var r=e.map(function(r,o){return function(n,r){return -1!==t.indexOf(n)&&1!==e[n]?e[n]+" - "+r[n]+" - 1":""+r[n]}(o,n)});return "getChannel(getX("+r.join(",")+"), vec2("+r.slice(-2).join(",")+"))"}this.userCode=1===n?"\n void main(){\n int rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = getChannel(getX("+e[0]+" - rc - 1), rc);\n if("+o+"){\n result.g = getChannel(getX("+e[0]+" - (rc + 1) - 1), rc + 1);\n }\n setOutput(result);\n }\n ":"\n void main() {\n "+i+" rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = "+function(e){return s(e)}(r.slice())+";\n if("+o+"){\n result.g = "+function(e){return e[n-1]="("+e[n-1]+" + 1)",s(e)}(r.slice())+";\n }\n if("+a+") {\n result.b = "+function(e){return e[n-2]="("+e[n-2]+" + 1)",s(e)}(r.slice())+";\n if("+o+") {\n result.a = "+function(e){return e[n-1]="("+e[n-1]+" + 1)",e[n-2]="("+e[n-2]+" + 1)",s(e)}(r.slice())+";\n }\n }\n setOutput(result);\n }\n ";}}(),ScatterProgram=function(){return function(e,t,n,r,o,a,i){void 0===i&&(i=!0),this.variableNames=["updates","indices","defaultValue"],this.outputShape=a;var s=getCoordsDataType(o.length),u=getCoordsDataType(a.length),c="";1===n?c="i":2===n&&(c="i, j");var l="getIndices("+c+")",p="";1===r?p="i":2===r&&(p="i, coords[1]");var d="getUpdates("+p+")",h=t>1?"strides[j]":"strides";this.userCode="\n "+s+" strides = "+s+"("+o+");\n\n void main() {\n "+u+" coords = getOutputCoords();\n float sum = 0.0;\n bool found = false;\n for (int i = 0; i < "+e+"; i++) {\n int flattenedIndex = 0;\n for (int j = 0; j < "+t+"; j++) {\n int index = round("+l+");\n flattenedIndex += index * "+h+";\n }\n if (flattenedIndex == coords[0]) {\n sum += "+d+";\n found = true;\n }\n }\n setOutput(mix(getDefaultValue(), sum, float(found)));\n }\n ";}}(),SegmentOpProgram=function(){return function(e,t){this.variableNames=["x","segmentIds"];var n=e.windowSize,r=e.batchSize,o=e.inSize,a=e.numSegments,i=a*Math.ceil(o/n);this.outputShape=[r,i];var s=4*Math.floor(n/4),u=n%4,c="\n sumValue += dot(values, segFilter);\n ",l="";o%n>0&&(l="\n if (inIdx < 0 || inIdx >= "+o+") {\n return initializationValue;\n }\n ");var p="";o%n>0&&(p="\n if (inIdx < 0 || inIdx >= "+o+") {\n return -1.0;\n }\n "),this.userCode="\n const float initializationValue = 0.0;\n\n float getValue(int batch, int inIdx) {\n "+l+"\n return getX(batch, inIdx);\n }\n\n float getSegmentIdAtIndex(int inIdx) {\n "+p+"\n return getSegmentIds(inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = int(floor(float(outIdx) / float(\n "+a+")) * float("+n+"));\n int currentSeg = int(mod(float(outIdx), float("+a+")));\n\n float sumValue = 0.0;\n\n for (int i = 0; i < "+s+"; i += 4) {\n int inIdx = inOffset + i;\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\n );\n\n "+c+"\n }\n\n int inIdx = inOffset + "+s+";\n if ("+(1===u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n 0,\n 0,\n 0\n );\n\n "+c+"\n } else if ("+(2===u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n 0,\n 0\n );\n\n "+c+"\n } else if ("+(3===u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n 0\n );\n\n "+c+"\n }\n setOutput(sumValue);\n }\n ";}}(),SelectProgram=function(){return function(e,t,n){var r,o;if(this.variableNames=["c","a","b"],this.outputShape=t,n>4)throw Error("Where for rank "+n+" is not yet supported");if(1===n)o="resRC",r="resRC";else{for(var a=["resRC.x","resRC.y","resRC.z","resRC.w"],i=[],s=[],u=0;u= 1.0) {\n setOutput(getA("+o+"));\n } else {\n setOutput(getB("+o+"));\n }\n }\n ";}}(),SliceProgram=function(){function e(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;var t,n=getCoordsDataType(this.rank),r="uniform int start["+this.rank+"];",o=getCoords$1(this.rank);t="\n "+n+" sourceLoc;\n "+n+" coords = getOutputCoords();\n "+e.map(function(e,t){return "sourceLoc."+coords[t]+" = start["+t+"] + coords."+coords[t]+";"}).join("\n")+"\n ",this.userCode="\n "+r+"\n void main() {\n "+t+"\n setOutput(getSource("+o+"));\n }\n ";}return e.prototype.getCustomSetupFunc=function(e){var t=this;if(e.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+e.length+")");return function(n,r){null==t.startLoc&&(t.startLoc=n.getUniformLocationNoThrow(r,"start"),null==t.startLoc)||n.gl.uniform1iv(t.startLoc,e);}},e}(),coords=["x","y","z","w","u","v"];function getCoords$1(e){if(1===e)return "sourceLoc";if(e<=6)return coords.slice(0,e).map(function(e){return "sourceLoc."+e}).join(",");throw Error("Slicing for rank "+e+" is not yet supported")}var SlicePackedProgram=function(){function e(e){this.variableNames=["source"],this.usesPackedTextures=!0,this.outputShape=e,this.rank=e.length;var t=getCoordsDataType(this.rank),n=getChannels("coords",this.rank),r=getChannels("sourceLoc",this.rank),o=1===this.rank?"sourceLoc":"vec2("+r.slice(-2).join()+")",a="getChannel(getSource("+r.join()+"), "+o+")",i="\n result.x = "+a+";\n if (++"+n[this.rank-1]+" < "+e[this.rank-1]+") {\n ++"+r[this.rank-1]+";\n result.y = "+a+";\n --"+r[this.rank-1]+";\n }\n ",s=1===this.rank?"":"\n --"+n[this.rank-1]+";\n if (++"+n[this.rank-2]+" < "+e[this.rank-2]+") {\n ++"+r[this.rank-2]+";\n result.z = "+a+";\n if (++"+n[this.rank-1]+" < "+e[this.rank-1]+") {\n ++"+r[this.rank-1]+";\n result.w = "+a+";\n }\n }\n ",u=this.rank<=4?"sourceLoc = coords +\n "+t+"("+e.map(function(e,t){return "start["+t+"]"}).join()+");":e.map(function(e,t){return r[t]+" = "+n[t]+" + start["+t+"];"}).join("\n");this.userCode="\n uniform int start["+this.rank+"];\n void main() {\n "+t+" coords = getOutputCoords();\n "+t+" sourceLoc;\n "+u+" \n vec4 result = vec4(0.);\n "+i+"\n "+s+"\n setOutput(result);\n }\n ";}return e.prototype.getCustomSetupFunc=function(e){var t=this;if(e.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+e.length+")");return function(n,r){null==t.startLoc&&(t.startLoc=n.getUniformLocationNoThrow(r,"start"),null==t.startLoc)||n.gl.uniform1iv(t.startLoc,e);}},e}(),StridedSliceProgram=function(){return function(e,t,n,r){this.variableNames=["x"];var o=n.filter(function(e,t){return -1===r.indexOf(t)});this.outputShape=o;var a=n.length,i=getCoordsDataType(n.length),s=getCoordsDataType(o.length),u="";if(1===a)u="coords * strides + begin";else{var c=0;u=n.map(function(e,t){return -1===r.indexOf(t)?(c++,1===o.length?"coords * strides["+t+"] + begin["+t+"]":"coords["+(c-1)+"] * strides["+t+"] + begin["+t+"]"):"begin["+t+"]"}).join(",");}this.userCode="\n "+i+" begin = "+i+"("+e+");\n "+i+" strides = "+i+"("+t+");\n\n void main() {\n "+s+" coords = getOutputCoords();\n setOutput(getX("+u+"));\n }\n ";}}(),TextureManager=function(){function e(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={};}return e.prototype.acquireTexture=function(e,t,n){var r,o=getPhysicalFromLogicalTextureType(t,n),a=getKeyFromTextureShape(e,o,n);if(a in this.freeTextures||(this.freeTextures[a]=[]),a in this.usedTextures||(this.usedTextures[a]=[]),this.freeTextures[a].length>0){this.numFreeTextures--,this.numUsedTextures++,this.log();var i=this.freeTextures[a].shift();return this.usedTextures[a].push(i),i}return this.numUsedTextures++,this.log(),o===PhysicalTextureType.PACKED_2X2_FLOAT32?r=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):o===PhysicalTextureType.PACKED_2X2_FLOAT16?r=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):o===PhysicalTextureType.UNPACKED_FLOAT32?r=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):o===PhysicalTextureType.UNPACKED_FLOAT16?r=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):o===PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE&&(r=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[a].push(r),r},e.prototype.releaseTexture=function(e,t,n,r){if(null!=this.freeTextures){var o=getKeyFromTextureShape(t,getPhysicalFromLogicalTextureType(n,r),r);o in this.freeTextures||(this.freeTextures[o]=[]),this.freeTextures[o].push(e),this.numFreeTextures++,this.numUsedTextures--;var a=this.usedTextures[o],i=a.indexOf(e);if(i<0)throw new Error("Cannot release a texture that was never provided by this texture manager");a.splice(i,1),this.log();}},e.prototype.log=function(){if(this.logEnabled){var e=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",this.numFreeTextures+" / "+this.numUsedTextures,"("+e+")");}},e.prototype.getNumUsedTextures=function(){return this.numUsedTextures},e.prototype.getNumFreeTextures=function(){return this.numFreeTextures},e.prototype.dispose=function(){var e=this;if(null!=this.freeTextures){for(var t in this.freeTextures)this.freeTextures[t].forEach(function(t){e.gpgpu.deleteMatrixTexture(t);});for(var t in this.usedTextures)this.usedTextures[t].forEach(function(t){e.gpgpu.deleteMatrixTexture(t);});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0;}},e}();function getPhysicalFromLogicalTextureType(e,t){if(e===TextureUsage.UPLOAD)return t?PhysicalTextureType.PACKED_2X2_FLOAT32:PhysicalTextureType.UNPACKED_FLOAT32;if(e===TextureUsage.RENDER||null==e)return t?ENV.get("WEBGL_RENDER_FLOAT32_ENABLED")?PhysicalTextureType.PACKED_2X2_FLOAT32:PhysicalTextureType.PACKED_2X2_FLOAT16:ENV.get("WEBGL_RENDER_FLOAT32_ENABLED")?PhysicalTextureType.UNPACKED_FLOAT32:PhysicalTextureType.UNPACKED_FLOAT16;if(e===TextureUsage.DOWNLOAD||e===TextureUsage.PIXELS)return PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE;throw new Error("Unknown logical texture type "+e)}function getKeyFromTextureShape(e,t,n){return e[0]+"_"+e[1]+"_"+t+"_"+n}var TileProgram=function(){return function(e,t){this.variableNames=["A"];for(var n=new Array(e.length),r=0;r5)throw Error("Tile for rank "+t+" is not yet supported");if(1===t)return "imod(resRC, "+e[0]+")";for(var n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],r=[],o=0;o6)throw Error("Transpose for rank "+t+" is not yet supported");for(var n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],r=new Array(t),o=0;o6)throw Error("Packed transpose for rank "+this.rank+" is not yet supported.");var o=getCoordsDataType(this.rank),a=getVecChannels("rc",this.rank),i=new Array(this.rank);for(r=0;r= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n";function STEP(e){return void 0===e&&(e=0),CHECK_NAN_SNIPPET$2+"\n return x > 0.0 ? 1.0 : float("+e+");\n "}var NEG="return -x;",CEIL="return ceil(x);",FLOOR="return floor(x);",SIGN="\n if (isnan(x)) { return 0.0; }\n return sign(x);\n",IS_NAN="return float(isnan(x));",IS_INF="return float(isinf(x));",IS_FINITE="return float(!isnan(x) && !isinf(x));",ROUND="\n // OpenGL ES does not support round function.\n // The algorithm is based on banker's rounding.\n float base = floor(x);\n if ((x - base) < 0.5) {\n return floor(x);\n } else if ((x - base) > 0.5) {\n return ceil(x);\n } else {\n if (mod(base, 2.0) == 0.0) {\n return base;\n } else {\n return base + 1.0;\n }\n }\n",EXP="return exp(x);",EXPM1="return exp(x) - 1.0;",LOG="if (x < 0.0) return NAN;\n return log(x);",LOG1P="return log(1.0 + x);",SQRT="return sqrt(x);",RSQRT="return inversesqrt(x);",SIGMOID="return 1.0 / (1.0 + exp(-1.0 * x));",SOFTPLUS="\n float epsilon = 1.1920928955078125e-7;\n float threshold = log(epsilon) + 2.0;\n\n bool too_large = x > -threshold;\n bool too_small = x < threshold;\n\n float result;\n float exp_x = exp(x);\n\n if (too_large){\n result = x;\n }\n else if (too_small){\n result = exp_x;\n }\n else{\n result = log(exp_x + 1.0);\n }\n return result;\n",SIN=CHECK_NAN_SNIPPET$2+"\n return sin(x);\n",COS=CHECK_NAN_SNIPPET$2+"\n return cos(x);\n",TAN="return tan(x);",ASIN="return asin(x);",ACOS="return acos(x);",ATAN=CHECK_NAN_SNIPPET$2+"\n return atan(x);\n",SINH="\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n",COSH="\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n",TANH="\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n",ASINH="return log(x + sqrt(x * x + 1.0));",ACOSH=CHECK_NAN_SNIPPET$2+"\n if (x < 1.0) return NAN;\n return log(x + sqrt(x * x - 1.0));",ATANH=CHECK_NAN_SNIPPET$2+"\n if ((x < -1.0) || (x > 1.0)) return NAN;\n return (log(1.0 + x) - log(1.0 - x)) / 2.0;",ERF='\n // Error function is calculated approximately with elementary function.\n // See "Handbook of Mathematical Functions with Formulas,\n // Graphs, and Mathematical Tables", Abramowitz and Stegun.\n float p = '+ERF_P+";\n float a1 = "+ERF_A1+";\n float a2 = "+ERF_A2+";\n float a3 = "+ERF_A3+";\n float a4 = "+ERF_A4+";\n float a5 = "+ERF_A5+";\n\n float t = 1.0 / (1.0 + p * x);\n return 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x);\n",SQUARE="return x * x;",RECIPROCAL="return 1.0 / x;",LOGICAL_NOT="return float(!(x >= 1.0));",TO_INT="return float(int(x));",CLONE="return x;",LINEAR$1="return x;",LOG$1="\n vec4 result = log(x);\n vec4 isNaN = vec4(lessThan(x, vec4(0.0)));\n result.r = isNaN.r == 1.0 ? NAN : result.r;\n result.g = isNaN.g == 1.0 ? NAN : result.g;\n result.b = isNaN.b == 1.0 ? NAN : result.b;\n result.a = isNaN.a == 1.0 ? NAN : result.a;\n\n return result;\n",RELU$1="\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n",UnaryOpPackedProgram=function(){return function(e,t){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=e,this.userCode="\n vec4 unaryOperation(vec4 x) {\n "+t+"\n }\n\n void main() {\n vec4 x = getAAtOutCoords();\n vec4 y = unaryOperation(x);\n\n setOutput(y);\n }\n ";}}(),UnpackProgram=function(){return function(e){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=e;var t=e.length,n=getChannels("rc",t),r=getCoordsDataType(t),o=getSourceCoords(t,n),a=n.slice(-2),i=t<=1?"rc":"vec2("+a.join(",")+")";this.userCode="\n void main() {\n "+r+" rc = getOutputCoords();\n vec4 packedInput = getA("+o+");\n\n setOutput(getChannel(packedInput, "+i+"));\n }\n ";}}();function concat1d_(e){return concat(e,0)}function concat2d_(e,t){return concat(e,t)}function concat3d_(e,t){return concat(e,t)}function concat4d_(e,t){return concat(e,t)}function concat_(e,t){void 0===t&&(t=0),assert(e.length>=1,function(){return "Pass at least one tensor to concat"});var n=convertToTensorArray(e,"tensors","concat");t=parseAxisParam(t,n[0].shape)[0];var r=computeOutShape(n.map(function(e){return e.shape}),t);if(0===sizeFromShape(r))return tensor([],r);if(1===(n=n.filter(function(e){return e.size>0})).length)return n[0];var o=n.map(function(e){return e.shape});assertParamsConsistent(o,t);var a=n;return ENV.engine.runKernel(function(e){return e.concat(n,t)},a,function(e){var n=o.map(function(e){return e[t]});return split$1(e,n,t).map(function(e){return function(){return e}})})}function split_(e,t,n){void 0===n&&(n=0);var r,o=convertToTensor(e,"x","split");n=parseAxisParam(n,o.shape)[0],"number"==typeof t?(assert(o.shape[n]%t==0,function(){return "Number of splits must evenly divide the axis."}),r=new Array(t).fill(o.shape[n]/t)):(assert(o.shape[n]===t.reduce(function(e,t){return e+t}),function(){return "The sum of sizes must match the size of the axis dimension."}),r=t);return ENV.engine.runKernel(function(e){return e.split(o,r,n)},{$x:o},function(e){return {$x:function(){return concat(e,n)}}})}var concat=op({concat_:concat_}),concat1d=op({concat1d_:concat1d_}),concat2d=op({concat2d_:concat2d_}),concat3d=op({concat3d_:concat3d_}),concat4d=op({concat4d_:concat4d_}),split$1=op({split_:split_});function createCommonjsModule(e,t){return e(t={exports:{}},t.exports),t.exports}var alea=createCommonjsModule(function(e){!function(e,t,n){function r(e,t){return t.c=e.c,t.s0=e.s0,t.s1=e.s1,t.s2=e.s2,t}function o(e,t){var n=new function(e){var t,n=this,r=(t=4022871197,function(e){e=e.toString();for(var n=0;n>>0,t=(r*=t)>>>0,t+=4294967296*(r-=t);}return 2.3283064365386963e-10*(t>>>0)});n.next=function(){var e=2091639*n.s0+2.3283064365386963e-10*n.c;return n.s0=n.s1,n.s1=n.s2,n.s2=e-(n.c=0|e)},n.c=1,n.s0=r(" "),n.s1=r(" "),n.s2=r(" "),n.s0-=r(e),n.s0<0&&(n.s0+=1),n.s1-=r(e),n.s1<0&&(n.s1+=1),n.s2-=r(e),n.s2<0&&(n.s2+=1),r=null;}(e),o=t&&t.state,a=n.next;return a.int32=function(){return 4294967296*n.next()|0},a.double=function(){return a()+1.1102230246251565e-16*(2097152*a()|0)},a.quick=a,o&&("object"==typeof o&&r(o,n),a.state=function(){return r(n,{})}),a}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.alea=o;}(0,e,!1);}),xor128=createCommonjsModule(function(e){!function(e,t,n){function r(e,t){return t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t}function o(e,t){var n=new function(e){var t=this,n="";t.x=0,t.y=0,t.z=0,t.w=0,t.next=function(){var e=t.x^t.x<<11;return t.x=t.y,t.y=t.z,t.z=t.w,t.w^=t.w>>>19^e^e>>>8},e===(0|e)?t.x=e:n+=e;for(var r=0;r>>0)/4294967296};return a.double=function(){do{var e=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21);}while(0===e);return e},a.int32=n.next,a.quick=a,o&&("object"==typeof o&&r(o,n),a.state=function(){return r(n,{})}),a}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.xor128=o;}(0,e,!1);}),xorwow=createCommonjsModule(function(e){!function(e,t,n){function r(e,t){return t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t.v=e.v,t.d=e.d,t}function o(e,t){var n=new function(e){var t=this,n="";t.next=function(){var e=t.x^t.x>>>2;return t.x=t.y,t.y=t.z,t.z=t.w,t.w=t.v,(t.d=t.d+362437|0)+(t.v=t.v^t.v<<4^e^e<<1)|0},t.x=0,t.y=0,t.z=0,t.w=0,t.v=0,e===(0|e)?t.x=e:n+=e;for(var r=0;r>>4),t.next();}(e),o=t&&t.state,a=function(){return (n.next()>>>0)/4294967296};return a.double=function(){do{var e=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21);}while(0===e);return e},a.int32=n.next,a.quick=a,o&&("object"==typeof o&&r(o,n),a.state=function(){return r(n,{})}),a}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.xorwow=o;}(0,e,!1);}),xorshift7=createCommonjsModule(function(e){!function(e,t,n){function r(e,t){return t.x=e.x.slice(),t.i=e.i,t}function o(e,t){null==e&&(e=+new Date);var n=new function(e){var t=this;t.next=function(){var e,n,r=t.x,o=t.i;return e=r[o],n=(e^=e>>>7)^e<<24,n^=(e=r[o+1&7])^e>>>10,n^=(e=r[o+3&7])^e>>>3,n^=(e=r[o+4&7])^e<<7,e=r[o+7&7],n^=(e^=e<<13)^e<<9,r[o]=n,t.i=o+1&7,n},function(e,t){var n,r=[];if(t===(0|t))r[0]=t;else for(t=""+t,n=0;n0;--n)e.next();}(t,e);}(e),o=t&&t.state,a=function(){return (n.next()>>>0)/4294967296};return a.double=function(){do{var e=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21);}while(0===e);return e},a.int32=n.next,a.quick=a,o&&(o.x&&r(o,n),a.state=function(){return r(n,{})}),a}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.xorshift7=o;}(0,e,!1);}),xor4096=createCommonjsModule(function(e){!function(e,t,n){function r(e,t){return t.i=e.i,t.w=e.w,t.X=e.X.slice(),t}function o(e,t){null==e&&(e=+new Date);var n=new function(e){var t=this;t.next=function(){var e,n,r=t.w,o=t.X,a=t.i;return t.w=r=r+1640531527|0,n=o[a+34&127],e=o[a=a+1&127],n^=n<<13,e^=e<<17,n^=n>>>15,e^=e>>>12,n=o[a]=n^e,t.i=a,n+(r^r>>>16)|0},function(e,t){var n,r,o,a,i,s=[],u=128;for(t===(0|t)?(r=t,t=null):(t+="\0",r=0,u=Math.max(u,t.length)),o=0,a=-32;a>>15,r^=r<<4,r^=r>>>13,a>=0&&(i=i+1640531527|0,o=0==(n=s[127&a]^=r+i)?o+1:0);for(o>=128&&(s[127&(t&&t.length||0)]=-1),o=127,a=512;a>0;--a)r=s[o+34&127],n=s[o=o+1&127],r^=r<<13,n^=n<<17,r^=r>>>15,n^=n>>>12,s[o]=r^n;e.w=i,e.X=s,e.i=o;}(t,e);}(e),o=t&&t.state,a=function(){return (n.next()>>>0)/4294967296};return a.double=function(){do{var e=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21);}while(0===e);return e},a.int32=n.next,a.quick=a,o&&(o.X&&r(o,n),a.state=function(){return r(n,{})}),a}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.xor4096=o;}(0,e,!1);}),tychei=createCommonjsModule(function(e){!function(e,t,n){function r(e,t){return t.a=e.a,t.b=e.b,t.c=e.c,t.d=e.d,t}function o(e,t){var n=new function(e){var t=this,n="";t.next=function(){var e=t.b,n=t.c,r=t.d,o=t.a;return e=e<<25^e>>>7^n,n=n-r|0,r=r<<24^r>>>8^o,o=o-e|0,t.b=e=e<<20^e>>>12^n,t.c=n=n-r|0,t.d=r<<16^n>>>16^o,t.a=o-e|0},t.a=0,t.b=0,t.c=-1640531527,t.d=1367130551,e===Math.floor(e)?(t.a=e/4294967296|0,t.b=0|e):n+=e;for(var r=0;r>>0)/4294967296};return a.double=function(){do{var e=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21);}while(0===e);return e},a.int32=n.next,a.quick=a,o&&("object"==typeof o&&r(o,n),a.state=function(){return r(n,{})}),a}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.tychei=o;}(0,e,!1);}),seedrandom=createCommonjsModule(function(e){!function(t,n){var r,o=this,a=256,i=6,s="random",u=n.pow(a,i),c=n.pow(2,52),l=2*c,p=a-1;function d(e,d,g){var v=[],y=f(function e(t,n){var r,o=[],a=typeof t;if(n&&"object"==a)for(r in t)try{o.push(e(t[r],n-1));}catch(e){}return o.length?o:"string"==a?t:t+"\0"}((d=1==d?{entropy:!0}:d||{}).entropy?[e,m(t)]:null==e?function(){try{var e;return r&&(e=r.randomBytes)?e=e(a):(e=new Uint8Array(a),(o.crypto||o.msCrypto).getRandomValues(e)),m(e)}catch(e){var n=o.navigator,i=n&&n.plugins;return [+new Date,o,i,o.screen,m(t)]}}():e,3),v),x=new function(e){var t,n=e.length,r=this,o=0,i=r.i=r.j=0,s=r.S=[];n||(e=[n++]);for(;o=l;)e/=2,t/=2,n>>>=1;return (e+n)/t};return E.int32=function(){return 0|x.g(4)},E.quick=function(){return x.g(4)/4294967296},E.double=E,f(m(x.S),t),(d.pass||g||function(e,t,r,o){return o&&(o.S&&h(o,x),e.state=function(){return h(x,{})}),r?(n[s]=e,t):e})(E,y,"global"in d?d.global:this==n,d.state)}function h(e,t){return t.i=e.i,t.j=e.j,t.S=e.S.slice(),t}function f(e,t){for(var n,r=e+"",o=0;o=1||0===i);var s=Math.sqrt(-2*Math.log(i)/i);t=this.mean+this.stdDev*o*s,n=this.mean+this.stdDev*a*s,this.truncated&&!this.isValidTruncated(t)||(r=!0);}return this.truncated&&!this.isValidTruncated(n)||(this.nextVal=this.convertValue(n)),this.convertValue(t)},e.prototype.convertValue=function(e){return null==this.dtype||"float32"===this.dtype?e:Math.round(e)},e.prototype.isValidTruncated=function(e){return e<=this.upper&&e>=this.lower},e}();function clone_(e){var t=convertToTensor(e,"x","clone",null);return ENV.engine.runKernel(function(e){return Tensor.make(t.shape,{dataId:t.dataId},t.dtype)},{$x:t},function(e){return {$x:function(){return e.toFloat()}}})}function eye_(e,t,n,r){void 0===r&&(r="float32"),null==t&&(t=e);for(var o=buffer([e,t],r),a=e<=t?e:t,i=0;i2)throw new Error("Rank of probabilities must be 1 or 2, but is "+i);n=n||Math.random();var s=1===i?o.as2D(1,-1):o,u=ENV.engine.runKernel(function(e){return e.multinomial(s,r,t,n)},{logits2D:s});return 1===i?u.as1D():u}function oneHot_(e,t,n,r){if(void 0===n&&(n=1),void 0===r&&(r=0),t<2)throw new Error("Error in oneHot: depth must be >=2, but it is "+t);var o=convertToTensor(e,"indices","oneHot","int32"),a=o.shape.concat([t]);o=o.flatten();return ENV.engine.runKernel(function(e){return e.oneHot(o,t,n,r)},{$indices:o},function(e){return {$indices:function(){return zeros(o.shape,"float32")}}}).reshape(a)}function reshape_(e,t){var n=convertToTensor(e,"x","reshape",null);t=inferFromImplicitShape(t,n.size),assert(n.size===sizeFromShape(t),function(){return "new shape and old shape must have the same number of elements."});return ENV.engine.runKernel(function(e){return e.reshape(n,t)},{$x:n},function(e){return {$x:function(){return e.reshape(n.shape)}}})}function squeeze_(e,t){var n=convertToTensor(e,"x","squeeze");return reshape(n,squeezeShape(n.shape,t).newShape)}function cast_(e,t){var n=convertToTensor(e,"x","cast");return ENV.engine.runKernel(function(e){return e.cast(n,t)},{$x:n},function(e){return {$x:function(){return e.clone()}}})}function tile_(e,t){var n=convertToTensor(e,"x","tile");assert(n.rank===t.length,function(){return "Error in transpose: rank of input "+n.rank+" must match length of reps "+t+"."});return ENV.engine.runKernel(function(e,r){var o=e.tile(n,t);return r([n]),o},{$x:n},function(e,n){var r=n[0];return {$x:function(){var n=zerosLike(r);if(1===r.rank)for(var o=0;o=1,function(){return "Pass at least one tensor to tf.stack"}),1===n.length)return n[0].expandDims(t);var r=n[0].rank,o=n[0].shape,a=n[0].dtype;assert(t<=r,function(){return "Axis must be <= rank of the tensor"}),n.forEach(function(e){assertShapesMatch(o,e.shape,"All tensors passed to stack must have matching shapes");}),n.forEach(function(e){assert(a===e.dtype,function(){return "All tensors passed to stack must have matching dtypes"});});var i=n.map(function(e){return e.expandDims(t)});return concat(i,t)}function batchToSpaceND_(e,t,n){var r=convertToTensor(e,"x","batchToSpaceND"),o=t.reduce(function(e,t){return e*t});assert(r.rank>=1+t.length,function(){return "input rank is "+r.rank+" but should be > than blockShape.length "+t.length}),assert(n.length===t.length,function(){return "crops.length is "+n.length+" but should be equal to blockShape.length "+t.length}),assert(r.shape[0]%o==0,function(){return "input tensor batch is "+r.shape[0]+" but is not divisible by the product of the elements of blockShape "+t.join(" * ")+" === "+o});return ENV.engine.runKernel(function(e){return e.batchToSpaceND(r,t,n)},{$x:r},function(e){return {$x:function(){return e.spaceToBatchND(t,n)}}})}function spaceToBatchND_(e,t,n){var r=convertToTensor(e,"x","spaceToBatchND");assert(r.rank>=1+t.length,function(){return "input rank "+r.rank+" should be > than [blockShape] "+t.length}),assert(n.length===t.length,function(){return "paddings.shape[0] "+n.length+" must be equal to [blockShape] "+t.length}),assert(r.shape.reduce(function(e,r,o){return o>0&&o<=t.length?e&&(r+n[o-1][0]+n[o-1][1])%t[o-1]==0:e},!0),function(){return "input spatial dimensions "+r.shape.slice(1)+" with paddings "+n.toString()+" must be divisible by blockShapes "+t.toString()});return ENV.engine.runKernel(function(e){return e.spaceToBatchND(r,t,n)},{$x:r},function(e){return {$x:function(){return e.batchToSpaceND(t,n)}}})}function unstack_(e,t){void 0===t&&(t=0),t=t||0;var n=convertToTensor(e,"x","unstack");assert(t>=-n.shape.length&&t=0,function(){return "Negative dimension size caused by overflow when multiplying\n "+o+" and "+t+" for depthToSpace with input shape\n "+r.shape}),assert(a*t>=0,function(){return "Negative dimension size caused by overflow when multiplying\n "+a+" and "+t+" for depthToSpace with input shape\n "+r.shape}),assert(i%(t*t)==0,function(){return "Dimension size must be evenly divisible by "+t*t+" but is "+i+" for depthToSpace with input shape "+r.shape}),ENV.engine.runKernel(function(e){return e.depthToSpace(r,t,n)},{$x:r})}function setdiff1dAsync_(e,t){return __awaiter(this,void 0,void 0,function(){var n,r,o,a,i,s,u,c,l,p;return __generator(this,function(d){switch(d.label){case 0:return n=convertToTensor(e,"x","setdiff1d"),r=convertToTensor(t,"y","setdiff1d"),assert(n.dtype===r.dtype,function(){return "x and y should have the same dtype, but got x ("+n.dtype+") and y ("+r.dtype+")."}),assert(1===n.rank,function(){return "x should be 1D tensor, but got x ("+n.shape+")."}),assert(1===r.rank,function(){return "y should be 1D tensor, but got y ("+r.shape+")."}),[4,n.data()];case 1:return o=d.sent(),[4,r.data()];case 2:for(a=d.sent(),i=new Set(a),s=0,l=0;l0?this.gpgpu.beginQuery():{startMs:performance.now(),endMs:null}},e.prototype.endTimer=function(e){return ENV.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(this.gpgpu.endQuery(),e):(e.endMs=performance.now(),e)},e.prototype.getQueryTime=function(e){return __awaiter(this,void 0,void 0,function(){var t;return __generator(this,function(n){return ENV.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?[2,this.gpgpu.waitForQueryAndGetTime(e)]:[2,(t=e).endMs-t.startMs]})})},e.prototype.disposeData=function(e){if(!this.pendingDisposal.has(e))if(this.pendingRead.has(e))this.pendingDisposal.add(e);else if(this.texData.has(e)){var t=this.texData.get(e),n=t.texture,r=t.dtype,o=t.texShape,a=t.usage,i=t.complexTensors,s=t.isPacked,u=t.slice;if(null!=n){var c=u&&u.origDataId||e,l=this.dataRefCount.get(c);l>1?this.dataRefCount.set(c,l-1):(this.dataRefCount.delete(c),this.releaseTexture(e,n,o,a,r,s),this.texData.delete(e));}null!=i&&(i.real.dispose(),i.imag.dispose());}},e.prototype.getTexture=function(e){return this.uploadToGPU(e),this.texData.get(e).texture},e.prototype.getCPUBackend=function(){return ENV.get("WEBGL_CPU_FORWARD")?(null==this.cpuBackend&&(this.cpuBackend=ENV.findBackend("cpu")),this.cpuBackend):null},e.prototype.shouldExecuteOnCPU=function(e,t){var n=this;return void 0===t&&(t=CPU_HANDOFF_SIZE_THRESHOLD),null!=this.getCPUBackend()&&e.every(function(e){return null==n.texData.get(e.dataId).texture&&e.sizeENV.get("WEBGL_MAX_TEXTURES_IN_SHADER")){var n=Math.floor(e.length/2),r=this.concat(e.slice(0,n),t),o=this.concat(e.slice(n),t);return this.concat([r,o],t)}if(ENV.get("WEBGL_PACK_ARRAY_OPERATIONS")&&e[0].rank>1){var a=new ConcatPackedProgram(e.map(function(e){return e.shape}),t);return this.compileAndRun(a,e)}var i=computeOutShape(e.map(function(e){return e.shape}),t),s=e.map(function(e){return e.as2D(-1,sizeFromShape(e.shape.slice(t)))}),u=new ConcatProgram(s.map(function(e){return e.shape}));return this.compileAndRun(u,s).reshape(i)},e.prototype.neg=function(e){var t=new UnaryOpProgram(e.shape,NEG);return this.compileAndRun(t,[e])},e.prototype.batchMatMul=function(e,t,n,r){var o=n?e.shape[2]:e.shape[1],a=r?t.shape[1]:t.shape[2],i=n?e.shape[1]:e.shape[2],s=e.shape[0];if((1===o||1===a)&&i>MATMUL_SHARED_DIM_THRESHOLD){n&&(e=e.transpose([0,2,1])),r&&(t=t.transpose([0,2,1]));var u=1===a?e:e.as3D(s,i,1),c=1===a?2:1,l=1===a?t.as3D(s,1,i):t;return this.multiply(u,l).sum(c,!0)}var p=upcastType(e.dtype,t.dtype),d=new MatMulPackedProgram(e.shape,[s,o,a],n,r),h=this.makePackedTensor(d.outputShape,p);return this.compileAndRun(d,[e,t],h)},e.prototype.fusedBatchMatMul=function(e,t,n,r,o,a){var i=n?e.shape[2]:e.shape[1],s=r?t.shape[1]:t.shape[2],u=e.shape[0],c=upcastType(e.dtype,t.dtype),l=new MatMulPackedProgram(e.shape,[u,i,s],n,r,!!o,a?mapActivationToShaderProgram(a,!0):null),p=this.makePackedTensor(l.outputShape,c),d=[e,t];return o&&d.push(o),this.compileAndRun(l,d,p)},e.prototype.multiply=function(e,t){if("complex64"===e.dtype){var n=this.texData.get(e.dataId),r=this.texData.get(t.dataId),o=new BinaryOpComplexProgram(COMPLEX_MULTIPLY.REAL,e.shape,t.shape),a=new BinaryOpComplexProgram(COMPLEX_MULTIPLY.IMAG,e.shape,t.shape),i=[this.makeComplexComponentTensorHandle(e,n.complexTensors.real),this.makeComplexComponentTensorHandle(e,n.complexTensors.imag),this.makeComplexComponentTensorHandle(t,r.complexTensors.real),this.makeComplexComponentTensorHandle(t,r.complexTensors.imag)],s=this.compileAndRun(o,i),u=this.compileAndRun(a,i),c=this.complex(s,u);return s.dispose(),u.dispose(),c}if(this.shouldExecuteOnCPU([e,t]))return this.cpuBackend.multiply(e,t);if(ENV.get("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,t,MUL,e.dtype);var l=new BinaryOpProgram(MUL,e.shape,t.shape),p=this.makeOutputArray(l.outputShape,e.dtype);return this.compileAndRun(l,[e,t],p)},e.prototype.batchNormalization=function(e,t,n,r,o,a){var i=[e,t,n],s=null;null!=a&&(s=a.shape,i.push(a));var u=null;if(null!=o&&(u=o.shape,i.push(o)),ENV.get("WEBGL_PACK_BATCHNORMALIZATION")){var c=new BatchNormPackedProgram(e.shape,t.shape,n.shape,s,u,r);return this.compileAndRun(c,i)}var l=new BatchNormProgram(e.shape,t.shape,n.shape,s,u,r);return this.compileAndRun(l,i)},e.prototype.localResponseNormalization4D=function(e,t,n,r,o){var a=new LRNProgram(e.shape,t,n,r,o);return this.compileAndRun(a,[e])},e.prototype.LRNGrad=function(e,t,n,r,o,a,i){var s=new LRNGradProgram(t.shape,r,o,a,i);return this.compileAndRun(s,[t,n,e])},e.prototype.tile=function(e,t){var n=new TileProgram(e.shape,t);return this.compileAndRun(n,[e])},e.prototype.pad=function(e,t,n){var r=ENV.get("WEBGL_PACK_ARRAY_OPERATIONS")?new PadPackedProgram(e.shape,t,n):new PadProgram(e.shape,t,n);return this.compileAndRun(r,[e])},e.prototype.transpose=function(e,t){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.transpose(e,t);var n=ENV.get("WEBGL_PACK_ARRAY_OPERATIONS")?new TransposePackedProgram(e.shape,t):new TransposeProgram(e.shape,t);return this.compileAndRun(n,[e])},e.prototype.gather=function(e,t,n){if(this.shouldExecuteOnCPU([e,t]))return this.cpuBackend.gather(e,t,n);var r=new GatherProgram(e.shape,t.size,n);return this.compileAndRun(r,[e,t])},e.prototype.batchToSpaceND=function(e,t,n){assert(e.rank<=4,function(){return "batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"});var r=t.reduce(function(e,t){return e*t}),o=getReshaped(e.shape,t,r),a=getPermuted(o.length,t.length),i=getReshapedPermuted(e.shape,t,r),s=getSliceBeginCoords(n,t.length),u=getSliceSize(i,n,t.length);return e.reshape(o).transpose(a).reshape(i).slice(s,u)},e.prototype.spaceToBatchND=function(e,t,n){assert(e.rank<=4,function(){return "spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"});var r=t.reduce(function(e,t){return e*t}),o=[[0,0]];o.push.apply(o,n);for(var a=1+t.length;aMATMUL_SHARED_DIM_THRESHOLD,c=r[2]%2!=0&&!!o.isPacked;if(u||!ENV.get("WEBGL_LAZILY_UNPACK")||!ENV.get("WEBGL_PACK_BINARY_OPERATIONS")||!c){var l=this.reshape(e,[1,r[0]*r[1]*r[2],n.inChannels]),p=this.reshape(t,[1,n.inChannels,n.outChannels]);return this.reshape(this.batchMatMul(l,p,!1,!1),n.outShape)}var d=Tensor.make([1,r[0]*r[1]*(r[2]+1),n.inChannels],{dataId:e.dataId},e.dtype,this),h=o.shape;o.shape=o.shape.slice(),o.shape[o.shape.length-2]++,assert(isReshapeFree(o.shape,d.shape),function(){return "packed reshape "+o.shape+" to "+d.shape+" isn't free"});var f=this.reshape(t,[1,n.inChannels,n.outChannels]),m=this.batchMatMul(d,f,!1,!1),g=this.texData.get(m.dataId);return assert(g.isPacked,function(){return "batchMatMul result is expected to be packed"}),o.shape=h,g.shape=n.outShape,Tensor.make(n.outShape,{dataId:m.dataId},m.dtype,this)},e.prototype.conv2dWithIm2Row=function(e,t,n){var r=n.filterWidth,o=n.filterHeight,a=n.inChannels,i=n.outWidth,s=n.outHeight,u=r*o*a,c=s*i,l=[u,c],p=e.squeeze([0]),d=t.reshape([1,u,-1]),h=new Im2ColPackedProgram(l,p.shape,n),f=this.compileAndRun(h,[p]).reshape([1,l[0],l[1]]),m=new MatMulPackedProgram(f.shape,[1,c,n.outChannels],!0,!1);return this.compileAndRun(m,[f,d]).reshape([1,s,i,n.outChannels])},e.prototype.conv2d=function(e,t,n){if(1===n.filterHeight&&1===n.filterWidth&&1===n.dilationHeight&&1===n.dilationWidth&&1===n.strideHeight&&1===n.strideWidth&&("SAME"===n.padInfo.type||"VALID"===n.padInfo.type))return this.conv2dByMatMul(e,t,n);if(ENV.get("WEBGL_CONV_IM2COL")&&1===e.shape[0])return this.conv2dWithIm2Row(e,t,n);var r=new Conv2DProgram(n);return this.compileAndRun(r,[e,t])},e.prototype.conv2dDerInput=function(e,t,n){var r=new Conv2DDerInputProgram(n);return this.compileAndRun(r,[e,t])},e.prototype.conv2dDerFilter=function(e,t,n){var r=new Conv2DDerFilterProgram(n);return this.compileAndRun(r,[e,t])},e.prototype.depthwiseConv2D=function(e,t,n){var r;return ENV.get("WEBGL_PACK_DEPTHWISECONV")&&n.strideWidth<=2&&n.outChannels/n.inChannels==1?(r=new DepthwiseConvPacked2DProgram(n),this.compileAndRun(r,[e,t],this.makePackedTensor(n.outShape,e.dtype))):(r=new DepthwiseConv2DProgram(n),this.compileAndRun(r,[e,t]))},e.prototype.depthwiseConv2DDerInput=function(e,t,n){var r=new DepthwiseConv2DDerInputProgram(n);return this.compileAndRun(r,[e,t])},e.prototype.depthwiseConv2DDerFilter=function(e,t,n){var r=new DepthwiseConv2DDerFilterProgram(n);return this.compileAndRun(r,[e,t])},e.prototype.conv3d=function(e,t,n){var r=new Conv3DProgram(n);return this.compileAndRun(r,[e,t])},e.prototype.conv3dDerInput=function(e,t,n){var r=new Conv3DDerInputProgram(n);return this.compileAndRun(r,[e,t])},e.prototype.conv3dDerFilter=function(e,t,n){var r=new Conv3DDerFilterProgram(n);return this.compileAndRun(r,[e,t])},e.prototype.maxPool=function(e,t){var n=new Pool2DProgram(t,"max",!1),r=this.makeOutputArray(n.outputShape,e.dtype);return this.compileAndRun(n,[e],r)},e.prototype.avgPool=function(e,t){var n=new Pool2DProgram(t,"avg",!1),r=this.makeOutputArray(n.outputShape,"float32");return this.compileAndRun(n,[e],r)},e.prototype.maxPoolBackprop=function(e,t,n,r){var o=new Pool2DProgram(r,"max",!0),a=this.compileAndRun(o,[t]),i=new MaxPool2DBackpropProgram(r),s=this.makeOutputArray(i.outputShape,t.dtype),u=this.compileAndRun(i,[e,a],s);return a.dispose(),u},e.prototype.avgPoolBackprop=function(e,t,n){var r=new AvgPool2DBackpropProgram(n),o=this.makeOutputArray(r.outputShape,t.dtype);return this.compileAndRun(r,[e],o)},e.prototype.cast=function(e,t){return castTensor(e,t,this)},e.prototype.unstack=function(e,t){for(var n=e.shape[t],r=new Array(e.rank-1),o=0,a=0;a1,function(){return "blockSize should be > 1 for depthToSpace, but was: "+t});var r=e.shape[0],o="NHWC"===n?e.shape[1]:e.shape[2],a="NHWC"===n?e.shape[2]:e.shape[3],i="NHWC"===n?e.shape[3]:e.shape[1],s=o*t,u=a*t,c=i/(t*t),l=new DepthToSpaceProgram("NHWC"===n?[r,s,u,c]:[r,c,s,u],t,n);return this.compileAndRun(l,[e])},e.prototype.split=function(e,t,n){return split(e,t,n)},e.prototype.scatterND=function(e,t,n){var r=calculateShapes(t,e,n),o=r.sliceRank,a=r.numUpdates,i=r.sliceSize,s=r.strides,u=r.outputSize,c=[u/i,i],l=e.reshape([a,o]),p=t.reshape([a,i]);if(0===u)return reshapeTensor(tensor([]),n);var d=scalar(0),h=new ScatterProgram(a,o,l.rank,p.rank,s,c);return this.compileAndRun(h,[p,l,d]).reshape(n)},e.prototype.sparseToDense=function(e,t,n,r){var o=calculateShapes(t,e,n),a=o.sliceRank,i=o.numUpdates,s=o.strides,u=o.outputSize,c=new ScatterProgram(i,a,e.rank,t.rank,s,[u,1],!1);return this.compileAndRun(c,[t,e,r]).reshape(n)},e.prototype.fft=function(e){return this.fftImpl(e,!1)},e.prototype.ifft=function(e){return this.fftImpl(e,!0)},e.prototype.fftImpl=function(e,t){var n=this.texData.get(e.dataId),r=new FFTProgram(COMPLEX_FFT.REAL,e.shape,t),o=new FFTProgram(COMPLEX_FFT.IMAG,e.shape,t),a=[this.makeComplexComponentTensorHandle(e,n.complexTensors.real),this.makeComplexComponentTensorHandle(e,n.complexTensors.imag)],i=this.compileAndRun(r,a),s=this.compileAndRun(o,a),u=this.complex(i,s).as2D(e.shape[0],e.shape[1]);return i.dispose(),s.dispose(),u},e.prototype.gatherND=function(e,t){var n=t.shape,r=n[n.length-1],o=prepareAndValidate(e,t),a=o[0],i=o[1],s=o[2],u=o[3],c=t.reshape([i,r]),l=e.reshape([e.size/s,s]),p=new GatherNDProgram(r,u,[i,s]);return this.compileAndRun(p,[l,c]).reshape(a)},e.prototype.fill=function(e,t,n){if("string"===(n=n||inferDtype(t))){var r=getArrayFromDType(n,sizeFromShape(e));return r.fill(t),Tensor.make(e,{values:r},n)}var o=new FillProgram(e,t),a=o.getCustomSetupFunc(t),i=this.makeOutputArray(e,n);return this.compileAndRun(o,[],i,a)},e.prototype.onesLike=function(e){if("string"===e.dtype)throw new Error("onesLike is not supported under string dtype");return this.fill(e.shape,1,e.dtype)},e.prototype.zerosLike=function(e){return this.fill(e.shape,"string"===e.dtype?"":0,e.dtype)},e.prototype.makeOutputArray=function(e,t){return Tensor.make(e,{},t,this)},e.prototype.makePackedTensor=function(e,t){var n=Tensor.make(e,{},t,this);return this.texData.get(n.dataId).isPacked=!0,n},e.prototype.unpackTensor=function(e){var t=new UnpackProgram(e.shape);return this.compileAndRun(t,[e],Tensor.make(t.outputShape,{},e.dtype,this))},e.prototype.packTensor=function(e){var t=new PackProgram(e.shape);return this.compileAndRun(t,[e],this.makePackedTensor(e.shape,e.dtype))},e.prototype.packedReshape=function(e,t){var n=e.reshape([getBatchDim(e.shape)].concat(getRowsCols(e.shape))),r=[getBatchDim(t)].concat(getRowsCols(t)),o=new ReshapePackedProgram(r,n.shape);return this.compileAndRun(o,[n]).reshape(t)},e.prototype.compileAndRun=function(e,t,n,r,o){var a=this;if(void 0===o&&(o=!0),null==n&&(n=e.usesPackedTextures?this.makePackedTensor(e.outputShape,t[0].dtype):this.makeOutputArray(e.outputShape,t[0].dtype)),0===n.size)return this.texData.get(n.dataId).values=getTypedArrayFromDType(n.dtype,0),n;var i=t.map(function(t){if("complex64"===t.dtype)throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");var n=a.texData.get(t.dataId);if(null==n.texture){if(!e.usesPackedTextures&&sizeFromShape(t.shape)<=ENV.get("WEBGL_SIZE_UPLOAD_UNIFORM"))return {shape:t.shape,texData:null,isUniform:!0,uniformValues:a.readSync(t.dataId)};e.usesPackedTextures&&(n.isPacked=!0,n.shape=t.shape);}else if(!!n.isPacked!=!!e.usesPackedTextures)t=n.isPacked?a.unpackTensor(t):a.packTensor(t),n=a.texData.get(t.dataId);else if(n.isPacked&&!isReshapeFree(n.shape,t.shape)){var r=t,o=t.shape;t.shape=n.shape,t=a.packedReshape(t,o),n=a.texData.get(t.dataId),r.shape=o;}return a.uploadToGPU(t.dataId),{shape:t.shape,texData:n,isUniform:!1}});this.uploadToGPU(n.dataId);var s,u={shape:n.shape,texData:this.texData.get(n.dataId),isUniform:!1},c=makeShaderKey(e,i,u),l=this.getAndSaveBinary(c,function(){return compileProgram(a.gpgpu,e,i,u)}),p=null!=this.activeTimers;p&&(s=this.startTimer()),runProgram(this.gpgpu,l,i,u,r);var d=1024*ENV.get("WEBGL_NUM_MB_BEFORE_PAGING");if(o&&this.numBytesInGPU>d)for(var h=this.numBytesInGPU-d;h>0&&this.lruDataGPU.length>0;){var f=this.lruDataGPU.shift(),m=this.texData.get(f),g=m.texShape,v=m.dtype;h-=this.computeBytes(g,v),this.read(f);}return p&&(s=this.endTimer(s),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(s)})),ENV.get("WEBGL_LAZILY_UNPACK")||!this.texData.get(n.dataId).isPacked||e.isPackShader?n:this.unpackTensor(n)},e.prototype.getAndSaveBinary=function(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]},e.prototype.getTextureManager=function(){return this.textureManager},e.prototype.dispose=function(){this.disposed||(this.textureManager.dispose(),this.canvas.remove(),null!=this.fromPixels2DContext&&this.fromPixels2DContext.canvas.remove(),this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0);},e.prototype.floatPrecision=function(){var e=this;return tidy(function(){var t=ENV.get("DEBUG");ENV.set("DEBUG",!1);var n=e.abs(scalar(1e-8)).dataSync()[0];return ENV.set("DEBUG",t),n>0?32:16})},e.prototype.uploadToGPU=function(e){var t,n=this.texData.get(e),r=n.shape,o=n.dtype,a=n.values,i=n.texture,s=n.usage,u=n.isPacked;if(null==i){var c,l=null!=this.activeTimers;l&&(c=performance.now());var p=getTextureShapeFromLogicalShape(r,u);n.texShape=p;var d=this.acquireTexture(e,p,s,o,u);if(n.texture=d,null!=a){if(u){var h=getBatchDim(r),f=1,m=1;r.length&&(f=(t=getRowsCols(r))[0],m=t[1]),this.gpgpu.uploadMatrixToPackedTexture(d,h,f,m,p[0],p[1],typedArrayToFloat32(a));}else this.gpgpu.uploadMatrixToTexture(d,p[0],p[1],typedArrayToFloat32(a));n.values=null,l&&(this.uploadWaitMs+=performance.now()-c);}}else{ENV.get("WEBGL_NUM_MB_BEFORE_PAGING")=0&&(this.lruDataGPU.splice(this.lruDataGPU.indexOf(e),1),this.lruDataGPU.push(e));}},e.prototype.convertAndCacheOnCPU=function(e,t){var n=this.texData.get(e),r=n.texture,o=n.texShape,a=n.dtype,i=n.usage,s=n.isPacked;return null!=r&&(this.releaseTexture(e,r,o,i,a,s),n.texture=null,n.texShape=null,n.isPacked=!1),n.usage=TextureUsage.UPLOAD,null!=t&&(n.values=float32ToTypedArray(t,a)),n.values},e.prototype.releaseTexture=function(e,t,n,r,o,a){if(ENV.get("WEBGL_NUM_MB_BEFORE_PAGING")=0&&this.lruDataGPU.splice(i,1);}this.numBytesInGPU-=this.computeBytes(n,o),this.textureManager.releaseTexture(t,n,r,a);},e.prototype.acquireTexture=function(e,t,n,r,o){return ENV.get("WEBGL_NUM_MB_BEFORE_PAGING")=2&&i.rank>=2&&a.rank===i.rank,function(){return "Error in matMul: inputs must have the same rank of at least 2, got ranks "+a.rank+" and "+i.rank+"."}),assert(arraysEqual(p,d),function(){return "Error in matMul: outer dimensions ("+p+") and ("+d+") of Tensors with shapes "+a.shape+" and "+i.shape+" must match."}),assert(s===u,function(){return "Error in matMul: inner shapes ("+s+") and ("+u+") of Tensors with shapes "+a.shape+" and "+i.shape+" and transposeA="+n+" and transposeB="+r+" must match."});var m=a.shape.slice(0,-2).concat([c,l]),g=n?a.as3D(h,s,c):a.as3D(h,c,s),v=r?i.as3D(f,l,u):i.as3D(f,u,l);return ENV.engine.runKernel(function(e,t){var o=e.batchMatMul(g,v,n,r);return t([g,v]),o},{$a:g,$b:v},function(e,t){var o=t,a=o[0],i=o[1];return n||r?!n&&r?{$a:function(){return e.matMul(i,!1,!1)},$b:function(){return e.matMul(a,!0,!1)}}:n&&!r?{$a:function(){return i.matMul(e,!1,!0)},$b:function(){return a.matMul(e,!1,!1)}}:{$a:function(){return i.matMul(e,!0,!0)},$b:function(){return e.matMul(a,!0,!0)}}:{$a:function(){return e.matMul(i,!1,!0)},$b:function(){return a.matMul(e,!0,!1)}}}).reshape(m)}function outerProduct_(e,t){var n=convertToTensor(e,"v1","outerProduct"),r=convertToTensor(t,"v2","outerProduct");return assert(1===n.rank&&1===r.rank,function(){return "Error in outerProduct: inputs must be rank 1, but got ranks "+n.rank+" and "+r.rank+"."}),n.as2D(-1,1).matMul(r.as2D(1,-1))}function dot_(e,t){var n=convertToTensor(e,"t1","dot"),r=convertToTensor(t,"t2","dot");assert(!(1!==n.rank&&2!==n.rank||1!==r.rank&&2!==r.rank),function(){return "Error in dot: inputs must all be rank 1 or 2, but got ranks "+n.rank+" and "+r.rank+"."});var o=1===n.rank?n.size:n.shape[1],a=1===r.rank?r.size:r.shape[0];return assert(o===a,function(){return "Error in dot: inner dimensions of inputs must match, but got "+o+" and "+a+"."}),1===n.rank&&1===r.rank?n.as2D(1,-1).matMul(r.as2D(-1,1)).asScalar():1===n.rank&&2===r.rank?n.as2D(1,-1).matMul(r.as2D(r.shape[0],r.shape[1])).as1D():2===n.rank&&1===r.rank?n.matMul(r.as2D(-1,1)).as1D():n.matMul(r.as2D(r.shape[0],r.shape[1]))}var matMul=op({matMul_:matMul_}),dot=op({dot_:dot_}),outerProduct=op({outerProduct_:outerProduct_});function reverse1d_(e){var t=convertToTensor(e,"x","reverse");return assert(1===t.rank,function(){return "Error in reverse1D: x must be rank 1 but got rank "+t.rank+"."}),reverse(t,0)}function reverse2d_(e,t){var n=convertToTensor(e,"x","reverse");return assert(2===n.rank,function(){return "Error in reverse2D: x must be rank 2 but got rank "+n.rank+"."}),reverse(n,t)}function reverse3d_(e,t){var n=convertToTensor(e,"x","reverse");return assert(3===n.rank,function(){return "Error in reverse3D: x must be rank 3 but got rank "+n.rank+"."}),reverse(n,t)}function reverse4d_(e,t){var n=convertToTensor(e,"x","reverse");return assert(4===n.rank,function(){return "Error in reverse4D: x must be rank 4 but got rank "+n.rank+"."}),reverse(n,t)}function reverse_(e,t){var n=convertToTensor(e,"x","reverse");if(0===n.rank)return n.clone();var r=parseAxisParam(t,n.shape);return ENV.engine.runKernel(function(e){return e.reverse(n,r)},{$x:n},function(e){return {$x:function(){return e.reverse(r)}}}).reshapeAs(n)}var reverse=op({reverse_:reverse_}),reverse1d=op({reverse1d_:reverse1d_}),reverse2d=op({reverse2d_:reverse2d_}),reverse3d=op({reverse3d_:reverse3d_}),reverse4d=op({reverse4d_:reverse4d_});function maxPoolImpl_(e,t,n,r,o,a){var i=convertToTensor(e,"x","maxPool"),s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),null==r&&(r=[1,1]),assert(4===s.rank,function(){return "Error in maxPool: input must be rank 4 but got rank "+s.rank+"."}),assert(eitherStridesOrDilationsAreOne(n,r),function(){return "Error in maxPool: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+r+"'"}),null!=a&&assert(isInt(o),function(){return "Error in maxPool: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+o+"."});var c=computePool2DInfo(s.shape,t,n,r,o,a),l=ENV.engine.runKernel(function(e,t){var n=e.maxPool(s,c);return t([s,n]),n},{x:s},function(e,a){var i=a[0],s=a[1];return {x:function(){return maxPoolBackprop(e,i,s,t,n,r,o)}}});return u?l.as3D(l.shape[1],l.shape[2],l.shape[3]):l}function maxPool_(e,t,n,r,o){return maxPoolImpl_(e,t,n,1,r,o)}function avgPoolImpl_(e,t,n,r,o,a){var i=convertToTensor(e,"x","avgPool","float32");null==r&&(r=[1,1]),assert(eitherStridesOrDilationsAreOne(n,r),function(){return "Error in avgPool: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+r+"'"});var s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),assert(4===s.rank,function(){return "Error in avgPool: x must be rank 4 but got rank "+s.rank+"."}),null!=a&&assert(isInt(o),function(){return "Error in avgPool: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+o+"."});var c=computePool2DInfo(s.shape,t,n,r,o,a),l=ENV.engine.runKernel(function(e){return e.avgPool(s,c)},{x:s},function(e){return {x:function(){return avgPoolBackprop(e,s,t,n,r,o)}}});return l=l.cast(i.dtype),u?l.as3D(l.shape[1],l.shape[2],l.shape[3]):l}function avgPool_(e,t,n,r,o){return avgPoolImpl_(e,t,n,1,r,o)}function pool_(e,t,n,r,o,a){null==o&&(o=[1,1]),null==a&&(a=1),0===r&&(r="valid");var i=convertToTensor(e,"x","maxPool"),s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),assert(eitherStridesOrDilationsAreOne(a,o),function(){return "Error in pool: Either strides or dilations must be 1. Got strides "+a+" and dilations '"+o+"'"});var c,l=computePool2DInfo(s.shape,t,a,o,r),p=[l.dilationHeight,l.dilationWidth];c="same"===r?withSpaceToBatchBasePaddings([l.filterHeight,l.filterWidth],p):[[0,0],[0,0]];var d=1===p[0]&&1===p[1],h=requiredSpaceToBatchPaddings([l.inHeight,l.inWidth],p,c),f=h[0],m=h[1],g=d?r:"valid",v=d?s:spaceToBatchND(s,p,f),y=("avg"===n?function(){return avgPoolImpl_(v,t,a,1,g)}:function(){return maxPoolImpl_(v,t,a,1,g)})(),x=d?y:batchToSpaceND(y,p,m);return u?x.as3D(x.shape[1],x.shape[2],x.shape[3]):x}function maxPoolBackprop(e,t,n,r,o,a,i,s){var u=convertToTensor(e,"dy","maxPoolBackprop"),c=convertToTensor(t,"input","maxPoolBackprop"),l=convertToTensor(n,"output","maxPoolBackprop");assert(c.rank===u.rank,function(){return "Rank of input ("+c.rank+") does not match rank of dy ("+u.rank+")"}),null==a&&(a=[1,1]),assert(eitherStridesOrDilationsAreOne(o,a),function(){return "Error in maxPoolBackProp: Either strides or dilations must be 1. Got strides "+o+" and dilations '"+a+"'"}),assert(4===u.rank,function(){return "Error in maxPoolBackprop: dy must be rank 4 but got rank "+u.rank+"."}),assert(4===c.rank,function(){return "Error in maxPoolBackprop: input must be rank 4 but got rank "+c.rank+"."}),null!=s&&assert(isInt(i),function(){return "Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode "+s+" but got pad "+i+"."});var p=computePool2DInfo(c.shape,r,o,a,i,s);return ENV.engine.runKernel(function(e){return e.maxPoolBackprop(u,c,l,p)},{$dy:u,$input:c})}function avgPoolBackprop(e,t,n,r,o,a){var i=convertToTensor(e,"dy","avgPoolBackprop"),s=convertToTensor(t,"input","avgPoolBackprop");assert(s.rank===i.rank,function(){return "Rank of input ("+s.rank+") does not match rank of dy ("+i.rank+")"}),null==o&&(o=[1,1]),assert(eitherStridesOrDilationsAreOne(r,o),function(){return "Error in avgPoolBackprop: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+o+"'"});var u=s,c=i,l=!1;3===s.rank&&(l=!0,u=s.as4D(1,s.shape[0],s.shape[1],s.shape[2]),c=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),assert(4===c.rank,function(){return "Error in avgPoolBackprop: dy must be rank 4 but got rank "+c.rank+"."}),assert(4===u.rank,function(){return "Error in avgPoolBackprop: input must be rank 4 but got rank "+u.rank+"."});var p=computePool2DInfo(u.shape,n,r,o,a),d=ENV.engine.runKernel(function(e){return e.avgPoolBackprop(c,u,p)},{dy4D:c,input4D:u});return l?d.as3D(d.shape[1],d.shape[2],d.shape[3]):d}function requiredSpaceToBatchPaddings(e,t,n){var r=n.map(function(e){return e[0]}),o=n.map(function(e){return e[1]}),a=e.concat(r,o),i=t.map(function(e,t){return (e-a[t]%e)%e}),s=o.map(function(e,t){return e+i[t]});return [t.map(function(e,t){return [r[t],s[t]]}),t.map(function(e,t){return [0,i[t]]})]}function withSpaceToBatchBasePaddings(e,t){var n=e.map(function(e,n){return e+(e-1)*(t[n]-1)}).map(function(e){return e-1}),r=n.map(function(e){return Math.floor(e/2)}),o=n.map(function(e,t){return e-r[t]});return n.map(function(e,t){return [r[t],o[t]]})}var maxPool=op({maxPool_:maxPool_}),avgPool=op({avgPool_:avgPool_}),pool=op({pool_:pool_});function slice1d_(e,t,n){var r=convertToTensor(e,"x","slice1d");return assert(1===r.rank,function(){return "slice1d expects a rank-1 tensor, but got a rank-"+r.rank+" tensor"}),slice(r,[t],[n])}function slice2d_(e,t,n){var r=convertToTensor(e,"x","slice2d");return assert(2===r.rank,function(){return "slice2d expects a rank-2 tensor, but got a rank-"+r.rank+" tensor"}),slice(r,t,n)}function slice3d_(e,t,n){var r=convertToTensor(e,"x","slice3d");return assert(3===r.rank,function(){return "slice3d expects a rank-3 tensor, but got a rank-"+r.rank+" tensor"}),slice(r,t,n)}function slice4d_(e,t,n){var r=convertToTensor(e,"x","slice4d");return assert(4===r.rank,function(){return "slice4d expects a rank-4 tensor, but got a rank-"+r.rank+" tensor"}),slice(r,t,n)}function slice_(e,t,n){var r,o,a=convertToTensor(e,"x","slice");if(0===a.rank)throw new Error("Slicing scalar is not possible");r="number"==typeof t?[t].concat(new Array(a.rank-1).fill(0)):t.length=0?e:(assert(-1===e,function(){return "Bad value in size"}),a.shape[t]-r[t])}),assertParamsValid(a,r,o);var i=a.shape;return ENV.engine.runKernel(function(e){return e.slice(a,r,o)},{$x:a},function(e){for(var t=[],n=0;n0&&(t=t.sum(n)),t.reshape(r.shape)},$b:function(){var t=e,n=getReductionAxes(o.shape,a);return n.length>0&&(t=t.sum(n)),t.reshape(o.shape)}}})}function addN_(e){assert(Array.isArray(e),function(){return "The argument passed to tf.addN() must be a list of tensors"}),assert(e.length>=1,function(){return "Must pass at least one tensor to tf.addN(), but got "+e.length});var t=e.map(function(e,t){return convertToTensor(e,"tensors"+t,"addN")}),n=t[0];t.forEach(function(e){if(e.dtype!==n.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(function(e){if(!arraysEqual(e.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});var r=t;return ENV.engine.runKernel(function(e){return e.addN(t)},r,function(e){var n={};return t.forEach(function(t,r){n[r]=function(){return e.clone()};}),n})}function addStrict_(e,t){var n=convertToTensor(e,"a","addStrict"),r=convertToTensor(t,"b","addStrict");return assertShapesMatch(n.shape,r.shape,"Error in addStrict: "),n.add(r)}function sub_(e,t){var n,r=convertToTensor(e,"a","sub"),o=convertToTensor(t,"b","sub");n=makeTypesMatch(r,o),r=n[0],o=n[1];var a=assertAndGetBroadcastShape(r.shape,o.shape);return ENV.engine.runKernel(function(e){return e.subtract(r,o)},{$a:r,$b:o},function(e){return {$a:function(){var t=e,n=getReductionAxes(r.shape,a);return n.length>0&&(t=t.sum(n)),t.reshape(r.shape)},$b:function(){var t=e,n=getReductionAxes(o.shape,a);return n.length>0&&(t=t.sum(n)),t.neg().reshape(o.shape)}}})}function subStrict_(e,t){var n=convertToTensor(e,"a","subStrict"),r=convertToTensor(t,"b","subStrict");return assertShapesMatch(n.shape,r.shape,"Error in subStrict: "),n.sub(r)}function pow_(e,t){var n=convertToTensor(e,"base","pow"),r=convertToTensor(t,"exp","pow"),o=assertAndGetBroadcastShape(n.shape,r.shape);e=n.cast(upcastType(n.dtype,r.dtype)),t=r.cast(upcastType(n.dtype,r.dtype));return ENV.engine.runKernel(function(e,t){var o=e.pow(n,r);return t([n,r,o]),o},{$base:n,$exp:r},function(e,t){var n=t[0],r=t[1],a=t[2];return {$base:function(){var t=r.toFloat(),a=e.mul(t.mul(n.pow(t.sub(scalar(1))))),i=getReductionAxes(n.shape,o);return i.length>0&&(a=a.sum(i)),a.reshape(n.shape)},$exp:function(){var t=n.greater(0),i=n.log().where(t,zerosLike(n)),s=e.mul(a.mul(i)),u=getReductionAxes(r.shape,o);return u.length>0&&(s=s.sum(u)),s.reshape(r.shape)}}})}function powStrict_(e,t){return assertShapesMatch(e.shape,t.shape,"Error in powStrict: "),e.pow(t)}function mul_(e,t){var n,r=convertToTensor(e,"a","mul"),o=convertToTensor(t,"b","mul");n=makeTypesMatch(r,o),r=n[0],o=n[1];var a=assertAndGetBroadcastShape(r.shape,o.shape);return ENV.engine.runKernel(function(e,t){var n=e.multiply(r,o);return t([r,o]),n},{$a:r,$b:o},function(e,t){var n=t[0],r=t[1];return {$a:function(){var t=e.mul(r.toFloat()),o=getReductionAxes(n.shape,a);return o.length>0?t.sum(o).reshape(n.shape):t},$b:function(){var t=e.mul(n.toFloat()),o=getReductionAxes(r.shape,a);return o.length>0?t.sum(o).reshape(r.shape):t}}})}function mulStrict_(e,t){var n=convertToTensor(e,"a","mul"),r=convertToTensor(t,"b","mul");return assertShapesMatch(n.shape,r.shape,"Error in multiplyStrict: "),n.mul(r)}function div_(e,t){var n,r=convertToTensor(e,"a","div"),o=convertToTensor(t,"b","div");if(n=makeTypesMatch(r,o),r=n[0],o=n[1],"int32"===r.dtype&&"int32"===o.dtype)return floorDiv(r,o);var a=assertAndGetBroadcastShape(r.shape,o.shape);return ENV.engine.runKernel(function(e,t){var n=e.realDivide(r,o);return t([r,o]),n},{$a:r,$b:o},function(e,t){var n=t[0],r=t[1];return {$a:function(){var t=e.div(r.toFloat()),o=getReductionAxes(n.shape,a);return o.length>0?t.sum(o).reshape(n.shape):t},$b:function(){var t=e.mul(n.toFloat()),o=getReductionAxes(r.shape,a);o.length>0&&(t=t.sum(o).reshape(r.shape));var i=r.square();return t.div(i.toFloat()).neg()}}})}function floorDiv_(e,t){var n,r=convertToTensor(e,"a","floorDiv"),o=convertToTensor(t,"b","floorDiv");n=makeTypesMatch(r,o),r=n[0],o=n[1];var a=assertAndGetBroadcastShape(r.shape,o.shape);return ENV.engine.runKernel(function(e,t){var n=e.floorDiv(r,o);return t([r,o]),n},{$a:r,$b:o},function(e,t){var n=t[0],r=t[1];return {$a:function(){var t=e.div(r.toFloat()),o=getReductionAxes(n.shape,a);return o.length>0?t.sum(o).reshape(n.shape):t},$b:function(){var t=e.mul(n.toFloat()),o=getReductionAxes(r.shape,a);o.length>0&&(t=t.sum(o).reshape(r.shape));var i=r.square();return t.div(i.toFloat()).neg()}}})}function divStrict_(e,t){var n=convertToTensor(e,"a","div"),r=convertToTensor(t,"b","div");return assertShapesMatch(n.shape,r.shape,"Error in divideStrict: "),n.div(r)}function mod_(e,t){var n,r=convertToTensor(e,"a","mod"),o=convertToTensor(t,"b","mod");n=makeTypesMatch(r,o),r=n[0],o=n[1];var a=assertAndGetBroadcastShape(r.shape,o.shape);return ENV.engine.runKernel(function(e,t){var n=e.mod(r,o);return t([r,o]),n},{$a:r,$b:o},function(e,t){var n=t[0],r=t[1];return {$a:function(){var t=getReductionAxes(n.shape,a);return t.length>0?e.sum(t).reshape(n.shape):e},$b:function(){var t=e.mul(n.div(r).floor().neg()),o=getReductionAxes(r.shape,a);return o.length>0?t.sum(o).reshape(r.shape):t}}})}function modStrict_(e,t){var n=convertToTensor(e,"a","modStrict"),r=convertToTensor(t,"b","modStrict");return assertShapesMatch(n.shape,r.shape,"Error in modStrict: "),n.mod(r)}function minimum_(e,t){var n,r=convertToTensor(e,"a","minimum"),o=convertToTensor(t,"b","minimum");n=makeTypesMatch(r,o),r=n[0],o=n[1],"bool"===r.dtype&&(r=r.toInt(),o=o.toInt()),assertAndGetBroadcastShape(r.shape,o.shape);return ENV.engine.runKernel(function(e,t){var n=e.minimum(r,o);return t([r,o]),n},{$a:r,$b:o},function(e,t){var n=t[0],r=t[1];return {$a:function(){return e.mul(n.lessEqual(r).toFloat())},$b:function(){return e.mul(n.greater(r).toFloat())}}})}function minimumStrict_(e,t){var n=convertToTensor(e,"a","minimumStrict"),r=convertToTensor(t,"b","minimumStrict");return assertShapesMatch(n.shape,r.shape,"Error in minimumStrict: "),n.minimum(r)}function maximum_(e,t){var n,r=convertToTensor(e,"a","maximum"),o=convertToTensor(t,"b","maximum");n=makeTypesMatch(r,o),r=n[0],o=n[1],"bool"===r.dtype&&(r=r.toInt(),o=o.toInt()),assertAndGetBroadcastShape(r.shape,o.shape);return ENV.engine.runKernel(function(e,t){var n=e.maximum(r,o);return t([r,o]),n},{$a:r,$b:o},function(e,t){var n=t[0],r=t[1];return {$a:function(){return e.mul(n.greaterEqual(r).toFloat())},$b:function(){return e.mul(n.less(r).toFloat())}}})}function maximumStrict_(e,t){var n=convertToTensor(e,"a","maximumStrict"),r=convertToTensor(t,"b","maximumStrict");return assertShapesMatch(n.shape,r.shape,"Error in maximumStrict: "),n.maximum(r)}function squaredDifference_(e,t){var n,r=convertToTensor(e,"a","squaredDifference"),o=convertToTensor(t,"b","squaredDifference");n=makeTypesMatch(r,o),r=n[0],o=n[1],assertAndGetBroadcastShape(r.shape,o.shape);return ENV.engine.runKernel(function(e,t){var n=e.squaredDifference(r,o);return t([r,o]),n},{$a:r,$b:o},function(e,t){var n=t[0],r=t[1],o=scalar(2);return {$a:function(){return e.mul(n.sub(r).mul(o))},$b:function(){return e.mul(r.sub(n).mul(o))}}})}function squaredDifferenceStrict_(e,t){var n=convertToTensor(e,"a","squaredDifferenceStrict"),r=convertToTensor(t,"b","squaredDifferenceStrict");return assertShapesMatch(n.shape,r.shape,"Error in squaredDifferenceStrict: "),n.squaredDifference(r)}function atan2_(e,t){var n,r=convertToTensor(e,"a","atan2"),o=convertToTensor(t,"b","atan2");n=makeTypesMatch(r,o),r=n[0],o=n[1];var a=assertAndGetBroadcastShape(r.shape,o.shape);return ENV.engine.runKernel(function(e,t){var n=e.atan2(r,o);return t([r,o]),n},{$a:r,$b:o},function(e,t){var n=t[0],r=t[1];return {$a:function(){var t=add(n.square(),r.square()),o=e.mul(r.div(t)),i=getReductionAxes(n.shape,a);return i.length>0&&(o=o.sum(i)),o.reshape(n.shape)},$b:function(){var t=add(n.square(),r.square()),o=neg(e.mul(n.div(t))),i=getReductionAxes(r.shape,a);return i.length>0&&(o=o.sum(i)),o.reshape(r.shape)}}})}var add=op({add_:add_}),addN=op({addN_:addN_}),addStrict=op({addStrict_:addStrict_}),atan2=op({atan2_:atan2_}),div=op({div_:div_}),divStrict=op({divStrict_:divStrict_}),floorDiv=op({floorDiv_:floorDiv_}),maximum=op({maximum_:maximum_}),maximumStrict=op({maximumStrict_:maximumStrict_}),minimum=op({minimum_:minimum_}),minimumStrict=op({minimumStrict_:minimumStrict_}),mod=op({mod_:mod_}),modStrict=op({modStrict_:modStrict_}),mul=op({mul_:mul_}),mulStrict=op({mulStrict_:mulStrict_}),pow=op({pow_:pow_}),powStrict=op({powStrict_:powStrict_}),squaredDifference=op({squaredDifference_:squaredDifference_}),squaredDifferenceStrict=op({squaredDifferenceStrict_:squaredDifferenceStrict_}),sub=op({sub_:sub_}),subStrict=op({subStrict_:subStrict_});function logicalNot_(e){var t=convertToTensor(e,"x","logicalNot","bool");return ENV.engine.runKernel(function(e){return e.logicalNot(t)},{$x:t})}function logicalAnd_(e,t){var n=convertToTensor(e,"a","logicalAnd","bool"),r=convertToTensor(t,"b","logicalAnd","bool");return assertAndGetBroadcastShape(n.shape,r.shape),ENV.engine.runKernel(function(e){return e.logicalAnd(n,r)},{$a:n,$b:r})}function logicalOr_(e,t){var n=convertToTensor(e,"a","logicalOr","bool"),r=convertToTensor(t,"b","logicalOr","bool");return assertAndGetBroadcastShape(n.shape,r.shape),ENV.engine.runKernel(function(e){return e.logicalOr(n,r)},{$a:n,$b:r})}function logicalXor_(e,t){var n=convertToTensor(e,"a","logicalXor","bool"),r=convertToTensor(t,"b","logicalXor","bool");return assertAndGetBroadcastShape(n.shape,r.shape),logicalOr(e,t).logicalAnd(logicalAnd(e,t).logicalNot())}function where_(e,t,n){var r=convertToTensor(t,"a","where"),o=convertToTensor(n,"b","where"),a=convertToTensor(e,"condition","where","bool");assertShapesMatch(r.shape,o.shape,"Error in where: "),1===a.rank?assert(a.shape[0]===r.shape[0],function(){return "The first dimension of `a` must match the size of `condition`."}):assertShapesMatch(a.shape,o.shape,"Error in where: ");return ENV.engine.runKernel(function(e,t){var n=e.select(a,r,o);return t([a]),n},{$condition:a,$a:r,$b:o},function(e,t){var n=t[0];return {$condition:function(){return zerosLike(n).toFloat()},$a:function(){return e.mul(n.cast(e.dtype))},$b:function(){return e.mul(n.logicalNot().cast(e.dtype))}}})}function whereAsync_(e){return __awaiter(this,void 0,void 0,function(){var t,n,r;return __generator(this,function(o){switch(o.label){case 0:return [4,(t=convertToTensor(e,"condition","whereAsync","bool")).data()];case 1:return n=o.sent(),r=whereImpl(t.shape,n),e!==t&&t.dispose(),[2,r]}})})}var logicalAnd=op({logicalAnd_:logicalAnd_}),logicalNot=op({logicalNot_:logicalNot_}),logicalOr=op({logicalOr_:logicalOr_}),logicalXor=op({logicalXor_:logicalXor_}),where=op({where_:where_}),whereAsync=whereAsync_;function relu_(e){var t=convertToTensor(e,"x","relu");if("bool"===t.dtype)return t.toInt();return ENV.engine.runKernel(function(e,n){var r=e.relu(t);return n([t]),r},{$x:t},function(e,t){var n=t[0];return {$x:function(){return e.mulStrict(n.step().toFloat())}}})}function elu_(e){var t=convertToTensor(e,"x","elu");return ENV.engine.runKernel(function(e,n){var r=e.elu(t);return n([r]),r},{$x:t},function(e,t){var n=t[0];return {$x:function(){return ENV.engine.runKernel(function(t){return t.eluDer(e,n)},{dy:e,y:n})}}})}function selu_(e){var t=convertToTensor(e,"x","selu");return ENV.engine.runKernel(function(e,n){var r=e.selu(t);return n([t]),r},{$x:t},function(e,t){var n=t[0];return {$x:function(){var t=n.greater(scalar(0)),r=scalar(SELU_SCALEALPHA),o=scalar(SELU_SCALE),a=e.mul(o),i=e.mul(r).mul(n.toFloat().exp());return where(t,a,i)}}})}function leakyRelu_(e,t){void 0===t&&(t=.2);var n=convertToTensor(e,"x","leakyRelu");return maximum(scalar(t).mul(n),n)}function prelu_(e,t){var n=convertToTensor(e,"x","prelu"),r=convertToTensor(t,"alpha","prelu");return ENV.engine.runKernel(function(e,t){var o=e.prelu(n,r);return t([n,r]),o},{$x:n,$alpha:r},function(e,t){var n=t[0],r=t[1],o=n.greater(0);return {$x:function(){return where(o,e,e.mul(r))},$alpha:function(){var t=where(o,zerosLike(e),e.mul(n)),a=getReductionAxes(r.shape,e.shape);return a.length>0&&(t=t.sum(a)),t.reshape(r.shape)}}})}var elu=op({elu_:elu_}),leakyRelu=op({leakyRelu_:leakyRelu_}),prelu=op({prelu_:prelu_}),relu=op({relu_:relu_}),selu=op({selu_:selu_});function transpose_(e,t){var n=convertToTensor(e,"x","transpose");if(null==t&&(t=n.shape.map(function(e,t){return t}).reverse()),assert(n.rank===t.length,function(){return "Error in transpose: rank of input "+n.rank+" must match length of perm "+t+"."}),t.forEach(function(e){assert(e>=0&&eo)throw new Error("'k' passed to topk() must be <= the last dimension ("+o+") but got "+t);var a=ENV.engine.runKernel(function(e){return e.topk(r,t,n)},{$x:r});return {values:a[0],indices:a[1]}}var topk=op({topk_:topk_});function scatterND_(e,t,n){var r=convertToTensor(e,"indices","scatterND","int32"),o=convertToTensor(t,"updates","scatterND");return validateInput(o,r,n),ENV.engine.runKernel(function(e){return e.scatterND(r,o,n)},{$indices:r,$updates:o})}var scatterND=op({scatterND_:scatterND_});function fft_(e){assert("complex64"===e.dtype,function(){return "The dtype for tf.spectral.fft() must be complex64 but got "+e.dtype+"."});var t=e.shape[e.shape.length-1],n=e.size/t,r=e.as2D(n,t);return ENV.engine.runKernel(function(e){return e.fft(r)},{input:e}).reshape(e.shape)}function ifft_(e){assert("complex64"===e.dtype,function(){return "The dtype for tf.spectral.ifft() must be complex64 but got "+e.dtype+"."});var t=e.shape[e.shape.length-1],n=e.size/t,r=e.as2D(n,t);return ENV.engine.runKernel(function(e){return e.ifft(r)},{input:e}).reshape(e.shape)}function rfft_(e){assert("float32"===e.dtype,function(){return "The dtype for rfft() must be real value but got "+e.dtype});var t=e.shape[e.shape.length-1],n=e.size/t,r=e.zerosLike(),o=complex(e,r).as2D(n,t),a=fft(o),i=Math.floor(t/2)+1,s=real(a),u=imag(a),c=s.split([i,t-i],s.shape.length-1),l=u.split([i,t-i],u.shape.length-1),p=e.shape.slice();return p[e.shape.length-1]=i,complex(c[0],l[0]).reshape(p)}function irfft_(e){var t=e.shape[e.shape.length-1],n=e.size/t;if(t<=2){var r=e.as2D(n,t),o=ifft(r);return real(o)}var a=[n,2*(t-1)],i=real(e).as2D(n,t),s=imag(e).as2D(n,t),u=i.slice([0,1],[n,t-2]).reverse(1),c=s.slice([0,1],[n,t-2]).reverse(1).mul(scalar(-1)),l=i.concat(u,1),p=s.concat(c,1);r=complex(l,p).as2D(a[0],a[1]),o=ifft(r);return real(o)}var fft=op({fft_:fft_}),ifft=op({ifft_:ifft_}),rfft=op({rfft_:rfft_}),irfft=op({irfft_:irfft_}),spectral_ops=Object.freeze({fft:fft,ifft:ifft,rfft:rfft,irfft:irfft});function validateInput$1(e,t,n,r){if("int32"!==e.dtype)throw new Error("tf.sparseToDense() expects the indices to be int32 type, but the dtype was "+e.dtype+".");if(e.rank>2)throw new Error("sparseIndices should be a scalar, vector, or matrix, but got shape "+e.shape+".");var o=e.rank>0?e.shape[0]:1,a=e.rank>1?e.shape[1]:1;if(n.length!==a)throw new Error("outputShape has incorrect number of elements:, "+n.length+", should be: "+a+".");var i=t.size;if(0!==t.rank&&(1!==t.rank||i!==o))throw new Error("sparseValues has incorrect shape "+t.shape+", should be [] or ["+o+"]");if(t.dtype!==r.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function sparseToDense_(e,t,n,r){void 0===r&&(r=0);var o=convertToTensor(e,"sparseIndices","sparseToDense","int32"),a=convertToTensor(t,"sparseValues","sparseToDense"),i=convertToTensor(r,"defaultValue","sparseToDense",a.dtype);return validateInput$1(o,a,n,i),ENV.engine.runKernel(function(e){return e.sparseToDense(o,a,n,i)},{$sparseIndices:o,$sparseValues:a,$defaultValue:i})}var sparseToDense=op({sparseToDense_:sparseToDense_});function gatherND_(e,t){var n=convertToTensor(t,"indices","gatherND","int32"),r=convertToTensor(e,"x","gatherND");return ENV.engine.runKernel(function(e){return e.gatherND(r,n)},{$x:r,$indices:n})}var Reduction,gatherND=op({gatherND_:gatherND_});function computeWeightedLoss_(e,t,n){void 0===n&&(n=Reduction.SUM_BY_NONZERO_WEIGHTS);var r=convertToTensor(e,"losses","computeWeightedLoss"),o=null;null!=t&&(o=convertToTensor(t,"weights","computeWeightedLoss"));var a=null==o?r:r.mul(o);if(n===Reduction.NONE)return a;if(n===Reduction.SUM)return a.sum();if(n===Reduction.MEAN){if(null==o)return a.mean();var i=r.size/o.size,s=a.sum().div(o.sum());return i>1?s.div(scalar(i)):s}if(n===Reduction.SUM_BY_NONZERO_WEIGHTS){if(null==o)return a.sum().div(scalar(r.size));var u=o.mul(ones$1(r.shape)).notEqual(scalar(0)).sum().toFloat();return a.sum().div(u)}throw Error("Unknown reduction: "+n)}function absoluteDifference_(e,t,n,r){void 0===r&&(r=Reduction.SUM_BY_NONZERO_WEIGHTS);var o=convertToTensor(e,"labels","absoluteDifference"),a=convertToTensor(t,"predictions","absoluteDifference"),i=null;null!=n&&(i=convertToTensor(n,"weights","absoluteDifference")),assertShapesMatch(o.shape,a.shape,"Error in absoluteDifference: ");var s=o.sub(a).abs();return computeWeightedLoss(s,i,r)}function meanSquaredError_(e,t,n,r){void 0===r&&(r=Reduction.SUM_BY_NONZERO_WEIGHTS);var o=convertToTensor(e,"labels","meanSquaredError"),a=convertToTensor(t,"predictions","meanSquaredError"),i=null;null!=n&&(i=convertToTensor(n,"weights","meanSquaredError")),assertShapesMatch(o.shape,a.shape,"Error in meanSquaredError: ");var s=o.squaredDifference(a);return computeWeightedLoss(s,i,r)}function cosineDistance_(e,t,n,r,o){void 0===o&&(o=Reduction.SUM_BY_NONZERO_WEIGHTS);var a=convertToTensor(e,"labels","cosineDistance"),i=convertToTensor(t,"predictions","cosineDistance"),s=null;null!=r&&(s=convertToTensor(r,"weights","cosineDistance")),assertShapesMatch(a.shape,i.shape,"Error in cosineDistance: ");var u=scalar(1).sub(a.mul(i).sum(n,!0));return computeWeightedLoss(u,s,o)}function hingeLoss_(e,t,n,r){void 0===r&&(r=Reduction.SUM_BY_NONZERO_WEIGHTS);var o=convertToTensor(e,"labels","hingeLoss"),a=convertToTensor(t,"predictions","hingeLoss"),i=null;null!=n&&(i=convertToTensor(n,"weights","hingeLoss")),assertShapesMatch(o.shape,a.shape,"Error in hingeLoss: ");var s=scalar(1);o=scalar(2).mul(o).sub(s);var u=s.sub(o.mul(a)).relu();return computeWeightedLoss(u,i,r)}function logLoss_(e,t,n,r,o){void 0===r&&(r=1e-7),void 0===o&&(o=Reduction.SUM_BY_NONZERO_WEIGHTS);var a=convertToTensor(e,"labels","logLoss"),i=convertToTensor(t,"predictions","logLoss"),s=null;null!=n&&(s=convertToTensor(n,"weights","logLoss")),assertShapesMatch(a.shape,i.shape,"Error in logLoss: ");var u=scalar(1),c=scalar(r),l=a.mul(i.add(c).log()).neg().sub(u.sub(a).mul(u.sub(i).add(c).log()));return computeWeightedLoss(l,s,o)}function sigmoidCrossEntropyWithLogits_(e,t){var n=convertToTensor(e,"labels","sigmoidCrossEntropyWithLogits"),r=convertToTensor(t,"logits","sigmoidCrossEntropyWithLogits");assertShapesMatch(n.shape,r.shape,"Error in sigmoidCrossEntropyWithLogits: ");var o=r.relu(),a=r.mul(n),i=r.abs().neg().exp().log1p();return o.sub(a).add(i)}function sigmoidCrossEntropy_(e,t,n,r,o){void 0===r&&(r=0),void 0===o&&(o=Reduction.SUM_BY_NONZERO_WEIGHTS);var a=convertToTensor(e,"multiClassLabels","sigmoidCrossEntropy"),i=convertToTensor(t,"logits","sigmoidCrossEntropy"),s=null;if(null!=n&&(s=convertToTensor(n,"weights","sigmoidCrossEntropy")),assertShapesMatch(a.shape,i.shape,"Error in sigmoidCrossEntropy: "),r>0){var u=scalar(r),c=scalar(1),l=scalar(.5);a=a.mul(c.sub(u)).add(l.mul(u));}var p=sigmoidCrossEntropyWithLogits_(a,i);return computeWeightedLoss(p,s,o)}function huberLoss_(e,t,n,r,o){void 0===r&&(r=1),void 0===o&&(o=Reduction.SUM_BY_NONZERO_WEIGHTS);var a=convertToTensor(e,"labels","huberLoss"),i=convertToTensor(t,"predictions","huberLoss"),s=null;null!=n&&(s=convertToTensor(n,"weights","huberLoss")),assertShapesMatch(a.shape,i.shape,"Error in huberLoss: ");var u=scalar(r),c=i.sub(a).abs(),l=minimum(c,u),p=c.sub(l),d=scalar(.5).mul(l.square()).add(u.mul(p));return computeWeightedLoss(d,s,o)}function softmaxCrossEntropyWithLogits_(e,t,n){if(void 0===n&&(n=-1),-1===n&&(n=t.rank-1),n!==t.rank-1)throw Error("Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank "+t.rank+" and dim was "+n);return customGrad(function(e,t,r){var o=t.logSumExp([n],!0),a=t.toFloat().sub(o);r([e,a]);return {value:a.mul(e).neg().sum([n]),gradFunc:function(e,t){var r=t[0],o=t[1],a=expandShapeToKeepDim(e.shape,[n]);return [e.reshape(a).mul(r.toFloat().sub(o.exp())),e.reshape(a).mul(o.exp().sub(r.toFloat()))]}}})(e,t)}function softmaxCrossEntropy_(e,t,n,r,o){void 0===r&&(r=0),void 0===o&&(o=Reduction.SUM_BY_NONZERO_WEIGHTS);var a=convertToTensor(e,"onehotLabels","softmaxCrossEntropy"),i=convertToTensor(t,"logits","softmaxCrossEntropy"),s=null;if(null!=n&&(s=convertToTensor(n,"weights","softmaxCrossEntropy")),assertShapesMatch(a.shape,i.shape,"Error in softmaxCrossEntropy: "),r>0){var u=scalar(r),c=scalar(1),l=scalar(a.shape[1]);a=a.mul(c.sub(u)).add(u.div(l));}var p=softmaxCrossEntropyWithLogits_(a,i);return computeWeightedLoss(p,s,o)}!function(e){e[e.NONE=0]="NONE",e[e.MEAN=1]="MEAN",e[e.SUM=2]="SUM",e[e.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS";}(Reduction||(Reduction={}));var absoluteDifference=op({absoluteDifference_:absoluteDifference_}),computeWeightedLoss=op({computeWeightedLoss_:computeWeightedLoss_}),cosineDistance=op({cosineDistance_:cosineDistance_}),hingeLoss=op({hingeLoss_:hingeLoss_}),huberLoss=op({huberLoss_:huberLoss_}),logLoss=op({logLoss_:logLoss_}),meanSquaredError=op({meanSquaredError_:meanSquaredError_}),sigmoidCrossEntropy=op({sigmoidCrossEntropy_:sigmoidCrossEntropy_}),softmaxCrossEntropy=op({softmaxCrossEntropy_:softmaxCrossEntropy_}),loss_ops=Object.freeze({get Reduction(){return Reduction},absoluteDifference:absoluteDifference,computeWeightedLoss:computeWeightedLoss,cosineDistance:cosineDistance,hingeLoss:hingeLoss,huberLoss:huberLoss,logLoss:logLoss,meanSquaredError:meanSquaredError,sigmoidCrossEntropy:sigmoidCrossEntropy,softmaxCrossEntropy:softmaxCrossEntropy});function gramSchmidt_(e){var t;if(Array.isArray(e)){t=!1,assert(null!=e&&e.length>0,function(){return "Gram-Schmidt process: input must not be null, undefined, or empty"});for(var n=e[0].shape[0],r=function(t){assert(e[t].shape[0]===n,function(){return "Gram-Schmidt: Non-unique lengths found in the input vectors: ("+e[t].shape[0]+" vs. "+n+")"});},o=1;o0)for(var n=0;n= 2, but got rank "+e.rank);if(2===e.rank)return qr2d(e,t);var n=e.shape.slice(0,e.shape.length-2).reduce(function(e,t){return e*t}),r=[],o=[];return unstack(e.reshape([n,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0).forEach(function(e){var n=qr2d(e,t),a=n[0],i=n[1];r.push(a),o.push(i);}),[stack(r,0).reshape(e.shape),stack(o,0).reshape(e.shape)]}function qr2d(e,t){return void 0===t&&(t=!1),ENV.engine.tidy(function(){if(2!==e.shape.length)throw new Error("qr2d() requires a 2D Tensor, but got a "+e.shape.length+"D Tensor.");for(var n=e.shape[0],r=e.shape[1],o=eye(n),a=e.clone(),i=tensor2d([[1]],[1,1]),s=i.clone(),u=n>=r?r:n,c=function(e){var t,u=a,c=s,l=o;t=ENV.engine.tidy(function(){var t=a.slice([e,e],[n-e,1]),u=t.norm(),c=a.slice([e,e],[1,1]),l=c.sign().neg(),p=c.sub(l.mul(u)),d=t.div(p);s=1===d.shape[0]?i.clone():i.concat(d.slice([1,0],[d.shape[0]-1,d.shape[1]]),0);var h=l.matMul(p).div(u).neg(),f=a.slice([e,0],[n-e,r]),m=h.mul(s);a=0===e?f.sub(m.matMul(s.transpose().matMul(f))):a.slice([0,0],[e,r]).concat(f.sub(m.matMul(s.transpose().matMul(f))),0);var g=o.slice([0,e],[n,o.shape[1]-e]);return o=0===e?g.sub(g.matMul(s).matMul(m.transpose())):o.slice([0,0],[n,e]).concat(g.sub(g.matMul(s).matMul(m.transpose())),1),[s,a,o]}),s=t[0],a=t[1],o=t[2],dispose([u,c,l]);},l=0;lr&&(o=o.slice([0,0],[n,r]),a=a.slice([0,0],[r,r])),[o,a]})}var gramSchmidt=op({gramSchmidt_:gramSchmidt_}),qr=op({qr_:qr_}),linalg_ops=Object.freeze({gramSchmidt:gramSchmidt,qr:qr});function resizeBilinear_(e,t,n){void 0===n&&(n=!1);var r=convertToTensor(e,"images","resizeBilinear");assert(3===r.rank||4===r.rank,function(){return "Error in resizeBilinear: x must be rank 3 or 4, but got rank "+r.rank+"."}),assert(2===t.length,function(){return "Error in resizeBilinear: new shape must 2D, but got shape "+t+"."});var o=r,a=!1;3===r.rank&&(a=!0,o=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var i=t[0],s=t[1],u=ENV.engine.runKernel(function(e,t){return t([o]),e.resizeBilinear(o,i,s,n)},{batchImages:o},function(e,t){return {batchImages:function(){return ENV.engine.runKernel(function(r){return r.resizeBilinearBackprop(e,t[0],n)},{})}}});return a?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}function resizeNearestNeighbor_(e,t,n){void 0===n&&(n=!1);var r=convertToTensor(e,"images","resizeNearestNeighbor");assert(3===r.rank||4===r.rank,function(){return "Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank "+r.rank+"."}),assert(2===t.length,function(){return "Error in resizeNearestNeighbor: new shape must 2D, but got shape "+t+"."}),assert("float32"===r.dtype||"int32"===r.dtype,function(){return "`images` must have `int32` or `float32` as dtype"});var o=r,a=!1;3===r.rank&&(a=!0,o=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var i=t[0],s=t[1],u=ENV.engine.runKernel(function(e,t){return t([o]),e.resizeNearestNeighbor(o,i,s,n)},{batchImages:o},function(e,t){return {batchImages:function(){return ENV.engine.runKernel(function(r){return r.resizeNearestNeighborBackprop(e,t[0],n)},{})}}});return a?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}function nonMaxSuppression_(e,t,n,r,o){void 0===r&&(r=.5),void 0===o&&(o=Number.NEGATIVE_INFINITY);var a=convertToTensor(e,"boxes","nonMaxSuppression"),i=convertToTensor(t,"scores","nonMaxSuppression"),s=nonMaxSuppSanityCheck(a,i,n,r,o);return n=s.maxOutputSize,r=s.iouThreshold,o=s.scoreThreshold,ENV.engine.runKernel(function(e){return e.nonMaxSuppression(a,i,n,r,o)},{$boxes:a})}function nonMaxSuppressionAsync_(e,t,n,r,o){return void 0===r&&(r=.5),void 0===o&&(o=Number.NEGATIVE_INFINITY),__awaiter(this,void 0,void 0,function(){var a,i,s,u,c,l;return __generator(this,function(p){switch(p.label){case 0:return a=convertToTensor(e,"boxes","nonMaxSuppressionAsync"),i=convertToTensor(t,"scores","nonMaxSuppressionAsync"),s=nonMaxSuppSanityCheck(a,i,n,r,o),n=s.maxOutputSize,r=s.iouThreshold,o=s.scoreThreshold,[4,a.data()];case 1:return u=p.sent(),[4,i.data()];case 2:return c=p.sent(),l=nonMaxSuppressionImpl(u,c,n,r,o),a!==e&&a.dispose(),i!==t&&i.dispose(),[2,l]}})})}function nonMaxSuppSanityCheck(e,t,n,r,o){null==r&&(r=.5),null==o&&(o=Number.NEGATIVE_INFINITY);var a=e.shape[0];return n=Math.min(n,a),assert(0<=r&&r<=1,function(){return "iouThreshold must be in [0, 1], but was '"+r+"'"}),assert(2===e.rank,function(){return "boxes must be a 2D tensor, but was of rank '"+e.rank+"'"}),assert(4===e.shape[1],function(){return "boxes must have 4 columns, but 2nd dimension was "+e.shape[1]}),assert(1===t.rank,function(){return "scores must be a 1D tensor"}),assert(t.shape[0]===a,function(){return "scores has incompatible shape with boxes. Expected "+a+", but was "+t.shape[0]}),{maxOutputSize:n,iouThreshold:r,scoreThreshold:o}}function cropAndResize_(e,t,n,r,o,a){var i=convertToTensor(e,"image","cropAndResize","float32"),s=convertToTensor(t,"boxes","cropAndResize","float32"),u=convertToTensor(n,"boxInd","cropAndResize","int32");o=o||"bilinear",a=a||0;var c=s.shape[0];assert(4===i.rank,function(){return "Error in cropAndResize: image must be rank 4,but got rank "+i.rank+"."}),assert(2===s.rank&&4===s.shape[1],function(){return "Error in cropAndResize: boxes must be have size ["+c+",4] but had shape "+s.shape+"."}),assert(1===u.rank&&u.shape[0]===c,function(){return "Error in cropAndResize: boxInd must be have size ["+c+"] but had shape "+s.shape+"."}),assert(2===r.length,function(){return "Error in cropAndResize: cropSize must be of length 2, but got length "+r.length+"."}),assert(r[0]>=1&&r[1]>=1,function(){return "cropSize must be atleast [1,1], but was "+r}),assert("bilinear"===o||"nearest"===o,function(){return "method must be bilinear or nearest, but was "+o});return ENV.engine.runKernel(function(e,t){return e.cropAndResize(i,s,u,r,o,a)},{$image:i,$boxes:s})}var resizeBilinear=op({resizeBilinear_:resizeBilinear_}),resizeNearestNeighbor=op({resizeNearestNeighbor_:resizeNearestNeighbor_}),nonMaxSuppression=op({nonMaxSuppression_:nonMaxSuppression_}),nonMaxSuppressionAsync=nonMaxSuppressionAsync_,cropAndResize=op({cropAndResize_:cropAndResize_}),image_ops=Object.freeze({resizeBilinear:resizeBilinear,resizeNearestNeighbor:resizeNearestNeighbor,nonMaxSuppression:nonMaxSuppression,nonMaxSuppressionAsync:nonMaxSuppressionAsync,cropAndResize:cropAndResize});function matMul_$1(e,t,n,r,o,a){var i;void 0===n&&(n=!1),void 0===r&&(r=!1),void 0===a&&(a="linear");var s=convertToTensor(e,"a","fused matMul"),u=convertToTensor(t,"b","fused matMul");i=makeTypesMatch(s,u),s=i[0],u=i[1];var c=n?s.shape[s.rank-2]:s.shape[s.rank-1],l=r?u.shape[u.rank-1]:u.shape[u.rank-2],p=n?s.shape[s.rank-1]:s.shape[s.rank-2],d=r?u.shape[u.rank-2]:u.shape[u.rank-1],h=s.shape.slice(0,-2),f=u.shape.slice(0,-2),m=sizeFromShape(h),g=sizeFromShape(f);assert(s.rank>=2&&u.rank>=2&&s.rank===u.rank,function(){return "Error in fused matMul: inputs must have the same rank of at least 2, got ranks "+s.rank+" and "+u.rank+"."}),assert(arraysEqual(h,f),function(){return "Error in fused matMul: outer dimensions ("+h+") and ("+f+") of Tensors with shapes "+s.shape+" and "+u.shape+" must match."}),assert(c===l,function(){return "Error in fused matMul: inner shapes ("+c+") and ("+l+") of Tensors with shapes "+s.shape+" and "+u.shape+" and transposeA="+n+" and transposeB="+r+" must match."});var v,y=s.shape.slice(0,-2).concat([p,d]),x=n?s.as3D(m,c,p):s.as3D(m,p,c),E=r?u.as3D(g,d,l):u.as3D(g,l,d);null!=o&&assertAndGetBroadcastShape(y,(v=makeTypesMatch(v=convertToTensor(o,"bias","fused matMul"),s)[0]).shape);var T={$a:x,$b:E};return null!=o&&(T.$bias=v),ENV.engine.runKernel(function(e,t){var o=e.fusedBatchMatMul(x,E,n,r,v,a);return t([x,E,o]),o},T,function(e,t){var i,s=t[0],u=t[1],c=t[2];if(null==a||"linear"===a)i=e;else{if("relu"!==a)throw new Error("Gradient for activation "+a+" has not been implemented yet.");i=e.mul(c.step());}var l={};return null!=o&&(l={$bias:function(){var e=i,t=getReductionAxes(v.shape,i.shape);return t.length>0&&(e=e.sum(t)),e.reshape(v.shape)}}),n||r?!n&&r?Object.assign({$a:function(){return i.matMul(u,!1,!1)},$b:function(){return i.matMul(s,!0,!1)}},l):n&&!r?Object.assign({$a:function(){return u.matMul(i,!1,!0)},$b:function(){return s.matMul(i,!1,!1)}},l):Object.assign({$a:function(){return u.matMul(i,!0,!0)},$b:function(){return i.matMul(s,!0,!0)}},l):Object.assign({$a:function(){return i.matMul(u,!1,!0)},$b:function(){return s.matMul(i,!0,!1)}},l)}).reshape(y)}var matMul$1=op({matMul_:matMul_$1}),fused_ops=Object.freeze({matMul:matMul$1}),ops=Object.freeze({image:image_ops,linalg:linalg_ops,losses:loss_ops,spectral:spectral_ops,fused:fused_ops,op:op,batchNormalization2d:batchNormalization2d,batchNormalization3d:batchNormalization3d,batchNormalization4d:batchNormalization4d,batchNormalization:batchNormalization,batchNorm:batchNorm,batchNorm2d:batchNorm2d,batchNorm3d:batchNorm3d,batchNorm4d:batchNorm4d,complex:complex,real:real,imag:imag,concat:concat,concat1d:concat1d,concat2d:concat2d,concat3d:concat3d,concat4d:concat4d,split:split$1,conv1d:conv1d,conv2d:conv2d,conv3d:conv3d,conv2dDerFilter:conv2dDerFilter,depthwiseConv2d:depthwiseConv2d,separableConv2d:separableConv2d,conv2dTranspose:conv2dTranspose,matMul:matMul,dot:dot,outerProduct:outerProduct,reverse:reverse,reverse1d:reverse1d,reverse2d:reverse2d,reverse3d:reverse3d,reverse4d:reverse4d,maxPool:maxPool,avgPool:avgPool,pool:pool,slice:slice,slice1d:slice1d,slice2d:slice2d,slice3d:slice3d,slice4d:slice4d,abs:abs,acos:acos,acosh:acosh,asin:asin,asinh:asinh,atan:atan,atanh:atanh,ceil:ceil,clipByValue:clipByValue,cos:cos,cosh:cosh,erf:erf,exp:exp,expm1:expm1,floor:floor,log:log$1,log1p:log1p,logSigmoid:logSigmoid,neg:neg,reciprocal:reciprocal,round:round,rsqrt:rsqrt,sigmoid:sigmoid,sign:sign,isNaN:isNaN$1,isInf:isInf,isFinite:isFinite$1,sin:sin,sinh:sinh,softplus:softplus,sqrt:sqrt,square:square,step:step,tan:tan,tanh:tanh$1,all:all,any:any,argMax:argMax,argMin:argMin,logSumExp:logSumExp,max:max,mean:mean,min:min,moments:moments,sum:sum$1,prod:prod,equal:equal,equalStrict:equalStrict,greater:greater,greaterEqual:greaterEqual,greaterEqualStrict:greaterEqualStrict,greaterStrict:greaterStrict,less:less,lessEqual:lessEqual,lessEqualStrict:lessEqualStrict,lessStrict:lessStrict,notEqual:notEqual,notEqualStrict:notEqualStrict,add:add,addN:addN,addStrict:addStrict,atan2:atan2,div:div,divStrict:divStrict,floorDiv:floorDiv,maximum:maximum,maximumStrict:maximumStrict,minimum:minimum,minimumStrict:minimumStrict,mod:mod,modStrict:modStrict,mul:mul,mulStrict:mulStrict,pow:pow,powStrict:powStrict,squaredDifference:squaredDifference,squaredDifferenceStrict:squaredDifferenceStrict,sub:sub,subStrict:subStrict,elu:elu,leakyRelu:leakyRelu,prelu:prelu,relu:relu,selu:selu,logicalAnd:logicalAnd,logicalNot:logicalNot,logicalOr:logicalOr,logicalXor:logicalXor,where:where,whereAsync:whereAsync,buffer:buffer,print:print,batchToSpaceND:batchToSpaceND,cast:cast,clone:clone,cumsum:cumsum,depthToSpace:depthToSpace,expandDims:expandDims,eye:eye,multinomial:multinomial,oneHot:oneHot,pad:pad,pad1d:pad1d,pad2d:pad2d,pad3d:pad3d,pad4d:pad4d,rand:rand,randomNormal:randomNormal,randomUniform:randomUniform,reshape:reshape,spaceToBatchND:spaceToBatchND,squeeze:squeeze,stack:stack,tile:tile,truncatedNormal:truncatedNormal,unstack:unstack,setdiff1dAsync:setdiff1dAsync,fill:fill,linspace:linspace,ones:ones$1,range:range,scalar:scalar,tensor:tensor,tensor1d:tensor1d,tensor2d:tensor2d,tensor3d:tensor3d,tensor4d:tensor4d,tensor5d:tensor5d,tensor6d:tensor6d,zeros:zeros,onesLike:onesLike,zerosLike:zerosLike,transpose:transpose,softmax:softmax,logSoftmax:logSoftmax,localResponseNormalization:localResponseNormalization,norm:norm,gather:gather,unsortedSegmentSum:unsortedSegmentSum,basicLSTMCell:basicLSTMCell,multiRNNCell:multiRNNCell,movingAverage:movingAverage,stridedSlice:stridedSlice,topk:topk,scatterND:scatterND,fft:fft,ifft:ifft,rfft:rfft,irfft:irfft,sparseToDense:sparseToDense,gatherND:gatherND});function mapActivation(e,t,n){if("linear"===t)return e.linear(n);if("relu"===t)return e.relu(n);throw new Error("Activation "+t+" has not been implemented for the CPU backend.")}var MathBackendCPU=function(){function e(){this.blockSize=48,this.firstUse=!0,ENV.get("IS_BROWSER")&&(this.fromPixels2DContext=document.createElement("canvas").getContext("2d"));}return e.prototype.setDataMover=function(e){this.data=new DataStorage(e);},e.prototype.register=function(e,t,n){if(this.firstUse&&(this.firstUse=!1,ENV.get("IS_NODE")&&warn("\n============================\nHi there 👋. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.\n============================\n")),this.data.has(e))throw new Error("Data buffer is already registered");this.data.set(e,{dtype:n});},e.prototype.write=function(e,t){if(null==t)throw new Error("MathBackendCPU.write(): values can not be null");this.data.get(e).values=t;},e.prototype.fromPixels=function(e,t){if(null==e)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");var n,r;if(ENV.get("IS_NODE")&&null==e.getContext)throw new Error("When running in node, pixels must be an HTMLCanvasElement like the one returned by the `canvas` npm package");if(null!=e.getContext)n=e.getContext("2d").getImageData(0,0,e.width,e.height).data;else if(e instanceof ImageData)n=e.data;else{if(!(e instanceof HTMLImageElement||e instanceof HTMLVideoElement))throw new Error("pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement or ImageData, but was "+e.constructor.name);if(null==this.fromPixels2DContext)throw new Error("Can't read pixels from HTMLImageElement outside the browser.");this.fromPixels2DContext.canvas.width=e.width,this.fromPixels2DContext.canvas.height=e.height,this.fromPixels2DContext.drawImage(e,0,0,e.width,e.height),n=this.fromPixels2DContext.getImageData(0,0,e.width,e.height).data;}if(4===t)r=new Int32Array(n);else{var o=e.width*e.height;r=new Int32Array(o*t);for(var a=0;ad&&(d=m,h=f);}u[l]=h;}return i},e.prototype.cumsum=function(e,t,n,r){if(this.assertNotComplex(e,"cumsum"),t!==e.rank-1)throw new Error("backend.cumsum in CPU expects an inner-most axis="+(e.rank-1)+" but got axis="+t);for(var o=upcastType(e.dtype,"int32"),a=zeros(e.shape,o),i=a.dataSync(),s=e.dataSync(),u=e.shape[e.rank-1],c=r?function(e,t){return e+u-t-1}:function(e,t){return e+t},l=0;lt?1:0})},e.prototype.greaterEqual=function(e,t){return this.assertNotComplex([e,t],"greaterEqual"),this.broadcastedBinaryOp(e,t,"bool",function(e,t){return e>=t?1:0})},e.prototype.logicalNot=function(e){this.assertNotComplex(e,"logicalNot");for(var t=e.dataSync(),n=new Uint8Array(t.length),r=0;r1||1===t.rank?1:t.shape[1],l=0;l=0&&t>=0?n:(n+t)%t})},e.prototype.max=function(e,t){this.assertNotComplex(e,"max"),assertAxesAreInnerMostDims("max",t,e.rank);for(var n=computeOutAndReduceShapes(e.shape,t),r=n[0],o=n[1],a=zeros(r,e.dtype),i=sizeFromShape(o),s=a.dataSync(),u=e.dataSync(),c=0;cp&&(p=h);}s[c]=p;}return a},e.prototype.maximum=function(e,t){return this.assertNotComplex([e,t],"maximum"),this.broadcastedBinaryOp(e,t,e.dtype,function(e,t){return Math.max(e,t)})},e.prototype.all=function(e,t){this.assertNotComplex(e,"all"),assertAxesAreInnerMostDims("all",t,e.rank);for(var n=computeOutAndReduceShapes(e.shape,t),r=n[0],o=n[1],a=zeros(r,e.dtype),i=sizeFromShape(o),s=a.dataSync(),u=e.dataSync(),c=0;c0?n[r]=1:n[r]=0;return Tensor.make(e.shape,{values:n})},e.prototype.isNaN=function(e){this.assertNotComplex(e,"x");for(var t=e.dataSync(),n=new Uint8Array(t.length),r=0;r.5?n[r]=Math.ceil(t[r]):n[r]=o%2==0?o:o+1;}return Tensor.make(e.shape,{values:n})},e.prototype.exp=function(e){this.assertNotComplex(e,"exp");for(var t=e.dataSync(),n=new Float32Array(t.length),r=0;r=0?o:Math.exp(o)-1;}return Tensor.make(e.shape,{values:t})},e.prototype.eluDer=function(e,t){this.assertNotComplex([e,t],"eluDer");for(var n=new Float32Array(t.size),r=t.dataSync(),o=e.dataSync(),a=0;a=1?o[a]:o[a]*(i+1);}return Tensor.make(t.shape,{values:n})},e.prototype.selu=function(e){this.assertNotComplex(e,"selu");for(var t=SELU_SCALEALPHA,n=SELU_SCALE,r=new Float32Array(e.size),o=e.dataSync(),a=0;a=0?n*i:t*(Math.exp(i)-1);}return Tensor.make(e.shape,{values:r})},e.prototype.clip=function(e,t,n){this.assertNotComplex(e,"clip");for(var r=new Float32Array(e.size),o=e.dataSync(),a=0;an?n:i-t,i=r[o]0?1:t;}return Tensor.make(e.shape,{values:n})},e.prototype.conv2d=function(e,t,n){this.assertNotComplex([e,t],"conv2d");for(var r=n.filterHeight,o=n.filterWidth,a=n.dilationHeight,i=n.dilationWidth,s=n.padInfo.left,u=n.padInfo.top,c=buffer(n.outShape,e.dtype),l=e.dataSync(),p=t.dataSync(),d=c.values,h=0;h=n.inHeight))for(var T=x*t.strides[0],b=f+E*e.strides[1],w=0;w=n.inWidth))for(var _=T+A*t.strides[1],R=b+N*n.inChannels,I=_,k=0;k=n.inDepth))for(var S=b*t.strides[0],C=v+w*e.strides[1],A=0;A=n.inHeight))for(var k=S+R*t.strides[1],D=C+I*e.strides[2],O=0;O=n.inWidth))for(var B=k+F*t.strides[2],V=D+L*n.inChannels,U=B,z=0;z=n.inHeight))for(var b=E*t.strides[0],w=m+T*e.strides[1],S=0;S=n.inWidth))for(var R=b+N*t.strides[1],I=w+_*n.inChannels,k=C,D=R,O=0;Ok?k=L:"avg"===n&&(D+=L,O++);}if(isNaN(k))break}f[A+N*v+T]="avg"===n?D/O:k;}return h.toTensor()},e.prototype.maxPool=function(e,t){return this.pool(e,t,"max")},e.prototype.maxPoolPositions=function(e,t){for(var n=buffer(t.outShape,"int32"),r=t.strideHeight,o=t.strideWidth,a=t.dilationHeight,i=t.dilationWidth,s=t.effectiveFilterHeight,u=t.effectiveFilterWidth,c=t.padInfo.top,l=t.padInfo.left,p=e.bufferSync(),d=0;db&&(b=_,w=C*u+N);}n.set(w,d,f,y,h);}}return n.toTensor()},e.prototype.maxPoolBackprop=function(e,t,n,r){this.assertNotComplex([t,n],"maxPoolBackprop");for(var o=this.maxPoolPositions(t,r),a=r.strideHeight,i=r.strideWidth,s=r.dilationHeight,u=r.dilationWidth,c=r.effectiveFilterHeight,l=r.effectiveFilterWidth,p=l-1-r.padInfo.left,d=c-1-r.padInfo.top,h=buffer(t.shape,"float32"),f=o.bufferSync(),m=e.bufferSync(),g=0;g=r.outHeight||Math.floor(S)!==S))for(var C=0;C=r.outWidth||Math.floor(A)!==A)){var N=c*l-1-f.get(g,S,A,v)===w*l+C?1:0;if(0!==N)b+=m.get(g,S,A,v)*N;}}}h.set(b,g,y,x,v);}return h.toTensor()},e.prototype.avgPoolBackprop=function(e,t,n){this.assertNotComplex([e,t],"avgPoolBackprop");for(var r=n.strideHeight,o=n.strideWidth,a=n.filterHeight,i=n.filterWidth,s=n.dilationHeight,u=n.dilationWidth,c=n.effectiveFilterHeight,l=n.effectiveFilterWidth,p=l-1-n.padInfo.left,d=c-1-n.padInfo.top,h=buffer(t.shape,"float32"),f=1/(a*i),m=e.bufferSync(),g=0;g=n.outHeight||Math.floor(S)!==S))for(var C=0;C=n.outWidth||Math.floor(A)!==A))b+=m.get(g,S,A,v);}}h.set(b*f,g,y,x,v);}return h.toTensor()},e.prototype.cast=function(e,t){return castTensor(e,t,this)},e.prototype.reshape=function(e,t){return reshapeTensor(e,t)},e.prototype.avgPool=function(e,t){return this.assertNotComplex(e,"avgPool"),this.pool(e,t,"avg").toFloat()},e.prototype.resizeBilinear=function(e,t,n,r){this.assertNotComplex(e,"resizeBilinear");for(var o=e.shape,a=o[0],i=o[1],s=o[2],u=o[3],c=e.dataSync(),l=new Float32Array(sizeFromShape([a,t,n,u])),p=[r&&t>1?i-1:i,r&&n>1?s-1:s],d=[r&&t>1?t-1:t,r&&n>1?n-1:n],h=0,f=p[0]/d[0],m=p[1]/d[1],g=0;g1?a-1:a,n&&l>1?i-1:i],h=[n&&c>1?c-1:c,n&&l>1?l-1:l],f=d[0]/h[0],m=d[1]/h[1],g=e.dataSync(),v=0,y=0;y1?i-1:i,r&&n>1?s-1:s],d=[r&&t>1?t-1:t,r&&n>1?n-1:n],h=p[0]/d[0],f=p[1]/d[1],m=0,g=0;g1?a-1:a,n&&l>1?i-1:i],f=[n&&c>1?c-1:c,n&&l>1?l-1:l],m=h[0]/f[0],g=h[1]/f[1],v=1/m,y=1/g,x=2*Math.ceil(v)+2,E=2*Math.ceil(y)+2,T=0;T=c)){var M=b+P*e.strides[1],F=P*m;if(w===Math.min(a-1,n?Math.round(F):Math.floor(F)))for(var L=0;L=l)){var V=M+B*e.strides[2],U=B*g;N===Math.min(i-1,n?Math.round(U):Math.floor(U))&&(D+=d[V+k]);}}}}p[_+k]=D;}return tensor4d(p,t.shape,t.dtype)},e.prototype.batchNormalization=function(e,t,n,r,o,a){this.assertNotComplex([e,t,n,o,a],"batchNorm");for(var i=e.dataSync(),s=t.dataSync(),u=n.dataSync(),c=o?o.dataSync():new Float32Array([1]),l=a?a.dataSync():new Float32Array([0]),p=new Float32Array(i.length),d=l.length,h=c.length,f=u.length,m=s.length,g=0,v=0,y=0,x=0,E=0;E=d&&(g=0),v>=m&&(v=0),y>=h&&(y=0),x>=f&&(x=0);return tensor4d(p,e.shape)},e.prototype.localResponseNormalization4D=function(e,t,n,r,o){this.assertNotComplex(e,"localResponseNormalization4D");var a=e.shape[3],i=a-1,s=e.dataSync(),u=e.size,c=new Float32Array(u);function l(e){for(var n=e%a,r=e-n+Math.max(0,n-t),o=e-n+Math.min(n+t,i),u=0;r<=o;r++){var c=s[r];u+=c*c;}return u}for(var p=0;p=0&&a[i]1,function(){return "blockSize should be > 1 for depthToSpace, but was: "+t});for(var r=e.shape[0],o=e.shape[1],a=e.shape[2],i=e.shape[3],s=o*t,u=a*t,c=i/(t*t),l=e.dataSync(),p=new Float32Array(r*s*u*c),d=0,h=0;h=s))for(var N=d>1?(S-b)*(u-1)/(d-1):0,_=h>1?(C-w)*(c-1)/(h-1):0,R=0;R1?b*(u-1)+R*N:.5*(b+S)*(u-1);if(I<0||I>u-1)for(var k=0;k1?w*(c-1)+k*_:.5*(w+C)*(c-1))<0||q>c-1)for(D=0;D1?w*(c-1)+k*_:.5*(w+C)*(c-1))<0||q>c-1)for(D=0;D=e.size/s)throw new Error("Invalid indices: "+h+" does not index into "+e.shape);for(var v=0;v=r/o)throw new Error("Invalid indices: "+m+" does not index into "+n);for(var x=0;x0,function(){return "scheme must not be an empty string."});var r=e.getInstance();assert(null==r.managers[t],function(){return "A model store manager is already registered for scheme '"+t+"'."}),r.managers[t]=n;},e.getManager=function(e){var t=this.getInstance().managers[e];if(null==t)throw new Error("Cannot find model manager for scheme '"+e+"'");return t},e.getSchemes=function(){return Object.keys(this.getInstance().managers)},e}();function parseURL(e){if(-1===e.indexOf(URL_SCHEME_SUFFIX))throw new Error("The url string provided does not contain a scheme. Supported schemes are: "+ModelStoreManagerRegistry.getSchemes().join(","));return {scheme:e.split(URL_SCHEME_SUFFIX)[0],path:e.split(URL_SCHEME_SUFFIX)[1]}}function cloneModelInternal(e,t,n){return void 0===n&&(n=!1),__awaiter(this,void 0,void 0,function(){var r,o,a,i,s,u,c,l,p;return __generator(this,function(d){switch(d.label){case 0:return assert(e!==t,function(){return "Old path and new path are the same: '"+e+"'"}),assert((r=IORouterRegistry.getLoadHandlers(e)).length>0,function(){return "Copying failed because no load handler is found for source URL "+e+"."}),assert(r.length<2,function(){return "Copying failed because more than one ("+r.length+") load handlers for source URL "+e+"."}),o=r[0],assert((a=IORouterRegistry.getSaveHandlers(t)).length>0,function(){return "Copying failed because no save handler is found for destination URL "+t+"."}),assert(a.length<2,function(){return "Copying failed because more than one ("+r.length+") save handlers for destination URL "+t+"."}),i=a[0],s=parseURL(e).scheme,u=parseURL(e).path,c=s===parseURL(e).scheme,[4,o.load()];case 1:return l=d.sent(),n&&c?[4,ModelStoreManagerRegistry.getManager(s).removeModel(u)]:[3,3];case 2:d.sent(),d.label=3;case 3:return [4,i.save(l)];case 4:return p=d.sent(),!n||c?[3,6]:[4,ModelStoreManagerRegistry.getManager(s).removeModel(u)];case 5:d.sent(),d.label=6;case 6:return [2,p.modelArtifactsInfo]}})})}function listModels(){return __awaiter(this,void 0,void 0,function(){var e,t,n,r,o,a,i;return __generator(this,function(s){switch(s.label){case 0:e=ModelStoreManagerRegistry.getSchemes(),t={},n=0,r=e,s.label=1;case 1:return n0,function(){return "promises must be a none empty array"});}(e),function(e,t){assert(e>=0&&e<=1,function(){return "Progress fraction must be in range [0, 1], but got startFraction "+e}),assert(t>=0&&t<=1,function(){return "Progress fraction must be in range [0, 1], but got endFraction "+t}),assert(t>=e,function(){return "startFraction must be no more than endFraction, but got startFraction "+e+" and endFraction "+t});}(n=null==n?0:n,r=null==r?1:r);var o=0;return Promise.all(e.map(function(a){return a.then(function(a){var i=n+ ++o/e.length*(r-n);return t(i),a}),a}))}function loadWeightsAsArrayBuffer(e,t){return __awaiter(this,void 0,void 0,function(){var n,r,o,a,i,s,u,c,l;return __generator(this,function(p){switch(p.label){case 0:return null==t&&(t={}),n=null==t.fetchFunc?fetch:t.fetchFunc,r=e.map(function(e){return n(e,t.requestInit)}),o=0,a=.5,null!=t.onProgress?[3,2]:[4,Promise.all(r)];case 1:return i=p.sent(),[3,4];case 2:return [4,monitorPromisesProgress(r,t.onProgress,o,a)];case 3:i=p.sent(),p.label=4;case 4:return s=i.map(function(e){return e.arrayBuffer()}),u=.5,c=1,null!=t.onProgress?[3,6]:[4,Promise.all(s)];case 5:return l=p.sent(),[3,8];case 6:return [4,monitorPromisesProgress(s,t.onProgress,u,c)];case 7:l=p.sent(),p.label=8;case 8:return [2,l]}})})}function loadWeights(e,t,n,r){return void 0===t&&(t=""),__awaiter(this,void 0,void 0,function(){return __generator(this,function(o){return [2,weightsLoaderFactory(function(e){return loadWeightsAsArrayBuffer(e,{requestInit:r})})(e,t,n)]})})}function weightsLoaderFactory(e){var t=this;return function(n,r,o){return void 0===r&&(r=""),__awaiter(t,void 0,void 0,function(){var t,a,i,s,u,c,l,p,d,h;return __generator(this,function(f){switch(f.label){case 0:if(t=n.map(function(){return !1}),a={},i=null!=o?o.map(function(){return !1}):[],s=[],n.forEach(function(e,n){var r=0;e.weights.forEach(function(e){var u="quantization"in e?e.quantization.dtype:e.dtype,c=DTYPE_VALUE_SIZE_MAP[u]*sizeFromShape(e.shape),l=function(){t[n]=!0,null==a[n]&&(a[n]=[]),a[n].push({manifestEntry:e,groupOffset:r,sizeBytes:c});};null!=o?o.forEach(function(t,n){t===e.name&&(l(),i[n]=!0);}):l(),s.push(e.name),r+=c;});}),!i.every(function(e){return e}))throw u=o.filter(function(e,t){return !i[t]}),new Error("Could not find weights in manifest with names: "+u.join(", ")+". \nManifest JSON has weights with names: "+s.join(", ")+".");return c=t.reduce(function(e,t,n){return t&&e.push(n),e},[]),l=[],c.forEach(function(e){n[e].paths.forEach(function(e){var t=r+(r.endsWith("/")?"":"/")+e;l.push(t);});}),[4,e(l)];case 1:return p=f.sent(),d={},h=0,c.forEach(function(e){for(var t=n[e].paths.length,r=0,o=0;o0,function(){return "URL path for browserHTTPRequest must not be null, undefined or empty."}),Array.isArray(e)&&assert(2===e.length,function(){return "URL paths for browserHTTPRequest must have a length of 2, (actual length is "+e.length+")."}),this.path=e,null!=t.requestInit&&null!=t.requestInit.body)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{};}return e.prototype.save=function(e){return __awaiter(this,void 0,void 0,function(){var t,n,r,o;return __generator(this,function(a){switch(a.label){case 0:if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");return (t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit)).body=new FormData,n=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],r={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:n},t.body.append("model.json",new Blob([JSON.stringify(r)],{type:JSON_TYPE}),"model.json"),null!=e.weightData&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:OCTET_STREAM_MIME_TYPE}),"model.weights.bin"),[4,this.getFetchFunc()(this.path,t)];case 1:if((o=a.sent()).ok)return [2,{modelArtifactsInfo:getModelArtifactsInfoForJSON(e),responses:[o]}];throw new Error("BrowserHTTPRequest.save() failed due to HTTP response status "+o.status+".")}})})},e.prototype.load=function(){return __awaiter(this,void 0,void 0,function(){var e,t,n,r,o,a,i,s;return __generator(this,function(u){switch(u.label){case 0:return [4,this.getFetchFunc()(this.path,this.requestInit)];case 1:if(!(e=u.sent()).ok)throw new Error("Request to "+this.path+" failed with status code "+e.status+". Please verify this URL points to the model JSON of the model to load.");u.label=2;case 2:return u.trys.push([2,4,,5]),[4,e.json()];case 3:return t=u.sent(),[3,5];case 4:throw u.sent(),n="Failed to parse model JSON of response from "+this.path+".",this.path.endsWith(".pb")?n+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":n+=" Please make sure the server is serving valid JSON for this request.",new Error(n);case 5:if(r=t.modelTopology,o=t.weightsManifest,null==r&&null==o)throw new Error("The JSON from HTTP path "+this.path+" contains neither model topology or manifest for weights.");return null==o?[3,7]:[4,this.loadWeights(o)];case 6:s=u.sent(),a=s[0],i=s[1],u.label=7;case 7:return [2,{modelTopology:r,weightSpecs:a,weightData:i}]}})})},e.prototype.loadWeights=function(e){return __awaiter(this,void 0,void 0,function(){var t,n,r,o,a,i,s,u,c,l,p;return __generator(this,function(d){switch(d.label){case 0:for(t=Array.isArray(this.path)?this.path[1]:this.path,n=parseUrl(t),r=n[0],o=n[1],a=this.weightPathPrefix||r,i=[],s=0,u=e;st?e.substring(n):""]}function isHTTPScheme(e){return null!=e.match(BrowserHTTPRequest.URL_SCHEME_REGEX)}var httpRequestRouter=function(e,t){if("undefined"==typeof fetch)return null;return (Array.isArray(e)?e.every(function(e){return isHTTPScheme(e)}):isHTTPScheme(e))?browserHTTPRequest(e,{onProgress:t}):null};function browserHTTPRequest(e,t){return new BrowserHTTPRequest(e,t)}IORouterRegistry.registerSaveRouter(httpRequestRouter),IORouterRegistry.registerLoadRouter(httpRequestRouter);var PassthroughLoader=function(){function e(e,t,n){this.modelTopology=e,this.weightSpecs=t,this.weightData=n;}return e.prototype.load=function(){return __awaiter(this,void 0,void 0,function(){var e;return __generator(this,function(t){return e={},null!=this.modelTopology&&(e=__assign({modelTopology:this.modelTopology},e)),null!=this.weightSpecs&&this.weightSpecs.length>0&&(e=__assign({weightSpecs:this.weightSpecs},e)),null!=this.weightData&&this.weightData.byteLength>0&&(e=__assign({weightData:this.weightData},e)),[2,e]})})},e}(),PassthroughSaver=function(){function e(e){this.saveHandler=e;}return e.prototype.save=function(e){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(t){return [2,this.saveHandler(e)]})})},e}();function fromMemory(e,t,n){return new PassthroughLoader(e,t,n)}function withSaveHandler(e){return new PassthroughSaver(e)}var io=Object.freeze({browserFiles:browserFiles,browserHTTPRequest:browserHTTPRequest,concatenateArrayBuffers:concatenateArrayBuffers,decodeWeights:decodeWeights,encodeWeights:encodeWeights,fromMemory:fromMemory,getLoadHandlers:getLoadHandlers,getModelArtifactsInfoForJSON:getModelArtifactsInfoForJSON,getSaveHandlers:getSaveHandlers,isHTTPScheme:isHTTPScheme,loadWeights:loadWeights,registerLoadRouter:registerLoadRouter,registerSaveRouter:registerSaveRouter,weightsLoaderFactory:weightsLoaderFactory,withSaveHandler:withSaveHandler,copyModel:copyModel,listModels:listModels,moveModel:moveModel,removeModel:removeModel});function confusionMatrix_(e,t,n){var r=convertToTensor(e,"labels","confusionMatrix"),o=convertToTensor(t,"predictions","confusionMatrix");assert(null==n||n>0&&Number.isInteger(n),function(){return "If provided, numClasses must be a positive integer, but got "+n}),assert(1===r.rank,function(){return "Expected the rank of labels to be 1, but got "+r.rank}),assert(1===o.rank,function(){return "Expected the rank of predictions to be 1, but got "+o.rank}),assert(r.shape[0]===o.shape[0],function(){return "Mismatch in the number of examples: "+r.shape[0]+" vs. "+o.shape[0]+". Labels and predictions should have the same number of elements."}),assert(n>0&&Number.isInteger(n),function(){return "numClasses is required to be a positive integer, but got "+n});var a=oneHot(r.asType("int32"),n),i=oneHot(o.asType("int32"),n);return a.transpose().matMul(i).asType("int32")}var confusionMatrix=op({confusionMatrix_:confusionMatrix_}),math=Object.freeze({confusionMatrix:confusionMatrix});function fromPixels_(e,t){if(void 0===t&&(t=3),t>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");return ENV.engine.fromPixels(e,t)}function toPixels(e,t){return __awaiter(this,void 0,void 0,function(){var n,r,o,a,i,s,u,c,l,p,d,h,f,m,g,v,y,x,E,T;return __generator(this,function(b){switch(b.label){case 0:if(n=convertToTensor(e,"img","toPixels"),e instanceof Tensor||(n=n.toInt()),2!==n.rank&&3!==n.rank)throw new Error("toPixels only supports rank 2 or 3 tensors, got rank "+n.rank+".");if(r=n.shape.slice(0,2),o=r[0],a=r[1],(i=2===n.rank?1:n.shape[2])>4||2===i)throw new Error("toPixels only supports depth of size 1, 3 or 4 but got "+i);return s=n.min(),u=n.max(),[4,s.data()];case 1:return c=b.sent()[0],[4,u.data()];case 2:if(l=b.sent()[0],s.dispose(),u.dispose(),"float32"===n.dtype){if(c<0||l>1)throw new Error("Tensor values for a float32 Tensor must be in the range [0 - 1] but got range ["+c+" - "+l+"].")}else{if("int32"!==n.dtype)throw new Error("Unsupported type for toPixels: "+n.dtype+". Please use float32 or int32 tensors.");if(c<0||l>255)throw new Error("Tensor values for a int32 Tensor must be in the range [0 - 255] but got range ["+c+" - "+l+"].")}return [4,n.data()];case 3:for(p=b.sent(),d="float32"===n.dtype?255:1,h=new Uint8ClampedArray(a*o*4),f=0;f0,function(){return "Class being registered has an empty-string as its className, which is disallowed."}),SerializationMap.register(e);}var serialization=Object.freeze({Serializable:Serializable,SerializationMap:SerializationMap,registerClass:registerClass}),WEBGL_ENVS={HAS_WEBGL:!0},PACKED_ENVS={WEBGL_PACK:!0},NODE_ENVS={IS_NODE:!0},CHROME_ENVS={IS_CHROME:!0},BROWSER_ENVS={IS_BROWSER:!0},CPU_ENVS={HAS_WEBGL:!1},ALL_ENVS={};function expectArraysClose(e,t,n){return null==n&&(n=ENV.get("TEST_EPSILON")),expectArraysPredicate(e,"number"==typeof t||"boolean"==typeof t?[t]:t,function(e,t){return areClose(e,Number(t),n)})}function expectArraysPredicate(e,t,n){if(e instanceof Tensor||t instanceof Tensor){if(e instanceof Tensor&&t instanceof Tensor){if(e.dtype!==t.dtype)throw new Error("Arrays are of different type actual: "+e.dtype+" vs expected: "+t.dtype+".");if(!arraysEqual(e.shape,t.shape))throw new Error("Arrays are of different shape actual: "+e.shape+" vs expected: "+t.shape+".")}}else{var r=e.constructor.name,o=t.constructor.name;if(r!==o)throw new Error("Arrays are of different type actual: "+r+" vs expected: "+o)}var a,i;if(a=e instanceof Tensor?e.dataSync():e,i=t instanceof Tensor?t.dataSync():t,a.length!==i.length)throw new Error("Arrays have different lengths actual: "+a.length+" vs expected: "+i.length+".\nActual: "+a+".\nExpected: "+i+".");for(var s=0;sn)}function expectValuesInRange(e,t,n){var r;r=e instanceof Tensor?e.dataSync():e;for(var o=0;on)throw new Error("Value out of range:"+r[o]+" low: "+t+", high: "+n)}function expectArrayBuffersEqual(e,t){expect(new Float32Array(e)).toEqual(new Float32Array(t));}var test_util=Object.freeze({WEBGL_ENVS:WEBGL_ENVS,PACKED_ENVS:PACKED_ENVS,NODE_ENVS:NODE_ENVS,CHROME_ENVS:CHROME_ENVS,BROWSER_ENVS:BROWSER_ENVS,CPU_ENVS:CPU_ENVS,ALL_ENVS:ALL_ENVS,expectArraysClose:expectArraysClose,expectPromiseToFail:expectPromiseToFail,expectArraysEqual:expectArraysEqual,expectNumbersClose:expectNumbersClose,expectValuesInRange:expectValuesInRange,expectArrayBuffersEqual:expectArrayBuffersEqual}),version="1.0.3",webgl=Object.freeze({gpgpu_util:gpgpu_util,webgl_util:webgl_util,MathBackendWebGL:MathBackendWebGL,GPGPUContext:GPGPUContext}),Optimizer=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return __extends(t,e),t.prototype.minimize=function(e,t,n){void 0===t&&(t=!1);var r=this.computeGradients(e,n),o=r.value,a=r.grads;return this.applyGradients(a),Object.keys(a).forEach(function(e){return a[e].dispose()}),t?o:(o.dispose(),null)},t.prototype.computeGradients=function(e,t){return variableGrads(e,t)},t.prototype.dispose=function(){},t}(Serializable);Object.defineProperty(Optimizer,Symbol.hasInstance,{value:function(e){return null!=e.minimize&&null!=e.computeGradients&&null!=e.applyGradients}});var AdadeltaOptimizer=function(e){function t(t,n,r){void 0===r&&(r=null);var o=e.call(this)||this;return o.learningRate=t,o.rho=n,o.epsilon=r,o.accumulatedGrads={},o.accumulatedUpdates={},o.c=keep(scalar(-t)),o.rhoScalar=keep(scalar(n)),o.oneMinusRho=keep(scalar(1-n)),null===r&&(r=ENV.get("EPSILON")),o.epsilonScalar=keep(scalar(r)),o}return __extends(t,e),t.prototype.applyGradients=function(e){var t=this,n=function(n){var o=ENV.engine.registeredVariables[n];if(null==r.accumulatedGrads[n]){tidy(function(){t.accumulatedGrads[n]=zerosLike(o).variable(!1);});}if(null==r.accumulatedUpdates[n]){tidy(function(){t.accumulatedUpdates[n]=zerosLike(o).variable(!1);});}var a=e[n],i=r.accumulatedGrads[n],s=r.accumulatedUpdates[n];tidy(function(){var e=t.rhoScalar.mul(i).add(t.oneMinusRho.mul(a.square())),r=s.add(t.epsilonScalar).sqrt().div(i.add(t.epsilonScalar).sqrt()).mul(a),u=t.rhoScalar.mul(s).add(t.oneMinusRho.mul(r.square()));t.accumulatedGrads[n].assign(e),t.accumulatedUpdates[n].assign(u);var c=t.c.mul(r).add(o);o.assign(c);});},r=this;for(var o in e)n(o);},t.prototype.dispose=function(){var e=this;this.c.dispose(),this.epsilonScalar.dispose(),this.rhoScalar.dispose(),this.oneMinusRho.dispose(),null!=this.accumulatedUpdates&&(Object.keys(this.accumulatedUpdates).forEach(function(t){return e.accumulatedUpdates[t].dispose()}),Object.keys(this.accumulatedGrads).forEach(function(t){return e.accumulatedGrads[t].dispose()}));},t.prototype.getConfig=function(){return {learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}},t.fromConfig=function(e,t){return new e(t.learningRate,t.rho,t.epsilon)},t.className="AdadeltaOptimizer",t}(Optimizer);registerClass(AdadeltaOptimizer);var AdagradOptimizer=function(e){function t(t,n){void 0===n&&(n=.1);var r=e.call(this)||this;return r.learningRate=t,r.initialAccumulatorValue=n,r.accumulatedGrads={},r.c=keep(scalar(-t)),r.epsilon=keep(scalar(ENV.get("EPSILON"))),r}return __extends(t,e),t.prototype.applyGradients=function(e){var t=this,n=function(n){var o=ENV.engine.registeredVariables[n];if(null==r.accumulatedGrads[n]){tidy(function(){t.accumulatedGrads[n]=fill(o.shape,t.initialAccumulatorValue).variable(!1);});}var a=e[n],i=r.accumulatedGrads[n];tidy(function(){var e=i.add(a.square());t.accumulatedGrads[n].assign(e);var r=t.c.mul(a.div(e.add(t.epsilon).sqrt())).add(o);o.assign(r);});},r=this;for(var o in e)n(o);},t.prototype.dispose=function(){var e=this;this.epsilon.dispose(),this.c.dispose(),null!=this.accumulatedGrads&&Object.keys(this.accumulatedGrads).forEach(function(t){return e.accumulatedGrads[t].dispose()});},t.prototype.getConfig=function(){return {learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}},t.fromConfig=function(e,t){return new e(t.learningRate,t.initialAccumulatorValue)},t.className="AdagradOptimizer",t}(Optimizer);registerClass(AdagradOptimizer);var AdamOptimizer=function(e){function t(t,n,r,o){void 0===o&&(o=null);var a=e.call(this)||this;return a.learningRate=t,a.beta1=n,a.beta2=r,a.epsilon=o,a.accumulatedFirstMoment={},a.accumulatedSecondMoment={},a.c=keep(scalar(-t)),a.beta1Scalar=keep(scalar(n)),a.beta2Scalar=keep(scalar(r)),tidy(function(){a.accBeta1=scalar(n).variable(),a.accBeta2=scalar(r).variable();}),a.oneMinusBeta1=keep(scalar(1-n)),a.oneMinusBeta2=keep(scalar(1-r)),a.one=keep(scalar(1)),null===o&&(o=ENV.get("EPSILON")),a.epsScalar=keep(scalar(o)),a}return __extends(t,e),t.prototype.applyGradients=function(e){var t=this;tidy(function(){var n=t.one.sub(t.accBeta1),r=t.one.sub(t.accBeta2);for(var o in e){var a=ENV.engine.registeredVariables[o];if(null==t.accumulatedFirstMoment[o]){var i=!1;t.accumulatedFirstMoment[o]=zerosLike(a).variable(i);}if(null==t.accumulatedSecondMoment[o]){i=!1;t.accumulatedSecondMoment[o]=zerosLike(a).variable(i);}var s=e[o],u=t.accumulatedFirstMoment[o],c=t.accumulatedSecondMoment[o],l=t.beta1Scalar.mul(u).add(t.oneMinusBeta1.mul(s)),p=t.beta2Scalar.mul(c).add(t.oneMinusBeta2.mul(s.square())),d=l.div(n),h=p.div(r);t.accumulatedFirstMoment[o].assign(l),t.accumulatedSecondMoment[o].assign(p);var f=t.c.mul(d.div(t.epsScalar.add(h.sqrt()))).add(a);a.assign(f);}t.accBeta1.assign(t.accBeta1.mul(t.beta1Scalar)),t.accBeta2.assign(t.accBeta2.mul(t.beta2Scalar));});},t.prototype.dispose=function(){var e=this;this.c.dispose(),this.epsScalar.dispose(),this.beta1Scalar.dispose(),this.beta2Scalar.dispose(),this.accBeta1.dispose(),this.accBeta2.dispose(),this.oneMinusBeta1.dispose(),this.oneMinusBeta2.dispose(),this.one.dispose(),null!=this.accumulatedFirstMoment&&Object.keys(this.accumulatedFirstMoment).forEach(function(t){return e.accumulatedFirstMoment[t].dispose()}),null!=this.accumulatedSecondMoment&&Object.keys(this.accumulatedSecondMoment).forEach(function(t){return e.accumulatedSecondMoment[t].dispose()});},t.prototype.getConfig=function(){return {learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}},t.fromConfig=function(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)},t.className="AdamOptimizer",t}(Optimizer);registerClass(AdamOptimizer);var AdamaxOptimizer=function(e){function t(t,n,r,o,a){void 0===o&&(o=null),void 0===a&&(a=0);var i=e.call(this)||this;return i.learningRate=t,i.beta1=n,i.beta2=r,i.epsilon=o,i.decay=a,i.accumulatedFirstMoment={},i.accumulatedWeightedInfNorm={},i.c=keep(scalar(-t)),i.beta1Scalar=keep(scalar(n)),i.beta2Scalar=keep(scalar(r)),i.decayScalar=keep(scalar(a)),tidy(function(){i.iteration=scalar(0).variable(),i.accBeta1=scalar(n).variable();}),i.oneMinusBeta1=keep(scalar(1-n)),i.one=keep(scalar(1)),null===o&&(o=ENV.get("EPSILON")),i.epsScalar=keep(scalar(o)),i}return __extends(t,e),t.prototype.applyGradients=function(e){var t=this;tidy(function(){var n=t.one.sub(t.accBeta1),r=t.c.div(t.one.add(t.decayScalar.mul(t.iteration)));for(var o in e){var a=ENV.engine.registeredVariables[o];if(null==t.accumulatedFirstMoment[o]){var i=!1;t.accumulatedFirstMoment[o]=zerosLike(a).variable(i);}if(null==t.accumulatedWeightedInfNorm[o]){i=!1;t.accumulatedWeightedInfNorm[o]=zerosLike(a).variable(i);}var s=e[o],u=t.accumulatedFirstMoment[o],c=t.accumulatedWeightedInfNorm[o],l=t.beta1Scalar.mul(u).add(t.oneMinusBeta1.mul(s)),p=t.beta2Scalar.mul(c),d=s.abs(),h=p.maximum(d);t.accumulatedFirstMoment[o].assign(l),t.accumulatedWeightedInfNorm[o].assign(h);var f=r.div(n).mul(l.div(t.epsScalar.add(h))).add(a);a.assign(f);}t.iteration.assign(t.iteration.add(t.one)),t.accBeta1.assign(t.accBeta1.mul(t.beta1Scalar));});},t.prototype.dispose=function(){var e=this;this.c.dispose(),this.epsScalar.dispose(),this.accBeta1.dispose(),this.beta1Scalar.dispose(),this.beta2Scalar.dispose(),this.oneMinusBeta1.dispose(),this.decayScalar.dispose(),this.iteration.dispose(),this.one.dispose(),null!=this.accumulatedFirstMoment&&Object.keys(this.accumulatedFirstMoment).forEach(function(t){return e.accumulatedFirstMoment[t].dispose()}),null!=this.accumulatedWeightedInfNorm&&Object.keys(this.accumulatedWeightedInfNorm).forEach(function(t){return e.accumulatedWeightedInfNorm[t].dispose()});},t.prototype.getConfig=function(){return {learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}},t.fromConfig=function(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon,t.decay)},t.className="AdamaxOptimizer",t}(Optimizer);registerClass(AdamaxOptimizer);var SGDOptimizer=function(e){function t(t){var n=e.call(this)||this;return n.learningRate=t,n.setLearningRate(t),n}return __extends(t,e),t.prototype.applyGradients=function(e){var t=this;Object.keys(e).forEach(function(n){var r=e[n],o=ENV.engine.registeredVariables[n];tidy(function(){var e=t.c.mul(r).add(o);o.assign(e);});});},t.prototype.setLearningRate=function(e){this.learningRate=e,null!=this.c&&this.c.dispose(),this.c=keep(scalar(-e));},t.prototype.dispose=function(){this.c.dispose();},t.prototype.getConfig=function(){return {learningRate:this.learningRate}},t.fromConfig=function(e,t){return new e(t.learningRate)},t.className="SGDOptimizer",t}(Optimizer);registerClass(SGDOptimizer);var MomentumOptimizer=function(e){function t(t,n,r){void 0===r&&(r=!1);var o=e.call(this,t)||this;return o.learningRate=t,o.momentum=n,o.useNesterov=r,o.m=scalar(o.momentum),o.accumulations={},o}return __extends(t,e),t.prototype.applyGradients=function(e){var t=this,n=function(n){var o=ENV.engine.registeredVariables[n];if(null==r.accumulations[n]){tidy(function(){t.accumulations[n]=zerosLike(o).variable(!1);});}var a=r.accumulations[n],i=e[n];tidy(function(){var e,r=t.m.mul(a).add(i);e=t.useNesterov?t.c.mul(i.add(r.mul(t.m))).add(o):t.c.mul(r).add(o),t.accumulations[n].assign(r),o.assign(e);});},r=this;for(var o in e)n(o);},t.prototype.dispose=function(){if(e.prototype.dispose.call(this),this.m.dispose(),null!=this.accumulations)for(var t in this.accumulations)this.accumulations[t].dispose();},t.prototype.setMomentum=function(e){this.momentum=e;},t.prototype.getConfig=function(){return {learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}},t.fromConfig=function(e,t){return new e(t.learningRate,t.momentum,t.useNesterov)},t.className="MomentumOptimizer",t}(SGDOptimizer);registerClass(MomentumOptimizer);var RMSPropOptimizer=function(e){function t(t,n,r,o,a){void 0===n&&(n=.9),void 0===r&&(r=0),void 0===o&&(o=null),void 0===a&&(a=!1);var i=e.call(this)||this;return i.learningRate=t,i.decay=n,i.momentum=r,i.epsilon=o,i.accumulatedMeanSquares={},i.accumulatedMeanGrads={},i.accumulatedMoments={},i.c=keep(scalar(t)),i.decayScalar=keep(scalar(n)),i.momentumScalar=keep(scalar(r)),i.oneMinusDecay=keep(scalar(1-n)),i.centered=a,null===o&&(o=ENV.get("EPSILON")),i.epsilonScalar=keep(scalar(o)),i}return __extends(t,e),t.prototype.applyGradients=function(e){var t=this,n=function(n){var o=ENV.engine.registeredVariables[n];if(null==r.accumulatedMeanSquares[n]){tidy(function(){t.accumulatedMeanSquares[n]=zerosLike(o).variable(!1);});}if(null==r.accumulatedMeanGrads[n]&&r.centered){tidy(function(){t.accumulatedMeanGrads[n]=zerosLike(o).variable(!1);});}if(null==r.accumulatedMoments[n]){tidy(function(){t.accumulatedMoments[n]=zerosLike(o).variable(!1);});}var a=r.accumulatedMeanSquares[n],i=r.accumulatedMeanGrads[n],s=r.accumulatedMoments[n],u=e[n];tidy(function(){var e=t.decayScalar.mul(a).add(t.oneMinusDecay.mul(u.square()));if(t.centered){var r=t.decayScalar.mul(i).add(t.oneMinusDecay.mul(u)),c=t.momentumScalar.mul(s).add(t.c.mul(u).div(e.sub(r.square().add(t.epsilonScalar)).sqrt()));t.accumulatedMeanSquares[n].assign(e),t.accumulatedMeanGrads[n].assign(r),t.accumulatedMoments[n].assign(c);var l=o.sub(c);o.assign(l);}else{var p=t.decayScalar.mul(a).add(t.oneMinusDecay.mul(u.square()));c=t.momentumScalar.mul(s).add(t.c.mul(u).div(p.add(t.epsilonScalar).sqrt()));t.accumulatedMeanSquares[n].assign(p),t.accumulatedMoments[n].assign(c);l=o.sub(c);o.assign(l);}});},r=this;for(var o in e)n(o);},t.prototype.dispose=function(){var e=this;this.c.dispose(),this.epsilonScalar.dispose(),this.decayScalar.dispose(),this.momentumScalar.dispose(),this.oneMinusDecay.dispose(),null!=this.accumulatedMeanSquares&&Object.keys(this.accumulatedMeanSquares).forEach(function(t){return e.accumulatedMeanSquares[t].dispose()}),null!=this.accumulatedMeanGrads&&this.centered&&Object.keys(this.accumulatedMeanGrads).forEach(function(t){return e.accumulatedMeanGrads[t].dispose()}),null!=this.accumulatedMoments&&Object.keys(this.accumulatedMoments).forEach(function(t){return e.accumulatedMoments[t].dispose()});},t.prototype.getConfig=function(){return {learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}},t.fromConfig=function(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)},t.className="RMSPropOptimizer",t}(Optimizer);registerClass(RMSPropOptimizer);var OptimizerConstructors=function(){function e(){}return e.sgd=function(e){return new SGDOptimizer(e)},e.momentum=function(e,t,n){return void 0===n&&(n=!1),new MomentumOptimizer(e,t,n)},e.rmsprop=function(e,t,n,r,o){return void 0===t&&(t=.9),void 0===n&&(n=0),void 0===r&&(r=null),void 0===o&&(o=!1),new RMSPropOptimizer(e,t,n,r,o)},e.adam=function(e,t,n,r){return void 0===e&&(e=.001),void 0===t&&(t=.9),void 0===n&&(n=.999),void 0===r&&(r=null),new AdamOptimizer(e,t,n,r)},e.adadelta=function(e,t,n){return void 0===e&&(e=.001),void 0===t&&(t=.95),void 0===n&&(n=null),new AdadeltaOptimizer(e,t,n)},e.adamax=function(e,t,n,r,o){return void 0===e&&(e=.002),void 0===t&&(t=.9),void 0===n&&(n=.999),void 0===r&&(r=null),void 0===o&&(o=0),new AdamaxOptimizer(e,t,n,r,o)},e.adagrad=function(e,t){return void 0===t&&(t=.1),new AdagradOptimizer(e,t)},e}(),train={sgd:OptimizerConstructors.sgd,momentum:OptimizerConstructors.momentum,adadelta:OptimizerConstructors.adadelta,adagrad:OptimizerConstructors.adagrad,rmsprop:OptimizerConstructors.rmsprop,adamax:OptimizerConstructors.adamax,adam:OptimizerConstructors.adam},setBackend=Environment.setBackend,getBackend=Environment.getBackend,disposeVariables=Environment.disposeVariables,memory=Environment.memory;setOpHandler(ops); - - var tfCore_esm = /*#__PURE__*/Object.freeze({ - setBackend: setBackend, - getBackend: getBackend, - disposeVariables: disposeVariables, - memory: memory, - version_core: version, - nextFrame: nextFrame, - enableProdMode: enableProdMode, - enableDebugMode: enableDebugMode, - disableDeprecationWarnings: disableDeprecationWarnings, - deprecationWarn: deprecationWarn, - browser: browser, - environment: environment, - io: io, - math: math, - serialization: serialization, - test_util: test_util, - util: util, - webgl: webgl, - tensor_util: tensor_util, - AdadeltaOptimizer: AdadeltaOptimizer, - AdagradOptimizer: AdagradOptimizer, - AdamOptimizer: AdamOptimizer, - AdamaxOptimizer: AdamaxOptimizer, - MomentumOptimizer: MomentumOptimizer, - Optimizer: Optimizer, - RMSPropOptimizer: RMSPropOptimizer, - SGDOptimizer: SGDOptimizer, - Tensor: Tensor, - TensorBuffer: TensorBuffer, - variable: variable, - Variable: Variable, - get Rank () { return Rank; }, - get Reduction () { return Reduction; }, - ENV: ENV, - Environment: Environment, - KernelBackend: KernelBackend, - DataStorage: DataStorage, - image: image_ops, - linalg: linalg_ops, - losses: loss_ops, - spectral: spectral_ops, - fused: fused_ops, - op: op, - batchNormalization2d: batchNormalization2d, - batchNormalization3d: batchNormalization3d, - batchNormalization4d: batchNormalization4d, - batchNormalization: batchNormalization, - batchNorm: batchNorm, - batchNorm2d: batchNorm2d, - batchNorm3d: batchNorm3d, - batchNorm4d: batchNorm4d, - complex: complex, - real: real, - imag: imag, - concat: concat, - concat1d: concat1d, - concat2d: concat2d, - concat3d: concat3d, - concat4d: concat4d, - split: split$1, - conv1d: conv1d, - conv2d: conv2d, - conv3d: conv3d, - conv2dDerFilter: conv2dDerFilter, - depthwiseConv2d: depthwiseConv2d, - separableConv2d: separableConv2d, - conv2dTranspose: conv2dTranspose, - matMul: matMul, - dot: dot, - outerProduct: outerProduct, - reverse: reverse, - reverse1d: reverse1d, - reverse2d: reverse2d, - reverse3d: reverse3d, - reverse4d: reverse4d, - maxPool: maxPool, - avgPool: avgPool, - pool: pool, - slice: slice, - slice1d: slice1d, - slice2d: slice2d, - slice3d: slice3d, - slice4d: slice4d, - abs: abs, - acos: acos, - acosh: acosh, - asin: asin, - asinh: asinh, - atan: atan, - atanh: atanh, - ceil: ceil, - clipByValue: clipByValue, - cos: cos, - cosh: cosh, - erf: erf, - exp: exp, - expm1: expm1, - floor: floor, - log: log$1, - log1p: log1p, - logSigmoid: logSigmoid, - neg: neg, - reciprocal: reciprocal, - round: round, - rsqrt: rsqrt, - sigmoid: sigmoid, - sign: sign, - isNaN: isNaN$1, - isInf: isInf, - isFinite: isFinite$1, - sin: sin, - sinh: sinh, - softplus: softplus, - sqrt: sqrt, - square: square, - step: step, - tan: tan, - tanh: tanh$1, - all: all, - any: any, - argMax: argMax, - argMin: argMin, - logSumExp: logSumExp, - max: max, - mean: mean, - min: min, - moments: moments, - sum: sum$1, - prod: prod, - equal: equal, - equalStrict: equalStrict, - greater: greater, - greaterEqual: greaterEqual, - greaterEqualStrict: greaterEqualStrict, - greaterStrict: greaterStrict, - less: less, - lessEqual: lessEqual, - lessEqualStrict: lessEqualStrict, - lessStrict: lessStrict, - notEqual: notEqual, - notEqualStrict: notEqualStrict, - add: add, - addN: addN, - addStrict: addStrict, - atan2: atan2, - div: div, - divStrict: divStrict, - floorDiv: floorDiv, - maximum: maximum, - maximumStrict: maximumStrict, - minimum: minimum, - minimumStrict: minimumStrict, - mod: mod, - modStrict: modStrict, - mul: mul, - mulStrict: mulStrict, - pow: pow, - powStrict: powStrict, - squaredDifference: squaredDifference, - squaredDifferenceStrict: squaredDifferenceStrict, - sub: sub, - subStrict: subStrict, - elu: elu, - leakyRelu: leakyRelu, - prelu: prelu, - relu: relu, - selu: selu, - logicalAnd: logicalAnd, - logicalNot: logicalNot, - logicalOr: logicalOr, - logicalXor: logicalXor, - where: where, - whereAsync: whereAsync, - buffer: buffer, - print: print, - batchToSpaceND: batchToSpaceND, - cast: cast, - clone: clone, - cumsum: cumsum, - depthToSpace: depthToSpace, - expandDims: expandDims, - eye: eye, - multinomial: multinomial, - oneHot: oneHot, - pad: pad, - pad1d: pad1d, - pad2d: pad2d, - pad3d: pad3d, - pad4d: pad4d, - rand: rand, - randomNormal: randomNormal, - randomUniform: randomUniform, - reshape: reshape, - spaceToBatchND: spaceToBatchND, - squeeze: squeeze, - stack: stack, - tile: tile, - truncatedNormal: truncatedNormal, - unstack: unstack, - setdiff1dAsync: setdiff1dAsync, - fill: fill, - linspace: linspace, - ones: ones$1, - range: range, - scalar: scalar, - tensor: tensor, - tensor1d: tensor1d, - tensor2d: tensor2d, - tensor3d: tensor3d, - tensor4d: tensor4d, - tensor5d: tensor5d, - tensor6d: tensor6d, - zeros: zeros, - onesLike: onesLike, - zerosLike: zerosLike, - transpose: transpose, - softmax: softmax, - logSoftmax: logSoftmax, - localResponseNormalization: localResponseNormalization, - norm: norm, - gather: gather, - unsortedSegmentSum: unsortedSegmentSum, - basicLSTMCell: basicLSTMCell, - multiRNNCell: multiRNNCell, - movingAverage: movingAverage, - stridedSlice: stridedSlice, - topk: topk, - scatterND: scatterND, - fft: fft, - ifft: ifft, - rfft: rfft, - irfft: irfft, - sparseToDense: sparseToDense, - gatherND: gatherND, - train: train, - tidy: tidy, - keep: keep, - dispose: dispose, - time: time, - profile: profile, - customGrad: customGrad, - grad: grad, - grads: grads, - valueAndGrad: valueAndGrad, - valueAndGrads: valueAndGrads, - variableGrads: variableGrads - }); - - function convLayer(x, params, padding, withRelu) { - if (padding === void 0) { padding = 'same'; } - if (withRelu === void 0) { withRelu = false; } - return tidy(function () { - var out = add(conv2d(x, params.filters, [1, 1], padding), params.bias); - return withRelu ? relu(out) : out; - }); - } - - function disposeUnusedWeightTensors(weightMap, paramMappings) { - Object.keys(weightMap).forEach(function (path) { - if (!paramMappings.some(function (pm) { return pm.originalPath === path; })) { - weightMap[path].dispose(); - } - }); - } - - function extractConvParamsFactory(extractWeights, paramMappings) { - return function (channelsIn, channelsOut, filterSize, mappedPrefix) { - var filters = tensor4d(extractWeights(channelsIn * channelsOut * filterSize * filterSize), [filterSize, filterSize, channelsIn, channelsOut]); - var bias = tensor1d(extractWeights(channelsOut)); - paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/bias" }); - return { filters: filters, bias: bias }; - }; - } - - function extractFCParamsFactory(extractWeights, paramMappings) { - return function (channelsIn, channelsOut, mappedPrefix) { - var fc_weights = tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]); - var fc_bias = tensor1d(extractWeights(channelsOut)); - paramMappings.push({ paramPath: mappedPrefix + "/weights" }, { paramPath: mappedPrefix + "/bias" }); - return { - weights: fc_weights, - bias: fc_bias - }; - }; - } - - var SeparableConvParams = /** @class */ (function () { - function SeparableConvParams(depthwise_filter, pointwise_filter, bias) { - this.depthwise_filter = depthwise_filter; - this.pointwise_filter = pointwise_filter; - this.bias = bias; - } - return SeparableConvParams; - }()); - - function extractSeparableConvParamsFactory(extractWeights, paramMappings) { - return function (channelsIn, channelsOut, mappedPrefix) { - var depthwise_filter = tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]); - var pointwise_filter = tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]); - var bias = tensor1d(extractWeights(channelsOut)); - paramMappings.push({ paramPath: mappedPrefix + "/depthwise_filter" }, { paramPath: mappedPrefix + "/pointwise_filter" }, { paramPath: mappedPrefix + "/bias" }); - return new SeparableConvParams(depthwise_filter, pointwise_filter, bias); - }; - } - function loadSeparableConvParamsFactory(extractWeightEntry) { - return function (prefix) { - var depthwise_filter = extractWeightEntry(prefix + "/depthwise_filter", 4); - var pointwise_filter = extractWeightEntry(prefix + "/pointwise_filter", 4); - var bias = extractWeightEntry(prefix + "/bias", 1); - return new SeparableConvParams(depthwise_filter, pointwise_filter, bias); - }; - } - - var Dimensions = /** @class */ (function () { - function Dimensions(width, height) { - if (!isValidNumber(width) || !isValidNumber(height)) { - throw new Error("Dimensions.constructor - expected width and height to be valid numbers, instead have " + JSON.stringify({ width: width, height: height })); - } - this._width = width; - this._height = height; - } - Object.defineProperty(Dimensions.prototype, "width", { - get: function () { return this._width; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Dimensions.prototype, "height", { - get: function () { return this._height; }, - enumerable: true, - configurable: true - }); - Dimensions.prototype.reverse = function () { - return new Dimensions(1 / this.width, 1 / this.height); - }; - return Dimensions; - }()); - - var Point = /** @class */ (function () { - function Point(x, y) { - this._x = x; - this._y = y; - } - Object.defineProperty(Point.prototype, "x", { - get: function () { return this._x; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Point.prototype, "y", { - get: function () { return this._y; }, - enumerable: true, - configurable: true - }); - Point.prototype.add = function (pt) { - return new Point(this.x + pt.x, this.y + pt.y); - }; - Point.prototype.sub = function (pt) { - return new Point(this.x - pt.x, this.y - pt.y); - }; - Point.prototype.mul = function (pt) { - return new Point(this.x * pt.x, this.y * pt.y); - }; - Point.prototype.div = function (pt) { - return new Point(this.x / pt.x, this.y / pt.y); - }; - Point.prototype.abs = function () { - return new Point(Math.abs(this.x), Math.abs(this.y)); - }; - Point.prototype.magnitude = function () { - return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2)); - }; - Point.prototype.floor = function () { - return new Point(Math.floor(this.x), Math.floor(this.y)); - }; - return Point; - }()); - - function isTensor(tensor, dim) { - return tensor instanceof Tensor && tensor.shape.length === dim; - } - function isTensor1D(tensor) { - return isTensor(tensor, 1); - } - function isTensor2D(tensor) { - return isTensor(tensor, 2); - } - function isTensor3D(tensor) { - return isTensor(tensor, 3); - } - function isTensor4D(tensor) { - return isTensor(tensor, 4); - } - function isFloat(num) { - return num % 1 !== 0; - } - function isEven$1(num) { - return num % 2 === 0; - } - function round$1(num, prec) { - if (prec === void 0) { prec = 2; } - var f = Math.pow(10, prec); - return Math.floor(num * f) / f; - } - function isDimensions(obj) { - return obj && obj.width && obj.height; - } - function computeReshapedDimensions(_a, inputSize) { - var width = _a.width, height = _a.height; - var scale = inputSize / Math.max(height, width); - return new Dimensions(Math.round(width * scale), Math.round(height * scale)); - } - function getCenterPoint(pts) { - return pts.reduce(function (sum, pt) { return sum.add(pt); }, new Point(0, 0)) - .div(new Point(pts.length, pts.length)); - } - function range$1(num, start, step) { - return Array(num).fill(0).map(function (_, i) { return start + (i * step); }); - } - function isValidNumber(num) { - return !!num && num !== Infinity && num !== -Infinity && !isNaN(num) || num === 0; - } - function isValidProbablitiy(num) { - return isValidNumber(num) && 0 <= num && num <= 1.0; - } - - function extractWeightEntryFactory(weightMap, paramMappings) { - return function (originalPath, paramRank, mappedPath) { - var tensor = weightMap[originalPath]; - if (!isTensor(tensor, paramRank)) { - throw new Error("expected weightMap[" + originalPath + "] to be a Tensor" + paramRank + "D, instead have " + tensor); - } - paramMappings.push({ originalPath: originalPath, paramPath: mappedPath || originalPath }); - return tensor; - }; - } - - function extractWeightsFactory(weights) { - var remainingWeights = weights; - function extractWeights(numWeights) { - var ret = remainingWeights.slice(0, numWeights); - remainingWeights = remainingWeights.slice(numWeights); - return ret; - } - function getRemainingWeights() { - return remainingWeights; - } - return { - extractWeights: extractWeights, - getRemainingWeights: getRemainingWeights - }; - } - - function getModelUris(uri, defaultModelName) { - var defaultManifestFilename = defaultModelName + "-weights_manifest.json"; - if (!uri) { - return { - modelBaseUri: '', - manifestUri: defaultManifestFilename - }; - } - if (uri === '/') { - return { - modelBaseUri: '/', - manifestUri: "/" + defaultManifestFilename - }; - } - var protocol = uri.startsWith('http://') ? 'http://' : uri.startsWith('https://') ? 'https://' : ''; - uri = uri.replace(protocol, ''); - var parts = uri.split('/').filter(function (s) { return s; }); - var manifestFile = uri.endsWith('.json') - ? parts[parts.length - 1] - : defaultManifestFilename; - var modelBaseUri = protocol + (uri.endsWith('.json') ? parts.slice(0, parts.length - 1) : parts).join('/'); - modelBaseUri = uri.startsWith('/') ? "/" + modelBaseUri : modelBaseUri; - return { - modelBaseUri: modelBaseUri, - manifestUri: modelBaseUri === '/' ? "/" + manifestFile : modelBaseUri + "/" + manifestFile - }; - } - - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. All rights reserved. - Licensed under the Apache License, Version 2.0 (the "License"); you may not use - this file except in compliance with the License. You may obtain a copy of the - License at http://www.apache.org/licenses/LICENSE-2.0 - - THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED - WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, - MERCHANTABLITY OR NON-INFRINGEMENT. - - See the Apache Version 2.0 License for specific language governing permissions - and limitations under the License. - ***************************************************************************** */ - /* global Reflect, Promise */ - - var extendStatics$1 = function(d, b) { - extendStatics$1 = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics$1(d, b); - }; - - function __extends$1(d, b) { - extendStatics$1(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - } - - var __assign$1 = function() { - __assign$1 = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign$1.apply(this, arguments); - }; - - function __awaiter$1(thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - } - - function __generator$1(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } - } - - var Box = /** @class */ (function () { - // TODO: MTCNN boxes sometimes have negative widths or heights, figure out why and remove - // allowNegativeDimensions flag again - function Box(_box, allowNegativeDimensions) { - if (allowNegativeDimensions === void 0) { allowNegativeDimensions = false; } - var box = (_box || {}); - var isBbox = [box.left, box.top, box.right, box.bottom].every(isValidNumber); - var isRect = [box.x, box.y, box.width, box.height].every(isValidNumber); - if (!isRect && !isBbox) { - throw new Error("Box.constructor - expected box to be IBoundingBox | IRect, instead have " + JSON.stringify(box)); - } - var _a = isRect - ? [box.x, box.y, box.width, box.height] - : [box.left, box.top, box.right - box.left, box.bottom - box.top], x = _a[0], y = _a[1], width = _a[2], height = _a[3]; - Box.assertIsValidBox({ x: x, y: y, width: width, height: height }, 'Box.constructor', allowNegativeDimensions); - this._x = x; - this._y = y; - this._width = width; - this._height = height; - } - Box.isRect = function (rect) { - return !!rect && [rect.x, rect.y, rect.width, rect.height].every(isValidNumber); - }; - Box.assertIsValidBox = function (box, callee, allowNegativeDimensions) { - if (allowNegativeDimensions === void 0) { allowNegativeDimensions = false; } - if (!Box.isRect(box)) { - throw new Error(callee + " - invalid box: " + JSON.stringify(box) + ", expected object with properties x, y, width, height"); - } - if (!allowNegativeDimensions && (box.width < 0 || box.height < 0)) { - throw new Error(callee + " - width (" + box.width + ") and height (" + box.height + ") must be positive numbers"); - } - }; - Object.defineProperty(Box.prototype, "x", { - get: function () { return this._x; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Box.prototype, "y", { - get: function () { return this._y; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Box.prototype, "width", { - get: function () { return this._width; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Box.prototype, "height", { - get: function () { return this._height; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Box.prototype, "left", { - get: function () { return this.x; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Box.prototype, "top", { - get: function () { return this.y; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Box.prototype, "right", { - get: function () { return this.x + this.width; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Box.prototype, "bottom", { - get: function () { return this.y + this.height; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Box.prototype, "area", { - get: function () { return this.width * this.height; }, - enumerable: true, - configurable: true - }); - Box.prototype.round = function () { - var _a = [this.x, this.y, this.width, this.height] - .map(function (val) { return Math.round(val); }), x = _a[0], y = _a[1], width = _a[2], height = _a[3]; - return new Box({ x: x, y: y, width: width, height: height }); - }; - Box.prototype.floor = function () { - var _a = [this.x, this.y, this.width, this.height] - .map(function (val) { return Math.floor(val); }), x = _a[0], y = _a[1], width = _a[2], height = _a[3]; - return new Box({ x: x, y: y, width: width, height: height }); - }; - Box.prototype.toSquare = function () { - var _a = this, x = _a.x, y = _a.y, width = _a.width, height = _a.height; - var diff = Math.abs(width - height); - if (width < height) { - x -= (diff / 2); - width += diff; - } - if (height < width) { - y -= (diff / 2); - height += diff; - } - return new Box({ x: x, y: y, width: width, height: height }); - }; - Box.prototype.rescale = function (s) { - var scaleX = isDimensions(s) ? s.width : s; - var scaleY = isDimensions(s) ? s.height : s; - return new Box({ - x: this.x * scaleX, - y: this.y * scaleY, - width: this.width * scaleX, - height: this.height * scaleY - }); - }; - Box.prototype.pad = function (padX, padY) { - var _a = [ - this.x - (padX / 2), - this.y - (padY / 2), - this.width + padX, - this.height + padY - ], x = _a[0], y = _a[1], width = _a[2], height = _a[3]; - return new Box({ x: x, y: y, width: width, height: height }); - }; - Box.prototype.clipAtImageBorders = function (imgWidth, imgHeight) { - var _a = this, x = _a.x, y = _a.y, right = _a.right, bottom = _a.bottom; - var clippedX = Math.max(x, 0); - var clippedY = Math.max(y, 0); - var newWidth = right - clippedX; - var newHeight = bottom - clippedY; - var clippedWidth = Math.min(newWidth, imgWidth - clippedX); - var clippedHeight = Math.min(newHeight, imgHeight - clippedY); - return (new Box({ x: clippedX, y: clippedY, width: clippedWidth, height: clippedHeight })).floor(); - }; - Box.prototype.shift = function (sx, sy) { - var _a = this, width = _a.width, height = _a.height; - var x = this.x + sx; - var y = this.y + sy; - return new Box({ x: x, y: y, width: width, height: height }); - }; - Box.prototype.padAtBorders = function (imageHeight, imageWidth) { - var w = this.width + 1; - var h = this.height + 1; - var dx = 1; - var dy = 1; - var edx = w; - var edy = h; - var x = this.left; - var y = this.top; - var ex = this.right; - var ey = this.bottom; - if (ex > imageWidth) { - edx = -ex + imageWidth + w; - ex = imageWidth; - } - if (ey > imageHeight) { - edy = -ey + imageHeight + h; - ey = imageHeight; - } - if (x < 1) { - edy = 2 - x; - x = 1; - } - if (y < 1) { - edy = 2 - y; - y = 1; - } - return { dy: dy, edy: edy, dx: dx, edx: edx, y: y, ey: ey, x: x, ex: ex, w: w, h: h }; - }; - Box.prototype.calibrate = function (region) { - return new Box({ - left: this.left + (region.left * this.width), - top: this.top + (region.top * this.height), - right: this.right + (region.right * this.width), - bottom: this.bottom + (region.bottom * this.height) - }).toSquare().round(); - }; - return Box; - }()); - - var BoundingBox = /** @class */ (function (_super) { - __extends$1(BoundingBox, _super); - function BoundingBox(left, top, right, bottom) { - return _super.call(this, { left: left, top: top, right: right, bottom: bottom }) || this; - } - return BoundingBox; - }(Box)); - - var ObjectDetection = /** @class */ (function () { - function ObjectDetection(score, classScore, className, relativeBox, imageDims) { - this._imageDims = new Dimensions(imageDims.width, imageDims.height); - this._score = score; - this._classScore = classScore; - this._className = className; - this._box = new Box(relativeBox).rescale(this._imageDims); - } - Object.defineProperty(ObjectDetection.prototype, "score", { - get: function () { return this._score; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ObjectDetection.prototype, "classScore", { - get: function () { return this._classScore; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ObjectDetection.prototype, "className", { - get: function () { return this._className; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ObjectDetection.prototype, "box", { - get: function () { return this._box; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ObjectDetection.prototype, "imageDims", { - get: function () { return this._imageDims; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ObjectDetection.prototype, "imageWidth", { - get: function () { return this.imageDims.width; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ObjectDetection.prototype, "imageHeight", { - get: function () { return this.imageDims.height; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ObjectDetection.prototype, "relativeBox", { - get: function () { return new Box(this._box).rescale(this.imageDims.reverse()); }, - enumerable: true, - configurable: true - }); - ObjectDetection.prototype.forSize = function (width, height) { - return new ObjectDetection(this.score, this.classScore, this.className, this.relativeBox, { width: width, height: height }); - }; - return ObjectDetection; - }()); - - function createBrowserEnv() { - var fetch = window['fetch'] || function () { - throw new Error('fetch - missing fetch implementation for browser environment'); - }; - var readFile = function () { - throw new Error('readFile - filesystem not available for browser environment'); - }; - return { - Canvas: HTMLCanvasElement, - Image: HTMLImageElement, - ImageData: ImageData, - Video: HTMLVideoElement, - createCanvasElement: function () { return document.createElement('canvas'); }, - createImageElement: function () { return document.createElement('img'); }, - fetch: fetch, - readFile: readFile - }; - } - - function createFileSystem(fs) { - var requireFsError = ''; - if (!fs) { - try { - fs = require('fs'); - } - catch (err) { - requireFsError = err.toString(); - } - } - var readFile = fs - ? function (filePath) { - return new Promise(function (res, rej) { - fs.readFile(filePath, function (err, buffer) { - return err ? rej(err) : res(buffer); - }); - }); - } - : function () { - throw new Error("readFile - failed to require fs in nodejs environment with error: " + requireFsError); - }; - return { - readFile: readFile - }; - } - - function createNodejsEnv() { - var Canvas = global['Canvas'] || global['HTMLCanvasElement']; - var Image = global['Image'] || global['HTMLImageElement']; - var createCanvasElement = function () { - if (Canvas) { - return new Canvas(); - } - throw new Error('createCanvasElement - missing Canvas implementation for nodejs environment'); - }; - var createImageElement = function () { - if (Image) { - return new Image(); - } - throw new Error('createImageElement - missing Image implementation for nodejs environment'); - }; - var fetch = global['fetch'] || function () { - throw new Error('fetch - missing fetch implementation for nodejs environment'); - }; - var fileSystem = createFileSystem(); - return __assign$1({ Canvas: Canvas || /** @class */ (function () { - function Canvas() { - } - return Canvas; - }()), Image: Image || /** @class */ (function () { - function Image() { - } - return Image; - }()), ImageData: global['ImageData'] || /** @class */ (function () { - function class_1() { - } - return class_1; - }()), Video: global['HTMLVideoElement'] || /** @class */ (function () { - function class_2() { - } - return class_2; - }()), createCanvasElement: createCanvasElement, - createImageElement: createImageElement, - fetch: fetch }, fileSystem); - } - - function isBrowser() { - return typeof window === 'object' - && typeof document !== 'undefined' - && typeof HTMLImageElement !== 'undefined' - && typeof HTMLCanvasElement !== 'undefined' - && typeof HTMLVideoElement !== 'undefined' - && typeof ImageData !== 'undefined'; - } - - function isNodejs() { - return typeof global === 'object' - && typeof require === 'function' - && typeof module !== 'undefined' - // issues with gatsby.js: module.exports is undefined - // && !!module.exports - && typeof process !== 'undefined' && !!process.version; - } - - var environment$1; - function getEnv() { - if (!environment$1) { - throw new Error('getEnv - environment is not defined, check isNodejs() and isBrowser()'); - } - return environment$1; - } - function setEnv(env) { - environment$1 = env; - } - function initialize() { - // check for isBrowser() first to prevent electron renderer process - // to be initialized with wrong environment due to isNodejs() returning true - if (isBrowser()) { - setEnv(createBrowserEnv()); - } - if (isNodejs()) { - setEnv(createNodejsEnv()); - } - } - function monkeyPatch(env) { - if (!environment$1) { - initialize(); - } - if (!environment$1) { - throw new Error('monkeyPatch - environment is not defined, check isNodejs() and isBrowser()'); - } - var _a = env.Canvas, Canvas = _a === void 0 ? environment$1.Canvas : _a, _b = env.Image, Image = _b === void 0 ? environment$1.Image : _b; - environment$1.Canvas = Canvas; - environment$1.Image = Image; - environment$1.createCanvasElement = env.createCanvasElement || (function () { return new Canvas(); }); - environment$1.createImageElement = env.createImageElement || (function () { return new Image(); }); - environment$1.ImageData = env.ImageData || environment$1.ImageData; - environment$1.Video = env.Video || environment$1.Video; - environment$1.fetch = env.fetch || environment$1.fetch; - environment$1.readFile = env.readFile || environment$1.readFile; - } - var env = { - getEnv: getEnv, - setEnv: setEnv, - initialize: initialize, - createBrowserEnv: createBrowserEnv, - createFileSystem: createFileSystem, - createNodejsEnv: createNodejsEnv, - monkeyPatch: monkeyPatch, - isBrowser: isBrowser, - isNodejs: isNodejs - }; - initialize(); - - function isMediaLoaded(media) { - var _a = env.getEnv(), Image = _a.Image, Video = _a.Video; - return (media instanceof Image && media.complete) - || (media instanceof Video && media.readyState >= 3); - } - - function awaitMediaLoaded(media) { - return new Promise(function (resolve, reject) { - if (media instanceof env.getEnv().Canvas || isMediaLoaded(media)) { - return resolve(); - } - function onLoad(e) { - if (!e.currentTarget) - return; - e.currentTarget.removeEventListener('load', onLoad); - e.currentTarget.removeEventListener('error', onError); - resolve(e); - } - function onError(e) { - if (!e.currentTarget) - return; - e.currentTarget.removeEventListener('load', onLoad); - e.currentTarget.removeEventListener('error', onError); - reject(e); - } - media.addEventListener('load', onLoad); - media.addEventListener('error', onError); - }); - } - - function bufferToImage(buf) { - return new Promise(function (resolve, reject) { - if (!(buf instanceof Blob)) { - return reject('bufferToImage - expected buf to be of type: Blob'); - } - var reader = new FileReader(); - reader.onload = function () { - if (typeof reader.result !== 'string') { - return reject('bufferToImage - expected reader.result to be a string, in onload'); - } - var img = env.getEnv().createImageElement(); - img.onload = function () { return resolve(img); }; - img.onerror = reject; - img.src = reader.result; - }; - reader.onerror = reject; - reader.readAsDataURL(buf); - }); - } - - function getContext2dOrThrow(canvas) { - var ctx = canvas.getContext('2d'); - if (!ctx) { - throw new Error('canvas 2d context is null'); - } - return ctx; - } - - function getMediaDimensions(input) { - var _a = env.getEnv(), Image = _a.Image, Video = _a.Video; - if (input instanceof Image) { - return new Dimensions(input.naturalWidth, input.naturalHeight); - } - if (input instanceof Video) { - return new Dimensions(input.videoWidth, input.videoHeight); - } - return new Dimensions(input.width, input.height); - } - - function createCanvas(_a) { - var width = _a.width, height = _a.height; - var createCanvasElement = env.getEnv().createCanvasElement; - var canvas = createCanvasElement(); - canvas.width = width; - canvas.height = height; - return canvas; - } - function createCanvasFromMedia(media, dims) { - var ImageData = env.getEnv().ImageData; - if (!(media instanceof ImageData) && !isMediaLoaded(media)) { - throw new Error('createCanvasFromMedia - media has not finished loading yet'); - } - var _a = dims || getMediaDimensions(media), width = _a.width, height = _a.height; - var canvas = createCanvas({ width: width, height: height }); - if (media instanceof ImageData) { - getContext2dOrThrow(canvas).putImageData(media, 0, 0); - } - else { - getContext2dOrThrow(canvas).drawImage(media, 0, 0, width, height); - } - return canvas; - } - - function getDefaultDrawOptions(options) { - if (options === void 0) { options = {}; } - return Object.assign({}, { - boxColor: 'blue', - textColor: 'red', - lineWidth: 2, - fontSize: 20, - fontStyle: 'Georgia', - withScore: true, - withClassName: true - }, options); - } - - function drawBox(ctx, x, y, w, h, options) { - var drawOptions = Object.assign(getDefaultDrawOptions(), (options || {})); - ctx.strokeStyle = drawOptions.boxColor; - ctx.lineWidth = drawOptions.lineWidth; - ctx.strokeRect(x, y, w, h); - } - - var BoxWithText = /** @class */ (function (_super) { - __extends$1(BoxWithText, _super); - function BoxWithText(box, text) { - var _this = _super.call(this, box) || this; - _this._text = text; - return _this; - } - Object.defineProperty(BoxWithText.prototype, "text", { - get: function () { return this._text; }, - enumerable: true, - configurable: true - }); - return BoxWithText; - }(Box)); - - var LabeledBox = /** @class */ (function (_super) { - __extends$1(LabeledBox, _super); - function LabeledBox(box, label) { - var _this = _super.call(this, box) || this; - _this._label = label; - return _this; - } - LabeledBox.assertIsValidLabeledBox = function (box, callee) { - Box.assertIsValidBox(box, callee); - if (!isValidNumber(box.label)) { - throw new Error(callee + " - expected property label (" + box.label + ") to be a number"); - } - }; - Object.defineProperty(LabeledBox.prototype, "label", { - get: function () { return this._label; }, - enumerable: true, - configurable: true - }); - return LabeledBox; - }(Box)); - - var PredictedBox = /** @class */ (function (_super) { - __extends$1(PredictedBox, _super); - function PredictedBox(box, label, score, classScore) { - var _this = _super.call(this, box, label) || this; - _this._score = score; - _this._classScore = classScore; - return _this; - } - PredictedBox.assertIsValidPredictedBox = function (box, callee) { - LabeledBox.assertIsValidLabeledBox(box, callee); - if (!isValidProbablitiy(box.score) - || !isValidProbablitiy(box.classScore)) { - throw new Error(callee + " - expected properties score (" + box.score + ") and (" + box.classScore + ") to be a number between [0, 1]"); - } - }; - Object.defineProperty(PredictedBox.prototype, "score", { - get: function () { return this._score; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(PredictedBox.prototype, "classScore", { - get: function () { return this._classScore; }, - enumerable: true, - configurable: true - }); - return PredictedBox; - }(LabeledBox)); - - function drawText(ctx, x, y, text, options) { - if (options === void 0) { options = {}; } - var drawOptions = Object.assign(getDefaultDrawOptions(), options); - var padText = 2 + drawOptions.lineWidth; - ctx.fillStyle = drawOptions.textColor; - ctx.font = drawOptions.fontSize + "px " + drawOptions.fontStyle; - ctx.fillText(text, x + padText, y + padText + (drawOptions.fontSize * 0.6)); - } - - function resolveInput(arg) { - if (!env.isNodejs() && typeof arg === 'string') { - return document.getElementById(arg); - } - return arg; - } - - function drawDetection(canvasArg, detection, options) { - var Canvas = env.getEnv().Canvas; - var canvas = resolveInput(canvasArg); - if (!(canvas instanceof Canvas)) { - throw new Error('drawDetection - expected canvas to be of type: HTMLCanvasElement'); - } - var detectionArray = Array.isArray(detection) - ? detection - : [detection]; - detectionArray.forEach(function (det) { - var _a = det instanceof ObjectDetection ? det.box : det, x = _a.x, y = _a.y, width = _a.width, height = _a.height; - var drawOptions = getDefaultDrawOptions(options); - var ctx = getContext2dOrThrow(canvas); - drawBox(ctx, x, y, width, height, drawOptions); - var withScore = drawOptions.withScore; - var text = det instanceof BoxWithText - ? det.text - : ((withScore && det instanceof PredictedBox) - ? "" + round$1(det.score) - : (det instanceof ObjectDetection - ? "" + det.className + (withScore ? " (" + round$1(det.score) + ")" : '') - : '')); - if (text) { - drawText(ctx, x, y + height, text, drawOptions); - } - }); - } - - function fetchOrThrow(url, init) { - return __awaiter$1(this, void 0, void 0, function () { - var fetch, res; - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: - fetch = env.getEnv().fetch; - return [4 /*yield*/, fetch(url, init)]; - case 1: - res = _a.sent(); - if (!(res.status < 400)) { - throw new Error("failed to fetch: (" + res.status + ") " + res.statusText + ", from url: " + res.url); - } - return [2 /*return*/, res]; - } - }); - }); - } - - function fetchImage(uri) { - return __awaiter$1(this, void 0, void 0, function () { - var res, blob; - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, fetchOrThrow(uri)]; - case 1: - res = _a.sent(); - return [4 /*yield*/, (res).blob()]; - case 2: - blob = _a.sent(); - if (!blob.type.startsWith('image/')) { - throw new Error("fetchImage - expected blob type to be of type image/*, instead have: " + blob.type + ", for url: " + res.url); - } - return [2 /*return*/, bufferToImage(blob)]; - } - }); - }); - } - - function fetchJson(uri) { - return __awaiter$1(this, void 0, void 0, function () { - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, fetchOrThrow(uri)]; - case 1: return [2 /*return*/, (_a.sent()).json()]; - } - }); - }); - } - - function fetchNetWeights(uri) { - return __awaiter$1(this, void 0, void 0, function () { - var _a; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - _a = Float32Array.bind; - return [4 /*yield*/, fetchOrThrow(uri)]; - case 1: return [4 /*yield*/, (_b.sent()).arrayBuffer()]; - case 2: return [2 /*return*/, new (_a.apply(Float32Array, [void 0, _b.sent()]))()]; - } - }); - }); - } - - function imageTensorToCanvas(imgTensor, canvas) { - return __awaiter$1(this, void 0, void 0, function () { - var targetCanvas, _a, height, width, numChannels, imgTensor3D; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - targetCanvas = canvas || env.getEnv().createCanvasElement(); - _a = imgTensor.shape.slice(isTensor4D(imgTensor) ? 1 : 0), height = _a[0], width = _a[1], numChannels = _a[2]; - imgTensor3D = tidy(function () { return imgTensor.as3D(height, width, numChannels).toInt(); }); - return [4 /*yield*/, browser.toPixels(imgTensor3D, targetCanvas)]; - case 1: - _b.sent(); - imgTensor3D.dispose(); - return [2 /*return*/, targetCanvas]; - } - }); - }); - } - - function imageToSquare(input, inputSize, centerImage) { - if (centerImage === void 0) { centerImage = false; } - var _a = env.getEnv(), Image = _a.Image, Canvas = _a.Canvas; - if (!(input instanceof Image || input instanceof Canvas)) { - throw new Error('imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement'); - } - var dims = getMediaDimensions(input); - var scale = inputSize / Math.max(dims.height, dims.width); - var width = scale * dims.width; - var height = scale * dims.height; - var targetCanvas = createCanvas({ width: inputSize, height: inputSize }); - var inputCanvas = input instanceof Canvas ? input : createCanvasFromMedia(input); - var offset = Math.abs(width - height) / 2; - var dx = centerImage && width < height ? offset : 0; - var dy = centerImage && height < width ? offset : 0; - getContext2dOrThrow(targetCanvas).drawImage(inputCanvas, dx, dy, width, height); - return targetCanvas; - } - - function isMediaElement(input) { - var _a = env.getEnv(), Image = _a.Image, Canvas = _a.Canvas, Video = _a.Video; - return input instanceof Image - || input instanceof Canvas - || input instanceof Video; - } - - function loadWeightMap(uri, defaultModelName) { - return __awaiter$1(this, void 0, void 0, function () { - var _a, manifestUri, modelBaseUri, manifest; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - _a = getModelUris(uri, defaultModelName), manifestUri = _a.manifestUri, modelBaseUri = _a.modelBaseUri; - return [4 /*yield*/, fetchJson(manifestUri)]; - case 1: - manifest = _b.sent(); - return [2 /*return*/, io.loadWeights(manifest, modelBaseUri)]; - } - }); - }); - } - - /** - * Pads the smaller dimension of an image tensor with zeros, such that width === height. - * - * @param imgTensor The image tensor. - * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on - * both sides of the minor dimension oof the image. - * @returns The padded tensor with width === height. - */ - function padToSquare(imgTensor, isCenterImage) { - if (isCenterImage === void 0) { isCenterImage = false; } - return tidy(function () { - var _a = imgTensor.shape.slice(1), height = _a[0], width = _a[1]; - if (height === width) { - return imgTensor; - } - var dimDiff = Math.abs(height - width); - var paddingAmount = Math.round(dimDiff * (isCenterImage ? 0.5 : 1)); - var paddingAxis = height > width ? 2 : 1; - var createPaddingTensor = function (paddingAmount) { - var paddingTensorShape = imgTensor.shape.slice(); - paddingTensorShape[paddingAxis] = paddingAmount; - return fill(paddingTensorShape, 0); - }; - var paddingTensorAppend = createPaddingTensor(paddingAmount); - var remainingPaddingAmount = dimDiff - paddingTensorAppend.shape[paddingAxis]; - var paddingTensorPrepend = isCenterImage && remainingPaddingAmount - ? createPaddingTensor(remainingPaddingAmount) - : null; - var tensorsToStack = [ - paddingTensorPrepend, - imgTensor, - paddingTensorAppend - ] - .filter(function (t) { return !!t; }) - .map(function (t) { return t.toFloat(); }); - return concat(tensorsToStack, paddingAxis); - }); - } - - var NetInput = /** @class */ (function () { - function NetInput(inputs, treatAsBatchInput) { - if (treatAsBatchInput === void 0) { treatAsBatchInput = false; } - var _this = this; - this._imageTensors = []; - this._canvases = []; - this._treatAsBatchInput = false; - this._inputDimensions = []; - if (!Array.isArray(inputs)) { - throw new Error("NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have " + inputs); - } - this._treatAsBatchInput = treatAsBatchInput; - this._batchSize = inputs.length; - inputs.forEach(function (input, idx) { - if (isTensor3D(input)) { - _this._imageTensors[idx] = input; - _this._inputDimensions[idx] = input.shape; - return; - } - if (isTensor4D(input)) { - var batchSize = input.shape[0]; - if (batchSize !== 1) { - throw new Error("NetInput - tf.Tensor4D with batchSize " + batchSize + " passed, but not supported in input array"); - } - _this._imageTensors[idx] = input; - _this._inputDimensions[idx] = input.shape.slice(1); - return; - } - var canvas = input instanceof env.getEnv().Canvas ? input : createCanvasFromMedia(input); - _this._canvases[idx] = canvas; - _this._inputDimensions[idx] = [canvas.height, canvas.width, 3]; - }); - } - Object.defineProperty(NetInput.prototype, "imageTensors", { - get: function () { - return this._imageTensors; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NetInput.prototype, "canvases", { - get: function () { - return this._canvases; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NetInput.prototype, "isBatchInput", { - get: function () { - return this.batchSize > 1 || this._treatAsBatchInput; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NetInput.prototype, "batchSize", { - get: function () { - return this._batchSize; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NetInput.prototype, "inputDimensions", { - get: function () { - return this._inputDimensions; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NetInput.prototype, "inputSize", { - get: function () { - return this._inputSize; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NetInput.prototype, "reshapedInputDimensions", { - get: function () { - var _this = this; - return range$1(this.batchSize, 0, 1).map(function (_, batchIdx) { return _this.getReshapedInputDimensions(batchIdx); }); - }, - enumerable: true, - configurable: true - }); - NetInput.prototype.getInput = function (batchIdx) { - return this.canvases[batchIdx] || this.imageTensors[batchIdx]; - }; - NetInput.prototype.getInputDimensions = function (batchIdx) { - return this._inputDimensions[batchIdx]; - }; - NetInput.prototype.getInputHeight = function (batchIdx) { - return this._inputDimensions[batchIdx][0]; - }; - NetInput.prototype.getInputWidth = function (batchIdx) { - return this._inputDimensions[batchIdx][1]; - }; - NetInput.prototype.getReshapedInputDimensions = function (batchIdx) { - if (typeof this.inputSize !== 'number') { - throw new Error('getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet'); - } - var width = this.getInputWidth(batchIdx); - var height = this.getInputHeight(batchIdx); - return computeReshapedDimensions({ width: width, height: height }, this.inputSize); - }; - /** - * Create a batch tensor from all input canvases and tensors - * with size [batchSize, inputSize, inputSize, 3]. - * - * @param inputSize Height and width of the tensor. - * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on - * both sides of the minor dimension oof the image. - * @returns The batch tensor. - */ - NetInput.prototype.toBatchTensor = function (inputSize, isCenterInputs) { - var _this = this; - if (isCenterInputs === void 0) { isCenterInputs = true; } - this._inputSize = inputSize; - return tidy(function () { - var inputTensors = range$1(_this.batchSize, 0, 1).map(function (batchIdx) { - var input = _this.getInput(batchIdx); - if (input instanceof Tensor) { - var imgTensor = isTensor4D(input) ? input : input.expandDims(); - imgTensor = padToSquare(imgTensor, isCenterInputs); - if (imgTensor.shape[1] !== inputSize || imgTensor.shape[2] !== inputSize) { - imgTensor = image_ops.resizeBilinear(imgTensor, [inputSize, inputSize]); - } - return imgTensor.as3D(inputSize, inputSize, 3); - } - if (input instanceof env.getEnv().Canvas) { - return browser.fromPixels(imageToSquare(input, inputSize, isCenterInputs)); - } - throw new Error("toBatchTensor - at batchIdx " + batchIdx + ", expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have " + input); - }); - var batchTensor = stack(inputTensors.map(function (t) { return t.toFloat(); })).as4D(_this.batchSize, inputSize, inputSize, 3); - return batchTensor; - }); - }; - return NetInput; - }()); - - /** - * Validates the input to make sure, they are valid net inputs and awaits all media elements - * to be finished loading. - * - * @param input The input, which can be a media element or an array of different media elements. - * @returns A NetInput instance, which can be passed into one of the neural networks. - */ - function toNetInput(inputs) { - return __awaiter$1(this, void 0, void 0, function () { - var inputArgArray, getIdxHint, inputArray; - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: - if (inputs instanceof NetInput) { - return [2 /*return*/, inputs]; - } - inputArgArray = Array.isArray(inputs) - ? inputs - : [inputs]; - if (!inputArgArray.length) { - throw new Error('toNetInput - empty array passed as input'); - } - getIdxHint = function (idx) { return Array.isArray(inputs) ? " at input index " + idx + ":" : ''; }; - inputArray = inputArgArray.map(resolveInput); - inputArray.forEach(function (input, i) { - if (!isMediaElement(input) && !isTensor3D(input) && !isTensor4D(input)) { - if (typeof inputArgArray[i] === 'string') { - throw new Error("toNetInput -" + getIdxHint(i) + " string passed, but could not resolve HTMLElement for element id " + inputArgArray[i]); - } - throw new Error("toNetInput -" + getIdxHint(i) + " expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id"); - } - if (isTensor4D(input)) { - // if tf.Tensor4D is passed in the input array, the batch size has to be 1 - var batchSize = input.shape[0]; - if (batchSize !== 1) { - throw new Error("toNetInput -" + getIdxHint(i) + " tf.Tensor4D with batchSize " + batchSize + " passed, but not supported in input array"); - } - } - }); - // wait for all media elements being loaded - return [4 /*yield*/, Promise.all(inputArray.map(function (input) { return isMediaElement(input) && awaitMediaLoaded(input); }))]; - case 1: - // wait for all media elements being loaded - _a.sent(); - return [2 /*return*/, new NetInput(inputArray, Array.isArray(inputs))]; - } - }); - }); - } - - var NeuralNetwork = /** @class */ (function () { - function NeuralNetwork(_name) { - this._name = _name; - this._params = undefined; - this._paramMappings = []; - } - Object.defineProperty(NeuralNetwork.prototype, "params", { - get: function () { return this._params; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NeuralNetwork.prototype, "paramMappings", { - get: function () { return this._paramMappings; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NeuralNetwork.prototype, "isLoaded", { - get: function () { return !!this.params; }, - enumerable: true, - configurable: true - }); - NeuralNetwork.prototype.getParamFromPath = function (paramPath) { - var _a = this.traversePropertyPath(paramPath), obj = _a.obj, objProp = _a.objProp; - return obj[objProp]; - }; - NeuralNetwork.prototype.reassignParamFromPath = function (paramPath, tensor) { - var _a = this.traversePropertyPath(paramPath), obj = _a.obj, objProp = _a.objProp; - obj[objProp].dispose(); - obj[objProp] = tensor; - }; - NeuralNetwork.prototype.getParamList = function () { - var _this = this; - return this._paramMappings.map(function (_a) { - var paramPath = _a.paramPath; - return ({ - path: paramPath, - tensor: _this.getParamFromPath(paramPath) - }); - }); - }; - NeuralNetwork.prototype.getTrainableParams = function () { - return this.getParamList().filter(function (param) { return param.tensor instanceof Variable; }); - }; - NeuralNetwork.prototype.getFrozenParams = function () { - return this.getParamList().filter(function (param) { return !(param.tensor instanceof Variable); }); - }; - NeuralNetwork.prototype.variable = function () { - var _this = this; - this.getFrozenParams().forEach(function (_a) { - var path = _a.path, tensor = _a.tensor; - _this.reassignParamFromPath(path, tensor.variable()); - }); - }; - NeuralNetwork.prototype.freeze = function () { - var _this = this; - this.getTrainableParams().forEach(function (_a) { - var path = _a.path, variable = _a.tensor; - var tensor$1 = tensor(variable.dataSync()); - variable.dispose(); - _this.reassignParamFromPath(path, tensor$1); - }); - }; - NeuralNetwork.prototype.dispose = function (throwOnRedispose) { - if (throwOnRedispose === void 0) { throwOnRedispose = true; } - this.getParamList().forEach(function (param) { - if (throwOnRedispose && param.tensor.isDisposed) { - throw new Error("param tensor has already been disposed for path " + param.path); - } - param.tensor.dispose(); - }); - this._params = undefined; - }; - NeuralNetwork.prototype.serializeParams = function () { - return new Float32Array(this.getParamList() - .map(function (_a) { - var tensor = _a.tensor; - return Array.from(tensor.dataSync()); - }) - .reduce(function (flat, arr) { return flat.concat(arr); })); - }; - NeuralNetwork.prototype.load = function (weightsOrUrl) { - return __awaiter$1(this, void 0, void 0, function () { - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: - if (weightsOrUrl instanceof Float32Array) { - this.extractWeights(weightsOrUrl); - return [2 /*return*/]; - } - return [4 /*yield*/, this.loadFromUri(weightsOrUrl)]; - case 1: - _a.sent(); - return [2 /*return*/]; - } - }); - }); - }; - NeuralNetwork.prototype.loadFromUri = function (uri) { - return __awaiter$1(this, void 0, void 0, function () { - var weightMap; - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: - if (uri && typeof uri !== 'string') { - throw new Error(this._name + ".loadFromUri - expected model uri"); - } - return [4 /*yield*/, loadWeightMap(uri, this.getDefaultModelName())]; - case 1: - weightMap = _a.sent(); - this.loadFromWeightMap(weightMap); - return [2 /*return*/]; - } - }); - }); - }; - NeuralNetwork.prototype.loadFromDisk = function (filePath) { - return __awaiter$1(this, void 0, void 0, function () { - var readFile, _a, manifestUri, modelBaseUri, fetchWeightsFromDisk, loadWeights, manifest, _b, _c, weightMap; - return __generator$1(this, function (_d) { - switch (_d.label) { - case 0: - if (filePath && typeof filePath !== 'string') { - throw new Error(this._name + ".loadFromDisk - expected model file path"); - } - readFile = env.getEnv().readFile; - _a = getModelUris(filePath, this.getDefaultModelName()), manifestUri = _a.manifestUri, modelBaseUri = _a.modelBaseUri; - fetchWeightsFromDisk = function (filePaths) { return Promise.all(filePaths.map(function (filePath) { return readFile(filePath).then(function (buf) { return buf.buffer; }); })); }; - loadWeights = io.weightsLoaderFactory(fetchWeightsFromDisk); - _c = (_b = JSON).parse; - return [4 /*yield*/, readFile(manifestUri)]; - case 1: - manifest = _c.apply(_b, [(_d.sent()).toString()]); - return [4 /*yield*/, loadWeights(manifest, modelBaseUri)]; - case 2: - weightMap = _d.sent(); - this.loadFromWeightMap(weightMap); - return [2 /*return*/]; - } - }); - }); - }; - NeuralNetwork.prototype.loadFromWeightMap = function (weightMap) { - var _a = this.extractParamsFromWeigthMap(weightMap), paramMappings = _a.paramMappings, params = _a.params; - this._paramMappings = paramMappings; - this._params = params; - }; - NeuralNetwork.prototype.extractWeights = function (weights) { - var _a = this.extractParams(weights), paramMappings = _a.paramMappings, params = _a.params; - this._paramMappings = paramMappings; - this._params = params; - }; - NeuralNetwork.prototype.traversePropertyPath = function (paramPath) { - if (!this.params) { - throw new Error("traversePropertyPath - model has no loaded params"); - } - var result = paramPath.split('/').reduce(function (res, objProp) { - if (!res.nextObj.hasOwnProperty(objProp)) { - throw new Error("traversePropertyPath - object does not have property " + objProp + ", for path " + paramPath); - } - return { obj: res.nextObj, objProp: objProp, nextObj: res.nextObj[objProp] }; - }, { nextObj: this.params }); - var obj = result.obj, objProp = result.objProp; - if (!obj || !objProp || !(obj[objProp] instanceof Tensor)) { - throw new Error("traversePropertyPath - parameter is not a tensor, for path " + paramPath); - } - return { obj: obj, objProp: objProp }; - }; - return NeuralNetwork; - }()); - - function iou(box1, box2, isIOU) { - if (isIOU === void 0) { isIOU = true; } - var width = Math.max(0.0, Math.min(box1.right, box2.right) - Math.max(box1.left, box2.left)); - var height = Math.max(0.0, Math.min(box1.bottom, box2.bottom) - Math.max(box1.top, box2.top)); - var interSection = width * height; - return isIOU - ? interSection / (box1.area + box2.area - interSection) - : interSection / Math.min(box1.area, box2.area); - } - - function nonMaxSuppression$1(boxes, scores, iouThreshold, isIOU) { - if (isIOU === void 0) { isIOU = true; } - var indicesSortedByScore = scores - .map(function (score, boxIndex) { return ({ score: score, boxIndex: boxIndex }); }) - .sort(function (c1, c2) { return c1.score - c2.score; }) - .map(function (c) { return c.boxIndex; }); - var pick = []; - var _loop_1 = function () { - var curr = indicesSortedByScore.pop(); - pick.push(curr); - var indices = indicesSortedByScore; - var outputs = []; - for (var i = 0; i < indices.length; i++) { - var idx = indices[i]; - var currBox = boxes[curr]; - var idxBox = boxes[idx]; - outputs.push(iou(currBox, idxBox, isIOU)); - } - indicesSortedByScore = indicesSortedByScore.filter(function (_, j) { return outputs[j] <= iouThreshold; }); - }; - while (indicesSortedByScore.length > 0) { - _loop_1(); - } - return pick; - } - - function normalize(x, meanRgb) { - return tidy(function () { - var r = meanRgb[0], g = meanRgb[1], b = meanRgb[2]; - var avg_r = fill(x.shape.slice(0, 3).concat([1]), r); - var avg_g = fill(x.shape.slice(0, 3).concat([1]), g); - var avg_b = fill(x.shape.slice(0, 3).concat([1]), b); - var avg_rgb = concat([avg_r, avg_g, avg_b], 3); - return sub(x, avg_rgb); - }); - } - - function shuffleArray(inputArray) { - var array = inputArray.slice(); - for (var i = array.length - 1; i > 0; i--) { - var j = Math.floor(Math.random() * (i + 1)); - var x = array[i]; - array[i] = array[j]; - array[j] = x; - } - return array; - } - - function sigmoid$1(x) { - return 1 / (1 + Math.exp(-x)); - } - function inverseSigmoid(x) { - return Math.log(x / (1 - x)); - } - - var isNumber$1 = function (arg) { return typeof arg === 'number'; }; - function validateConfig(config) { - if (!config) { - throw new Error("invalid config: " + config); - } - if (typeof config.withSeparableConvs !== 'boolean') { - throw new Error("config.withSeparableConvs has to be a boolean, have: " + config.withSeparableConvs); - } - if (!isNumber$1(config.iouThreshold) || config.iouThreshold < 0 || config.iouThreshold > 1.0) { - throw new Error("config.iouThreshold has to be a number between [0, 1], have: " + config.iouThreshold); - } - if (!Array.isArray(config.classes) - || !config.classes.length - || !config.classes.every(function (c) { return typeof c === 'string'; })) { - throw new Error("config.classes has to be an array class names: string[], have: " + JSON.stringify(config.classes)); - } - if (!Array.isArray(config.anchors) - || !config.anchors.length - || !config.anchors.map(function (a) { return a || {}; }).every(function (a) { return isNumber$1(a.x) && isNumber$1(a.y); })) { - throw new Error("config.anchors has to be an array of { x: number, y: number }, have: " + JSON.stringify(config.anchors)); - } - if (config.meanRgb && (!Array.isArray(config.meanRgb) - || config.meanRgb.length !== 3 - || !config.meanRgb.every(isNumber$1))) { - throw new Error("config.meanRgb has to be an array of shape [number, number, number], have: " + JSON.stringify(config.meanRgb)); - } - } - - function leaky(x) { - return tidy(function () { - var min = mul(x, scalar(0.10000000149011612)); - return add(relu(sub(x, min)), min); - //return tf.maximum(x, min) - }); - } - - function convWithBatchNorm(x, params) { - return tidy(function () { - var out = pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]); - out = conv2d(out, params.conv.filters, [1, 1], 'valid'); - out = sub(out, params.bn.sub); - out = mul(out, params.bn.truediv); - out = add(out, params.conv.bias); - return leaky(out); - }); - } - - function depthwiseSeparableConv(x, params) { - return tidy(function () { - var out = pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]); - out = separableConv2d(out, params.depthwise_filter, params.pointwise_filter, [1, 1], 'valid'); - out = add(out, params.bias); - return leaky(out); - }); - } - - function extractorsFactory(extractWeights, paramMappings) { - var extractConvParams = extractConvParamsFactory(extractWeights, paramMappings); - function extractBatchNormParams(size, mappedPrefix) { - var sub = tensor1d(extractWeights(size)); - var truediv = tensor1d(extractWeights(size)); - paramMappings.push({ paramPath: mappedPrefix + "/sub" }, { paramPath: mappedPrefix + "/truediv" }); - return { sub: sub, truediv: truediv }; - } - function extractConvWithBatchNormParams(channelsIn, channelsOut, mappedPrefix) { - var conv = extractConvParams(channelsIn, channelsOut, 3, mappedPrefix + "/conv"); - var bn = extractBatchNormParams(channelsOut, mappedPrefix + "/bn"); - return { conv: conv, bn: bn }; - } - var extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings); - return { - extractConvParams: extractConvParams, - extractConvWithBatchNormParams: extractConvWithBatchNormParams, - extractSeparableConvParams: extractSeparableConvParams - }; - } - function extractParams(weights, config, boxEncodingSize, filterSizes) { - var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var paramMappings = []; - var _b = extractorsFactory(extractWeights, paramMappings), extractConvParams = _b.extractConvParams, extractConvWithBatchNormParams = _b.extractConvWithBatchNormParams, extractSeparableConvParams = _b.extractSeparableConvParams; - var params; - if (config.withSeparableConvs) { - var s0 = filterSizes[0], s1 = filterSizes[1], s2 = filterSizes[2], s3 = filterSizes[3], s4 = filterSizes[4], s5 = filterSizes[5], s6 = filterSizes[6], s7 = filterSizes[7], s8 = filterSizes[8]; - var conv0 = config.isFirstLayerConv2d - ? extractConvParams(s0, s1, 3, 'conv0') - : extractSeparableConvParams(s0, s1, 'conv0'); - var conv1 = extractSeparableConvParams(s1, s2, 'conv1'); - var conv2 = extractSeparableConvParams(s2, s3, 'conv2'); - var conv3 = extractSeparableConvParams(s3, s4, 'conv3'); - var conv4 = extractSeparableConvParams(s4, s5, 'conv4'); - var conv5 = extractSeparableConvParams(s5, s6, 'conv5'); - var conv6 = s7 ? extractSeparableConvParams(s6, s7, 'conv6') : undefined; - var conv7 = s8 ? extractSeparableConvParams(s7, s8, 'conv7') : undefined; - var conv8 = extractConvParams(s8 || s7 || s6, 5 * boxEncodingSize, 1, 'conv8'); - params = { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3, conv4: conv4, conv5: conv5, conv6: conv6, conv7: conv7, conv8: conv8 }; - } - else { - var s0 = filterSizes[0], s1 = filterSizes[1], s2 = filterSizes[2], s3 = filterSizes[3], s4 = filterSizes[4], s5 = filterSizes[5], s6 = filterSizes[6], s7 = filterSizes[7], s8 = filterSizes[8]; - var conv0 = extractConvWithBatchNormParams(s0, s1, 'conv0'); - var conv1 = extractConvWithBatchNormParams(s1, s2, 'conv1'); - var conv2 = extractConvWithBatchNormParams(s2, s3, 'conv2'); - var conv3 = extractConvWithBatchNormParams(s3, s4, 'conv3'); - var conv4 = extractConvWithBatchNormParams(s4, s5, 'conv4'); - var conv5 = extractConvWithBatchNormParams(s5, s6, 'conv5'); - var conv6 = extractConvWithBatchNormParams(s6, s7, 'conv6'); - var conv7 = extractConvWithBatchNormParams(s7, s8, 'conv7'); - var conv8 = extractConvParams(s8, 5 * boxEncodingSize, 1, 'conv8'); - params = { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3, conv4: conv4, conv5: conv5, conv6: conv6, conv7: conv7, conv8: conv8 }; - } - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { params: params, paramMappings: paramMappings }; - } - - function extractorsFactory$1(weightMap, paramMappings) { - var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); - function extractBatchNormParams(prefix) { - var sub = extractWeightEntry(prefix + "/sub", 1); - var truediv = extractWeightEntry(prefix + "/truediv", 1); - return { sub: sub, truediv: truediv }; - } - function extractConvParams(prefix) { - var filters = extractWeightEntry(prefix + "/filters", 4); - var bias = extractWeightEntry(prefix + "/bias", 1); - return { filters: filters, bias: bias }; - } - function extractConvWithBatchNormParams(prefix) { - var conv = extractConvParams(prefix + "/conv"); - var bn = extractBatchNormParams(prefix + "/bn"); - return { conv: conv, bn: bn }; - } - var extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry); - return { - extractConvParams: extractConvParams, - extractConvWithBatchNormParams: extractConvWithBatchNormParams, - extractSeparableConvParams: extractSeparableConvParams - }; - } - function extractParamsFromWeigthMap(weightMap, config) { - var paramMappings = []; - var _a = extractorsFactory$1(weightMap, paramMappings), extractConvParams = _a.extractConvParams, extractConvWithBatchNormParams = _a.extractConvWithBatchNormParams, extractSeparableConvParams = _a.extractSeparableConvParams; - var params; - if (config.withSeparableConvs) { - var numFilters = (config.filterSizes && config.filterSizes.length || 9); - params = { - conv0: config.isFirstLayerConv2d ? extractConvParams('conv0') : extractSeparableConvParams('conv0'), - conv1: extractSeparableConvParams('conv1'), - conv2: extractSeparableConvParams('conv2'), - conv3: extractSeparableConvParams('conv3'), - conv4: extractSeparableConvParams('conv4'), - conv5: extractSeparableConvParams('conv5'), - conv6: numFilters > 7 ? extractSeparableConvParams('conv6') : undefined, - conv7: numFilters > 8 ? extractSeparableConvParams('conv7') : undefined, - conv8: extractConvParams('conv8') - }; - } - else { - params = { - conv0: extractConvWithBatchNormParams('conv0'), - conv1: extractConvWithBatchNormParams('conv1'), - conv2: extractConvWithBatchNormParams('conv2'), - conv3: extractConvWithBatchNormParams('conv3'), - conv4: extractConvWithBatchNormParams('conv4'), - conv5: extractConvWithBatchNormParams('conv5'), - conv6: extractConvWithBatchNormParams('conv6'), - conv7: extractConvWithBatchNormParams('conv7'), - conv8: extractConvParams('conv8') - }; - } - disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: params, paramMappings: paramMappings }; - } - - var TinyYolov2SizeType; - (function (TinyYolov2SizeType) { - TinyYolov2SizeType[TinyYolov2SizeType["XS"] = 224] = "XS"; - TinyYolov2SizeType[TinyYolov2SizeType["SM"] = 320] = "SM"; - TinyYolov2SizeType[TinyYolov2SizeType["MD"] = 416] = "MD"; - TinyYolov2SizeType[TinyYolov2SizeType["LG"] = 608] = "LG"; - })(TinyYolov2SizeType || (TinyYolov2SizeType = {})); - var TinyYolov2Options = /** @class */ (function () { - function TinyYolov2Options(_a) { - var _b = _a === void 0 ? {} : _a, inputSize = _b.inputSize, scoreThreshold = _b.scoreThreshold; - this._name = 'TinyYolov2Options'; - this._inputSize = inputSize || 416; - this._scoreThreshold = scoreThreshold || 0.5; - if (typeof this._inputSize !== 'number' || this._inputSize % 32 !== 0) { - throw new Error(this._name + " - expected inputSize to be a number divisible by 32"); - } - if (typeof this._scoreThreshold !== 'number' || this._scoreThreshold <= 0 || this._scoreThreshold >= 1) { - throw new Error(this._name + " - expected scoreThreshold to be a number between 0 and 1"); - } - } - Object.defineProperty(TinyYolov2Options.prototype, "inputSize", { - get: function () { return this._inputSize; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TinyYolov2Options.prototype, "scoreThreshold", { - get: function () { return this._scoreThreshold; }, - enumerable: true, - configurable: true - }); - return TinyYolov2Options; - }()); - - var TinyYolov2 = /** @class */ (function (_super) { - __extends$1(TinyYolov2, _super); - function TinyYolov2(config) { - var _this = _super.call(this, 'TinyYolov2') || this; - validateConfig(config); - _this._config = config; - return _this; - } - Object.defineProperty(TinyYolov2.prototype, "config", { - get: function () { - return this._config; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TinyYolov2.prototype, "withClassScores", { - get: function () { - return this.config.withClassScores || this.config.classes.length > 1; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TinyYolov2.prototype, "boxEncodingSize", { - get: function () { - return 5 + (this.withClassScores ? this.config.classes.length : 0); - }, - enumerable: true, - configurable: true - }); - TinyYolov2.prototype.runTinyYolov2 = function (x, params) { - var out = convWithBatchNorm(x, params.conv0); - out = maxPool(out, [2, 2], [2, 2], 'same'); - out = convWithBatchNorm(out, params.conv1); - out = maxPool(out, [2, 2], [2, 2], 'same'); - out = convWithBatchNorm(out, params.conv2); - out = maxPool(out, [2, 2], [2, 2], 'same'); - out = convWithBatchNorm(out, params.conv3); - out = maxPool(out, [2, 2], [2, 2], 'same'); - out = convWithBatchNorm(out, params.conv4); - out = maxPool(out, [2, 2], [2, 2], 'same'); - out = convWithBatchNorm(out, params.conv5); - out = maxPool(out, [2, 2], [1, 1], 'same'); - out = convWithBatchNorm(out, params.conv6); - out = convWithBatchNorm(out, params.conv7); - return convLayer(out, params.conv8, 'valid', false); - }; - TinyYolov2.prototype.runMobilenet = function (x, params) { - var out = this.config.isFirstLayerConv2d - ? leaky(convLayer(x, params.conv0, 'valid', false)) - : depthwiseSeparableConv(x, params.conv0); - out = maxPool(out, [2, 2], [2, 2], 'same'); - out = depthwiseSeparableConv(out, params.conv1); - out = maxPool(out, [2, 2], [2, 2], 'same'); - out = depthwiseSeparableConv(out, params.conv2); - out = maxPool(out, [2, 2], [2, 2], 'same'); - out = depthwiseSeparableConv(out, params.conv3); - out = maxPool(out, [2, 2], [2, 2], 'same'); - out = depthwiseSeparableConv(out, params.conv4); - out = maxPool(out, [2, 2], [2, 2], 'same'); - out = depthwiseSeparableConv(out, params.conv5); - out = maxPool(out, [2, 2], [1, 1], 'same'); - out = params.conv6 ? depthwiseSeparableConv(out, params.conv6) : out; - out = params.conv7 ? depthwiseSeparableConv(out, params.conv7) : out; - return convLayer(out, params.conv8, 'valid', false); - }; - TinyYolov2.prototype.forwardInput = function (input, inputSize) { - var _this = this; - var params = this.params; - if (!params) { - throw new Error('TinyYolov2 - load model before inference'); - } - return tidy(function () { - var batchTensor = input.toBatchTensor(inputSize, false).toFloat(); - batchTensor = _this.config.meanRgb - ? normalize(batchTensor, _this.config.meanRgb) - : batchTensor; - batchTensor = batchTensor.div(scalar(256)); - return _this.config.withSeparableConvs - ? _this.runMobilenet(batchTensor, params) - : _this.runTinyYolov2(batchTensor, params); - }); - }; - TinyYolov2.prototype.forward = function (input, inputSize) { - return __awaiter$1(this, void 0, void 0, function () { - var _a; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [4 /*yield*/, _a.apply(this, [_b.sent(), inputSize])]; - case 2: return [2 /*return*/, _b.sent()]; - } - }); - }); - }; - TinyYolov2.prototype.detect = function (input, forwardParams) { - if (forwardParams === void 0) { forwardParams = {}; } - return __awaiter$1(this, void 0, void 0, function () { - var _a, inputSize, scoreThreshold, netInput, out, out0, inputDimensions, results, boxes, scores, classScores, classNames, indices, detections; - var _this = this; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - _a = new TinyYolov2Options(forwardParams), inputSize = _a.inputSize, scoreThreshold = _a.scoreThreshold; - return [4 /*yield*/, toNetInput(input)]; - case 1: - netInput = _b.sent(); - return [4 /*yield*/, this.forwardInput(netInput, inputSize)]; - case 2: - out = _b.sent(); - out0 = tidy(function () { return unstack(out)[0].expandDims(); }); - inputDimensions = { - width: netInput.getInputWidth(0), - height: netInput.getInputHeight(0) - }; - return [4 /*yield*/, this.extractBoxes(out0, netInput.getReshapedInputDimensions(0), scoreThreshold)]; - case 3: - results = _b.sent(); - out.dispose(); - out0.dispose(); - boxes = results.map(function (res) { return res.box; }); - scores = results.map(function (res) { return res.score; }); - classScores = results.map(function (res) { return res.classScore; }); - classNames = results.map(function (res) { return _this.config.classes[res.label]; }); - indices = nonMaxSuppression$1(boxes.map(function (box) { return box.rescale(inputSize); }), scores, this.config.iouThreshold, true); - detections = indices.map(function (idx) { - return new ObjectDetection(scores[idx], classScores[idx], classNames[idx], boxes[idx], inputDimensions); - }); - return [2 /*return*/, detections]; - } - }); - }); - }; - TinyYolov2.prototype.getDefaultModelName = function () { - return ''; - }; - TinyYolov2.prototype.extractParamsFromWeigthMap = function (weightMap) { - return extractParamsFromWeigthMap(weightMap, this.config); - }; - TinyYolov2.prototype.extractParams = function (weights) { - var filterSizes = this.config.filterSizes || TinyYolov2.DEFAULT_FILTER_SIZES; - var numFilters = filterSizes ? filterSizes.length : undefined; - if (numFilters !== 7 && numFilters !== 8 && numFilters !== 9) { - throw new Error("TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found " + numFilters + " filterSizes in config"); - } - return extractParams(weights, this.config, this.boxEncodingSize, filterSizes); - }; - TinyYolov2.prototype.extractBoxes = function (outputTensor, inputBlobDimensions, scoreThreshold) { - return __awaiter$1(this, void 0, void 0, function () { - var width, height, inputSize, correctionFactorX, correctionFactorY, numCells, numBoxes, _a, boxesTensor, scoresTensor, classScoresTensor, results, scoresData, boxesData, row, col, anchor, score, ctX, ctY, width_1, height_1, x, y, pos, _b, classScore, label, _c; - var _this = this; - return __generator$1(this, function (_d) { - switch (_d.label) { - case 0: - width = inputBlobDimensions.width, height = inputBlobDimensions.height; - inputSize = Math.max(width, height); - correctionFactorX = inputSize / width; - correctionFactorY = inputSize / height; - numCells = outputTensor.shape[1]; - numBoxes = this.config.anchors.length; - _a = tidy(function () { - var reshaped = outputTensor.reshape([numCells, numCells, numBoxes, _this.boxEncodingSize]); - var boxes = reshaped.slice([0, 0, 0, 0], [numCells, numCells, numBoxes, 4]); - var scores = reshaped.slice([0, 0, 0, 4], [numCells, numCells, numBoxes, 1]); - var classScores = _this.withClassScores - ? softmax(reshaped.slice([0, 0, 0, 5], [numCells, numCells, numBoxes, _this.config.classes.length]), 3) - : scalar(0); - return [boxes, scores, classScores]; - }), boxesTensor = _a[0], scoresTensor = _a[1], classScoresTensor = _a[2]; - results = []; - return [4 /*yield*/, scoresTensor.array()]; - case 1: - scoresData = _d.sent(); - return [4 /*yield*/, boxesTensor.array()]; - case 2: - boxesData = _d.sent(); - row = 0; - _d.label = 3; - case 3: - if (!(row < numCells)) return [3 /*break*/, 12]; - col = 0; - _d.label = 4; - case 4: - if (!(col < numCells)) return [3 /*break*/, 11]; - anchor = 0; - _d.label = 5; - case 5: - if (!(anchor < numBoxes)) return [3 /*break*/, 10]; - score = sigmoid$1(scoresData[row][col][anchor][0]); - if (!(!scoreThreshold || score > scoreThreshold)) return [3 /*break*/, 9]; - ctX = ((col + sigmoid$1(boxesData[row][col][anchor][0])) / numCells) * correctionFactorX; - ctY = ((row + sigmoid$1(boxesData[row][col][anchor][1])) / numCells) * correctionFactorY; - width_1 = ((Math.exp(boxesData[row][col][anchor][2]) * this.config.anchors[anchor].x) / numCells) * correctionFactorX; - height_1 = ((Math.exp(boxesData[row][col][anchor][3]) * this.config.anchors[anchor].y) / numCells) * correctionFactorY; - x = (ctX - (width_1 / 2)); - y = (ctY - (height_1 / 2)); - pos = { row: row, col: col, anchor: anchor }; - if (!this.withClassScores) return [3 /*break*/, 7]; - return [4 /*yield*/, this.extractPredictedClass(classScoresTensor, pos)]; - case 6: - _c = _d.sent(); - return [3 /*break*/, 8]; - case 7: - _c = { classScore: 1, label: 0 }; - _d.label = 8; - case 8: - _b = _c, classScore = _b.classScore, label = _b.label; - results.push(__assign$1({ box: new BoundingBox(x, y, x + width_1, y + height_1), score: score, classScore: score * classScore, label: label }, pos)); - _d.label = 9; - case 9: - anchor++; - return [3 /*break*/, 5]; - case 10: - col++; - return [3 /*break*/, 4]; - case 11: - row++; - return [3 /*break*/, 3]; - case 12: - boxesTensor.dispose(); - scoresTensor.dispose(); - classScoresTensor.dispose(); - return [2 /*return*/, results]; - } - }); - }); - }; - TinyYolov2.prototype.extractPredictedClass = function (classesTensor, pos) { - return __awaiter$1(this, void 0, void 0, function () { - var row, col, anchor, classesData; - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: - row = pos.row, col = pos.col, anchor = pos.anchor; - return [4 /*yield*/, classesTensor.array()]; - case 1: - classesData = _a.sent(); - return [2 /*return*/, Array(this.config.classes.length).fill(0) - .map(function (_, i) { return classesData[row][col][anchor][i]; }) - .map(function (classScore, label) { return ({ - classScore: classScore, - label: label - }); }) - .reduce(function (max, curr) { return max.classScore > curr.classScore ? max : curr; })]; - } - }); - }); - }; - TinyYolov2.DEFAULT_FILTER_SIZES = [ - 3, 16, 32, 64, 128, 256, 512, 1024, 1024 - ]; - return TinyYolov2; - }(NeuralNetwork)); - - - - var tfjsImageRecognitionBase = /*#__PURE__*/Object.freeze({ - convLayer: convLayer, - disposeUnusedWeightTensors: disposeUnusedWeightTensors, - extractConvParamsFactory: extractConvParamsFactory, - extractFCParamsFactory: extractFCParamsFactory, - extractSeparableConvParamsFactory: extractSeparableConvParamsFactory, - loadSeparableConvParamsFactory: loadSeparableConvParamsFactory, - extractWeightEntryFactory: extractWeightEntryFactory, - extractWeightsFactory: extractWeightsFactory, - getModelUris: getModelUris, - SeparableConvParams: SeparableConvParams, - TinyYolov2: TinyYolov2, - get TinyYolov2SizeType () { return TinyYolov2SizeType; }, - TinyYolov2Options: TinyYolov2Options, - validateConfig: validateConfig - }); - - var Rect = /** @class */ (function (_super) { - __extends$1(Rect, _super); - function Rect(x, y, width, height) { - return _super.call(this, { x: x, y: y, width: width, height: height }) || this; - } - return Rect; - }(Box)); - - var FaceDetection = /** @class */ (function (_super) { - __extends$1(FaceDetection, _super); - function FaceDetection(score, relativeBox, imageDims) { - return _super.call(this, score, score, '', relativeBox, imageDims) || this; - } - FaceDetection.prototype.forSize = function (width, height) { - return _super.prototype.forSize.call(this, width, height); - }; - return FaceDetection; - }(ObjectDetection)); - - // face alignment constants - var relX = 0.5; - var relY = 0.43; - var relScale = 0.45; - var FaceLandmarks = /** @class */ (function () { - function FaceLandmarks(relativeFaceLandmarkPositions, imgDims, shift) { - if (shift === void 0) { shift = new Point(0, 0); } - var width = imgDims.width, height = imgDims.height; - this._imgDims = new Dimensions(width, height); - this._shift = shift; - this._positions = relativeFaceLandmarkPositions.map(function (pt) { return pt.mul(new Point(width, height)).add(shift); }); - } - Object.defineProperty(FaceLandmarks.prototype, "shift", { - get: function () { return new Point(this._shift.x, this._shift.y); }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceLandmarks.prototype, "imageWidth", { - get: function () { return this._imgDims.width; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceLandmarks.prototype, "imageHeight", { - get: function () { return this._imgDims.height; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceLandmarks.prototype, "positions", { - get: function () { return this._positions; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceLandmarks.prototype, "relativePositions", { - get: function () { - var _this = this; - return this._positions.map(function (pt) { return pt.sub(_this._shift).div(new Point(_this.imageWidth, _this.imageHeight)); }); - }, - enumerable: true, - configurable: true - }); - FaceLandmarks.prototype.forSize = function (width, height) { - return new this.constructor(this.relativePositions, { width: width, height: height }); - }; - FaceLandmarks.prototype.shiftBy = function (x, y) { - return new this.constructor(this.relativePositions, this._imgDims, new Point(x, y)); - }; - FaceLandmarks.prototype.shiftByPoint = function (pt) { - return this.shiftBy(pt.x, pt.y); - }; - /** - * Aligns the face landmarks after face detection from the relative positions of the faces - * bounding box, or it's current shift. This function should be used to align the face images - * after face detection has been performed, before they are passed to the face recognition net. - * This will make the computed face descriptor more accurate. - * - * @param detection (optional) The bounding box of the face or the face detection result. If - * no argument was passed the position of the face landmarks are assumed to be relative to - * it's current shift. - * @returns The bounding box of the aligned face. - */ - FaceLandmarks.prototype.align = function (detection) { - if (detection) { - var box = detection instanceof FaceDetection - ? detection.box.floor() - : detection; - return this.shiftBy(box.x, box.y).align(); - } - var centers = this.getRefPointsForAlignment(); - var leftEyeCenter = centers[0], rightEyeCenter = centers[1], mouthCenter = centers[2]; - var distToMouth = function (pt) { return mouthCenter.sub(pt).magnitude(); }; - var eyeToMouthDist = (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2; - var size = Math.floor(eyeToMouthDist / relScale); - var refPoint = getCenterPoint(centers); - // TODO: pad in case rectangle is out of image bounds - var x = Math.floor(Math.max(0, refPoint.x - (relX * size))); - var y = Math.floor(Math.max(0, refPoint.y - (relY * size))); - return new Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y)); - }; - FaceLandmarks.prototype.getRefPointsForAlignment = function () { - throw new Error('getRefPointsForAlignment not implemented by base class'); - }; - return FaceLandmarks; - }()); - - var FaceLandmarks5 = /** @class */ (function (_super) { - __extends$1(FaceLandmarks5, _super); - function FaceLandmarks5() { - return _super !== null && _super.apply(this, arguments) || this; - } - FaceLandmarks5.prototype.getRefPointsForAlignment = function () { - var pts = this.positions; - return [ - pts[0], - pts[1], - getCenterPoint([pts[3], pts[4]]) - ]; - }; - return FaceLandmarks5; - }(FaceLandmarks)); - - var FaceLandmarks68 = /** @class */ (function (_super) { - __extends$1(FaceLandmarks68, _super); - function FaceLandmarks68() { - return _super !== null && _super.apply(this, arguments) || this; - } - FaceLandmarks68.prototype.getJawOutline = function () { - return this.positions.slice(0, 17); - }; - FaceLandmarks68.prototype.getLeftEyeBrow = function () { - return this.positions.slice(17, 22); - }; - FaceLandmarks68.prototype.getRightEyeBrow = function () { - return this.positions.slice(22, 27); - }; - FaceLandmarks68.prototype.getNose = function () { - return this.positions.slice(27, 36); - }; - FaceLandmarks68.prototype.getLeftEye = function () { - return this.positions.slice(36, 42); - }; - FaceLandmarks68.prototype.getRightEye = function () { - return this.positions.slice(42, 48); - }; - FaceLandmarks68.prototype.getMouth = function () { - return this.positions.slice(48, 68); - }; - FaceLandmarks68.prototype.getRefPointsForAlignment = function () { - return [ - this.getLeftEye(), - this.getRightEye(), - this.getMouth() - ].map(getCenterPoint); - }; - return FaceLandmarks68; - }(FaceLandmarks)); - - var FaceMatch = /** @class */ (function () { - function FaceMatch(label, distance) { - this._label = label; - this._distance = distance; - } - Object.defineProperty(FaceMatch.prototype, "label", { - get: function () { return this._label; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceMatch.prototype, "distance", { - get: function () { return this._distance; }, - enumerable: true, - configurable: true - }); - FaceMatch.prototype.toString = function (withDistance) { - if (withDistance === void 0) { withDistance = true; } - return "" + this.label + (withDistance ? " (" + round$1(this.distance) + ")" : ''); - }; - return FaceMatch; - }()); - - var LabeledFaceDescriptors = /** @class */ (function () { - function LabeledFaceDescriptors(label, descriptors) { - if (!(typeof label === 'string')) { - throw new Error('LabeledFaceDescriptors - constructor expected label to be a string'); - } - if (!Array.isArray(descriptors) || descriptors.some(function (desc) { return !(desc instanceof Float32Array); })) { - throw new Error('LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array'); - } - this._label = label; - this._descriptors = descriptors; - } - Object.defineProperty(LabeledFaceDescriptors.prototype, "label", { - get: function () { return this._label; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(LabeledFaceDescriptors.prototype, "descriptors", { - get: function () { return this._descriptors; }, - enumerable: true, - configurable: true - }); - return LabeledFaceDescriptors; - }()); - - function drawContour(ctx, points, isClosed) { - if (isClosed === void 0) { isClosed = false; } - ctx.beginPath(); - points.slice(1).forEach(function (_a, prevIdx) { - var x = _a.x, y = _a.y; - var from = points[prevIdx]; - ctx.moveTo(from.x, from.y); - ctx.lineTo(x, y); - }); - if (isClosed) { - var from = points[points.length - 1]; - var to = points[0]; - if (!from || !to) { - return; - } - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - } - ctx.stroke(); - } - - function drawLandmarks(canvasArg, faceLandmarks, options) { - var canvas = resolveInput(canvasArg); - if (!(canvas instanceof env.getEnv().Canvas)) { - throw new Error('drawLandmarks - expected canvas to be of type: HTMLCanvasElement'); - } - var drawOptions = Object.assign(getDefaultDrawOptions(options), (options || {})); - var drawLines = Object.assign({ drawLines: false }, (options || {})).drawLines; - var ctx = getContext2dOrThrow(canvas); - var lineWidth = drawOptions.lineWidth, _a = drawOptions.color, color = _a === void 0 ? 'blue' : _a; - var faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks]; - faceLandmarksArray.forEach(function (landmarks) { - if (drawLines && landmarks instanceof FaceLandmarks68) { - ctx.strokeStyle = color; - ctx.lineWidth = lineWidth; - drawContour(ctx, landmarks.getJawOutline()); - drawContour(ctx, landmarks.getLeftEyeBrow()); - drawContour(ctx, landmarks.getRightEyeBrow()); - drawContour(ctx, landmarks.getNose()); - drawContour(ctx, landmarks.getLeftEye(), true); - drawContour(ctx, landmarks.getRightEye(), true); - drawContour(ctx, landmarks.getMouth(), true); - return; - } - // else draw points - var ptOffset = lineWidth / 2; - ctx.fillStyle = color; - landmarks.positions.forEach(function (pt) { return ctx.fillRect(pt.x - ptOffset, pt.y - ptOffset, lineWidth, lineWidth); }); - }); - } - - function drawFaceExpressions(canvasArg, faceExpressions, options) { - var canvas = resolveInput(canvasArg); - if (!(canvas instanceof env.getEnv().Canvas)) { - throw new Error('drawFaceExpressions - expected canvas to be of type: HTMLCanvasElement'); - } - var drawOptions = Object.assign(getDefaultDrawOptions(options), (options || {})); - var ctx = getContext2dOrThrow(canvas); - var _a = drawOptions.primaryColor, primaryColor = _a === void 0 ? 'red' : _a, _b = drawOptions.secondaryColor, secondaryColor = _b === void 0 ? 'blue' : _b, _c = drawOptions.primaryFontSize, primaryFontSize = _c === void 0 ? 22 : _c, _d = drawOptions.secondaryFontSize, secondaryFontSize = _d === void 0 ? 16 : _d, _e = drawOptions.minConfidence, minConfidence = _e === void 0 ? 0.2 : _e; - var faceExpressionsArray = Array.isArray(faceExpressions) - ? faceExpressions - : [faceExpressions]; - faceExpressionsArray.forEach(function (_a) { - var position = _a.position, expressions = _a.expressions; - var x = position.x, y = position.y; - var height = position.height || 0; - var sorted = expressions.sort(function (a, b) { return b.probability - a.probability; }); - var resultsToDisplay = sorted.filter(function (expr) { return expr.probability > minConfidence; }); - var offset = (y + height + resultsToDisplay.length * primaryFontSize) > canvas.height - ? -(resultsToDisplay.length * primaryFontSize) - : 0; - resultsToDisplay.forEach(function (expr, i) { - var text = expr.expression + " (" + round$1(expr.probability) + ")"; - drawText(ctx, x, y + height + (i * primaryFontSize) + offset, text, { - textColor: i === 0 ? primaryColor : secondaryColor, - fontSize: i === 0 ? primaryFontSize : secondaryFontSize - }); - }); - }); - } - - /** - * Extracts the image regions containing the detected faces. - * - * @param input The image that face detection has been performed on. - * @param detections The face detection results or face bounding boxes for that image. - * @returns The Canvases of the corresponding image region for each detected face. - */ - function extractFaces(input, detections) { - return __awaiter$1(this, void 0, void 0, function () { - var Canvas, canvas, netInput, tensorOrCanvas, _a, ctx, boxes; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - Canvas = env.getEnv().Canvas; - canvas = input; - if (!!(input instanceof Canvas)) return [3 /*break*/, 5]; - return [4 /*yield*/, toNetInput(input)]; - case 1: - netInput = _b.sent(); - if (netInput.batchSize > 1) { - throw new Error('extractFaces - batchSize > 1 not supported'); - } - tensorOrCanvas = netInput.getInput(0); - if (!(tensorOrCanvas instanceof Canvas)) return [3 /*break*/, 2]; - _a = tensorOrCanvas; - return [3 /*break*/, 4]; - case 2: return [4 /*yield*/, imageTensorToCanvas(tensorOrCanvas)]; - case 3: - _a = _b.sent(); - _b.label = 4; - case 4: - canvas = _a; - _b.label = 5; - case 5: - ctx = getContext2dOrThrow(canvas); - boxes = detections.map(function (det) { return det instanceof FaceDetection - ? det.forSize(canvas.width, canvas.height).box.floor() - : det; }) - .map(function (box) { return box.clipAtImageBorders(canvas.width, canvas.height); }); - return [2 /*return*/, boxes.map(function (_a) { - var x = _a.x, y = _a.y, width = _a.width, height = _a.height; - var faceImg = createCanvas({ width: width, height: height }); - getContext2dOrThrow(faceImg) - .putImageData(ctx.getImageData(x, y, width, height), 0, 0); - return faceImg; - })]; - } - }); - }); - } - - /** - * Extracts the tensors of the image regions containing the detected faces. - * Useful if you want to compute the face descriptors for the face images. - * Using this method is faster then extracting a canvas for each face and - * converting them to tensors individually. - * - * @param imageTensor The image tensor that face detection has been performed on. - * @param detections The face detection results or face bounding boxes for that image. - * @returns Tensors of the corresponding image region for each detected face. - */ - function extractFaceTensors(imageTensor, detections) { - return __awaiter$1(this, void 0, void 0, function () { - return __generator$1(this, function (_a) { - if (!isTensor3D(imageTensor) && !isTensor4D(imageTensor)) { - throw new Error('extractFaceTensors - expected image tensor to be 3D or 4D'); - } - if (isTensor4D(imageTensor) && imageTensor.shape[0] > 1) { - throw new Error('extractFaceTensors - batchSize > 1 not supported'); - } - return [2 /*return*/, tidy(function () { - var _a = imageTensor.shape.slice(isTensor4D(imageTensor) ? 1 : 0), imgHeight = _a[0], imgWidth = _a[1], numChannels = _a[2]; - var boxes = detections.map(function (det) { return det instanceof FaceDetection - ? det.forSize(imgWidth, imgHeight).box - : det; }) - .map(function (box) { return box.clipAtImageBorders(imgWidth, imgHeight); }); - var faceTensors = boxes.map(function (_a) { - var x = _a.x, y = _a.y, width = _a.width, height = _a.height; - return slice3d(imageTensor.as3D(imgHeight, imgWidth, numChannels), [y, x, 0], [height, width, numChannels]); - }); - return faceTensors; - })]; - }); - }); - } - - function depthwiseSeparableConv$1(x, params, stride) { - return tidy(function () { - var out = separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same'); - out = add(out, params.bias); - return out; - }); - } - - function denseBlock3(x, denseBlockParams, isFirstLayer) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - return tidy(function () { - var out1 = relu(isFirstLayer - ? add(conv2d(x, denseBlockParams.conv0.filters, [2, 2], 'same'), denseBlockParams.conv0.bias) - : depthwiseSeparableConv$1(x, denseBlockParams.conv0, [2, 2])); - var out2 = depthwiseSeparableConv$1(out1, denseBlockParams.conv1, [1, 1]); - var in3 = relu(add(out1, out2)); - var out3 = depthwiseSeparableConv$1(in3, denseBlockParams.conv2, [1, 1]); - return relu(add(out1, add(out2, out3))); - }); - } - function denseBlock4(x, denseBlockParams, isFirstLayer, isScaleDown) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - if (isScaleDown === void 0) { isScaleDown = true; } - return tidy(function () { - var out1 = relu(isFirstLayer - ? add(conv2d(x, denseBlockParams.conv0.filters, isScaleDown ? [2, 2] : [1, 1], 'same'), denseBlockParams.conv0.bias) - : depthwiseSeparableConv$1(x, denseBlockParams.conv0, isScaleDown ? [2, 2] : [1, 1])); - var out2 = depthwiseSeparableConv$1(out1, denseBlockParams.conv1, [1, 1]); - var in3 = relu(add(out1, out2)); - var out3 = depthwiseSeparableConv$1(in3, denseBlockParams.conv2, [1, 1]); - var in4 = relu(add(out1, add(out2, out3))); - var out4 = depthwiseSeparableConv$1(in4, denseBlockParams.conv3, [1, 1]); - return relu(add(out1, add(out2, add(out3, out4)))); - }); - } - - function extractorsFactory$2(extractWeights, paramMappings) { - function extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix) { - var depthwise_filter = tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]); - var pointwise_filter = tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]); - var bias = tensor1d(extractWeights(channelsOut)); - paramMappings.push({ paramPath: mappedPrefix + "/depthwise_filter" }, { paramPath: mappedPrefix + "/pointwise_filter" }, { paramPath: mappedPrefix + "/bias" }); - return new SeparableConvParams(depthwise_filter, pointwise_filter, bias); - } - var extractConvParams = extractConvParamsFactory(extractWeights, paramMappings); - function extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - var conv0 = isFirstLayer - ? extractConvParams(channelsIn, channelsOut, 3, mappedPrefix + "/conv0") - : extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix + "/conv0"); - var conv1 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv1"); - var conv2 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv2"); - return { conv0: conv0, conv1: conv1, conv2: conv2 }; - } - function extractDenseBlock4Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - var _a = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer), conv0 = _a.conv0, conv1 = _a.conv1, conv2 = _a.conv2; - var conv3 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv3"); - return { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3 }; - } - return { - extractDenseBlock3Params: extractDenseBlock3Params, - extractDenseBlock4Params: extractDenseBlock4Params - }; - } - - function extractParams$1(weights) { - var paramMappings = []; - var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var extractDenseBlock4Params = extractorsFactory$2(extractWeights, paramMappings).extractDenseBlock4Params; - var dense0 = extractDenseBlock4Params(3, 32, 'dense0', true); - var dense1 = extractDenseBlock4Params(32, 64, 'dense1'); - var dense2 = extractDenseBlock4Params(64, 128, 'dense2'); - var dense3 = extractDenseBlock4Params(128, 256, 'dense3'); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { - paramMappings: paramMappings, - params: { dense0: dense0, dense1: dense1, dense2: dense2, dense3: dense3 } - }; - } - - function loadParamsFactory(weightMap, paramMappings) { - var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); - function extractConvParams(prefix) { - var filters = extractWeightEntry(prefix + "/filters", 4); - var bias = extractWeightEntry(prefix + "/bias", 1); - return { filters: filters, bias: bias }; - } - function extractSeparableConvParams(prefix) { - var depthwise_filter = extractWeightEntry(prefix + "/depthwise_filter", 4); - var pointwise_filter = extractWeightEntry(prefix + "/pointwise_filter", 4); - var bias = extractWeightEntry(prefix + "/bias", 1); - return new SeparableConvParams(depthwise_filter, pointwise_filter, bias); - } - function extractDenseBlock3Params(prefix, isFirstLayer) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - var conv0 = isFirstLayer - ? extractConvParams(prefix + "/conv0") - : extractSeparableConvParams(prefix + "/conv0"); - var conv1 = extractSeparableConvParams(prefix + "/conv1"); - var conv2 = extractSeparableConvParams(prefix + "/conv2"); - return { conv0: conv0, conv1: conv1, conv2: conv2 }; - } - function extractDenseBlock4Params(prefix, isFirstLayer) { - if (isFirstLayer === void 0) { isFirstLayer = false; } - var conv0 = isFirstLayer - ? extractConvParams(prefix + "/conv0") - : extractSeparableConvParams(prefix + "/conv0"); - var conv1 = extractSeparableConvParams(prefix + "/conv1"); - var conv2 = extractSeparableConvParams(prefix + "/conv2"); - var conv3 = extractSeparableConvParams(prefix + "/conv3"); - return { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3 }; - } - return { - extractDenseBlock3Params: extractDenseBlock3Params, - extractDenseBlock4Params: extractDenseBlock4Params - }; - } - - function extractParamsFromWeigthMap$1(weightMap) { - var paramMappings = []; - var extractDenseBlock4Params = loadParamsFactory(weightMap, paramMappings).extractDenseBlock4Params; - var params = { - dense0: extractDenseBlock4Params('dense0', true), - dense1: extractDenseBlock4Params('dense1'), - dense2: extractDenseBlock4Params('dense2'), - dense3: extractDenseBlock4Params('dense3') - }; - disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: params, paramMappings: paramMappings }; - } - - var FaceFeatureExtractor = /** @class */ (function (_super) { - __extends$1(FaceFeatureExtractor, _super); - function FaceFeatureExtractor() { - return _super.call(this, 'FaceFeatureExtractor') || this; - } - FaceFeatureExtractor.prototype.forwardInput = function (input) { - var params = this.params; - if (!params) { - throw new Error('FaceFeatureExtractor - load model before inference'); - } - return tidy(function () { - var batchTensor = input.toBatchTensor(112, true); - var meanRgb = [122.782, 117.001, 104.298]; - var normalized = normalize(batchTensor, meanRgb).div(scalar(255)); - var out = denseBlock4(normalized, params.dense0, true); - out = denseBlock4(out, params.dense1); - out = denseBlock4(out, params.dense2); - out = denseBlock4(out, params.dense3); - out = avgPool(out, [7, 7], [2, 2], 'valid'); - return out; - }); - }; - FaceFeatureExtractor.prototype.forward = function (input) { - return __awaiter$1(this, void 0, void 0, function () { - var _a; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - FaceFeatureExtractor.prototype.getDefaultModelName = function () { - return 'face_feature_extractor_model'; - }; - FaceFeatureExtractor.prototype.extractParamsFromWeigthMap = function (weightMap) { - return extractParamsFromWeigthMap$1(weightMap); - }; - FaceFeatureExtractor.prototype.extractParams = function (weights) { - return extractParams$1(weights); - }; - return FaceFeatureExtractor; - }(NeuralNetwork)); - - function fullyConnectedLayer(x, params) { - return tidy(function () { - return add(matMul(x, params.weights), params.bias); - }); - } - - function extractParams$2(weights, channelsIn, channelsOut) { - var paramMappings = []; - var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var extractFCParams = extractFCParamsFactory(extractWeights, paramMappings); - var fc = extractFCParams(channelsIn, channelsOut, 'fc'); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { - paramMappings: paramMappings, - params: { fc: fc } - }; - } - - function extractParamsFromWeigthMap$2(weightMap) { - var paramMappings = []; - var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); - function extractFcParams(prefix) { - var weights = extractWeightEntry(prefix + "/weights", 2); - var bias = extractWeightEntry(prefix + "/bias", 1); - return { weights: weights, bias: bias }; - } - var params = { - fc: extractFcParams('fc') - }; - disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: params, paramMappings: paramMappings }; - } - - function seperateWeightMaps(weightMap) { - var featureExtractorMap = {}; - var classifierMap = {}; - Object.keys(weightMap).forEach(function (key) { - var map = key.startsWith('fc') ? classifierMap : featureExtractorMap; - map[key] = weightMap[key]; - }); - return { featureExtractorMap: featureExtractorMap, classifierMap: classifierMap }; - } - - var FaceProcessor = /** @class */ (function (_super) { - __extends$1(FaceProcessor, _super); - function FaceProcessor(_name, faceFeatureExtractor) { - var _this = _super.call(this, _name) || this; - _this._faceFeatureExtractor = faceFeatureExtractor; - return _this; - } - Object.defineProperty(FaceProcessor.prototype, "faceFeatureExtractor", { - get: function () { - return this._faceFeatureExtractor; - }, - enumerable: true, - configurable: true - }); - FaceProcessor.prototype.runNet = function (input) { - var _this = this; - var params = this.params; - if (!params) { - throw new Error(this._name + " - load model before inference"); - } - return tidy(function () { - var bottleneckFeatures = input instanceof NetInput - ? _this.faceFeatureExtractor.forwardInput(input) - : input; - return fullyConnectedLayer(bottleneckFeatures.as2D(bottleneckFeatures.shape[0], -1), params.fc); - }); - }; - FaceProcessor.prototype.dispose = function (throwOnRedispose) { - if (throwOnRedispose === void 0) { throwOnRedispose = true; } - this.faceFeatureExtractor.dispose(throwOnRedispose); - _super.prototype.dispose.call(this, throwOnRedispose); - }; - FaceProcessor.prototype.loadClassifierParams = function (weights) { - var _a = this.extractClassifierParams(weights), params = _a.params, paramMappings = _a.paramMappings; - this._params = params; - this._paramMappings = paramMappings; - }; - FaceProcessor.prototype.extractClassifierParams = function (weights) { - return extractParams$2(weights, this.getClassifierChannelsIn(), this.getClassifierChannelsOut()); - }; - FaceProcessor.prototype.extractParamsFromWeigthMap = function (weightMap) { - var _a = seperateWeightMaps(weightMap), featureExtractorMap = _a.featureExtractorMap, classifierMap = _a.classifierMap; - this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap); - return extractParamsFromWeigthMap$2(classifierMap); - }; - FaceProcessor.prototype.extractParams = function (weights) { - var cIn = this.getClassifierChannelsIn(); - var cOut = this.getClassifierChannelsOut(); - var classifierWeightSize = (cOut * cIn) + cOut; - var featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize); - var classifierWeights = weights.slice(weights.length - classifierWeightSize); - this.faceFeatureExtractor.extractWeights(featureExtractorWeights); - return this.extractClassifierParams(classifierWeights); - }; - return FaceProcessor; - }(NeuralNetwork)); - - var faceExpressionLabels = { - neutral: 0, - happy: 1, - sad: 2, - angry: 3, - fearful: 4, - disgusted: 5, - surprised: 6 - }; - - var FaceExpressionNet = /** @class */ (function (_super) { - __extends$1(FaceExpressionNet, _super); - function FaceExpressionNet(faceFeatureExtractor) { - if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new FaceFeatureExtractor(); } - return _super.call(this, 'FaceExpressionNet', faceFeatureExtractor) || this; - } - FaceExpressionNet.getFaceExpressionLabel = function (faceExpression) { - var label = faceExpressionLabels[faceExpression]; - if (typeof label !== 'number') { - throw new Error("getFaceExpressionLabel - no label for faceExpression: " + faceExpression); - } - return label; - }; - FaceExpressionNet.decodeProbabilites = function (probabilities) { - if (probabilities.length !== 7) { - throw new Error("decodeProbabilites - expected probabilities.length to be 7, have: " + probabilities.length); - } - return Object.keys(faceExpressionLabels) - .map(function (expression) { return ({ expression: expression, probability: probabilities[faceExpressionLabels[expression]] }); }); - }; - FaceExpressionNet.prototype.forwardInput = function (input) { - var _this = this; - return tidy(function () { return softmax(_this.runNet(input)); }); - }; - FaceExpressionNet.prototype.forward = function (input) { - return __awaiter$1(this, void 0, void 0, function () { - var _a; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - FaceExpressionNet.prototype.predictExpressions = function (input) { - return __awaiter$1(this, void 0, void 0, function () { - var netInput, out, probabilitesByBatch, predictionsByBatch; - var _this = this; - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, toNetInput(input)]; - case 1: - netInput = _a.sent(); - return [4 /*yield*/, this.forwardInput(netInput)]; - case 2: - out = _a.sent(); - return [4 /*yield*/, Promise.all(unstack(out).map(function (t) { return __awaiter$1(_this, void 0, void 0, function () { - var data; - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, t.data()]; - case 1: - data = _a.sent(); - t.dispose(); - return [2 /*return*/, data]; - } - }); - }); }))]; - case 3: - probabilitesByBatch = _a.sent(); - out.dispose(); - predictionsByBatch = probabilitesByBatch - .map(function (propablities) { return FaceExpressionNet.decodeProbabilites(propablities); }); - return [2 /*return*/, netInput.isBatchInput - ? predictionsByBatch - : predictionsByBatch[0]]; - } - }); - }); - }; - FaceExpressionNet.prototype.getDefaultModelName = function () { - return 'face_expression_model'; - }; - FaceExpressionNet.prototype.getClassifierChannelsIn = function () { - return 256; - }; - FaceExpressionNet.prototype.getClassifierChannelsOut = function () { - return 7; - }; - return FaceExpressionNet; - }(FaceProcessor)); - - var FaceLandmark68NetBase = /** @class */ (function (_super) { - __extends$1(FaceLandmark68NetBase, _super); - function FaceLandmark68NetBase() { - return _super !== null && _super.apply(this, arguments) || this; - } - FaceLandmark68NetBase.prototype.postProcess = function (output, inputSize, originalDimensions) { - var inputDimensions = originalDimensions.map(function (_a) { - var width = _a.width, height = _a.height; - var scale = inputSize / Math.max(height, width); - return { - width: width * scale, - height: height * scale - }; - }); - var batchSize = inputDimensions.length; - return tidy(function () { - var createInterleavedTensor = function (fillX, fillY) { - return stack([ - fill([68], fillX), - fill([68], fillY) - ], 1).as2D(1, 136).as1D(); - }; - var getPadding = function (batchIdx, cond) { - var _a = inputDimensions[batchIdx], width = _a.width, height = _a.height; - return cond(width, height) ? Math.abs(width - height) / 2 : 0; - }; - var getPaddingX = function (batchIdx) { return getPadding(batchIdx, function (w, h) { return w < h; }); }; - var getPaddingY = function (batchIdx) { return getPadding(batchIdx, function (w, h) { return h < w; }); }; - var landmarkTensors = output - .mul(fill([batchSize, 136], inputSize)) - .sub(stack(Array.from(Array(batchSize), function (_, batchIdx) { - return createInterleavedTensor(getPaddingX(batchIdx), getPaddingY(batchIdx)); - }))) - .div(stack(Array.from(Array(batchSize), function (_, batchIdx) { - return createInterleavedTensor(inputDimensions[batchIdx].width, inputDimensions[batchIdx].height); - }))); - return landmarkTensors; - }); - }; - FaceLandmark68NetBase.prototype.forwardInput = function (input) { - var _this = this; - return tidy(function () { - var out = _this.runNet(input); - return _this.postProcess(out, input.inputSize, input.inputDimensions.map(function (_a) { - var height = _a[0], width = _a[1]; - return ({ height: height, width: width }); - })); - }); - }; - FaceLandmark68NetBase.prototype.forward = function (input) { - return __awaiter$1(this, void 0, void 0, function () { - var _a; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - FaceLandmark68NetBase.prototype.detectLandmarks = function (input) { - return __awaiter$1(this, void 0, void 0, function () { - var netInput, landmarkTensors, landmarksForBatch; - var _this = this; - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, toNetInput(input)]; - case 1: - netInput = _a.sent(); - landmarkTensors = tidy(function () { return unstack(_this.forwardInput(netInput)); }); - return [4 /*yield*/, Promise.all(landmarkTensors.map(function (landmarkTensor, batchIdx) { return __awaiter$1(_this, void 0, void 0, function () { - var landmarksArray, _a, _b, xCoords, yCoords; - return __generator$1(this, function (_c) { - switch (_c.label) { - case 0: - _b = (_a = Array).from; - return [4 /*yield*/, landmarkTensor.data()]; - case 1: - landmarksArray = _b.apply(_a, [_c.sent()]); - xCoords = landmarksArray.filter(function (_, i) { return isEven$1(i); }); - yCoords = landmarksArray.filter(function (_, i) { return !isEven$1(i); }); - return [2 /*return*/, new FaceLandmarks68(Array(68).fill(0).map(function (_, i) { return new Point(xCoords[i], yCoords[i]); }), { - height: netInput.getInputHeight(batchIdx), - width: netInput.getInputWidth(batchIdx), - })]; - } - }); - }); }))]; - case 2: - landmarksForBatch = _a.sent(); - landmarkTensors.forEach(function (t) { return t.dispose(); }); - return [2 /*return*/, netInput.isBatchInput - ? landmarksForBatch - : landmarksForBatch[0]]; - } - }); - }); - }; - FaceLandmark68NetBase.prototype.getClassifierChannelsOut = function () { - return 136; - }; - return FaceLandmark68NetBase; - }(FaceProcessor)); - - var FaceLandmark68Net = /** @class */ (function (_super) { - __extends$1(FaceLandmark68Net, _super); - function FaceLandmark68Net(faceFeatureExtractor) { - if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new FaceFeatureExtractor(); } - return _super.call(this, 'FaceLandmark68Net', faceFeatureExtractor) || this; - } - FaceLandmark68Net.prototype.getDefaultModelName = function () { - return 'face_landmark_68_model'; - }; - FaceLandmark68Net.prototype.getClassifierChannelsIn = function () { - return 256; - }; - return FaceLandmark68Net; - }(FaceLandmark68NetBase)); - - function extractParamsFromWeigthMapTiny(weightMap) { - var paramMappings = []; - var extractDenseBlock3Params = loadParamsFactory(weightMap, paramMappings).extractDenseBlock3Params; - var params = { - dense0: extractDenseBlock3Params('dense0', true), - dense1: extractDenseBlock3Params('dense1'), - dense2: extractDenseBlock3Params('dense2') - }; - disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: params, paramMappings: paramMappings }; - } - - function extractParamsTiny(weights) { - var paramMappings = []; - var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var extractDenseBlock3Params = extractorsFactory$2(extractWeights, paramMappings).extractDenseBlock3Params; - var dense0 = extractDenseBlock3Params(3, 32, 'dense0', true); - var dense1 = extractDenseBlock3Params(32, 64, 'dense1'); - var dense2 = extractDenseBlock3Params(64, 128, 'dense2'); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { - paramMappings: paramMappings, - params: { dense0: dense0, dense1: dense1, dense2: dense2 } - }; - } - - var TinyFaceFeatureExtractor = /** @class */ (function (_super) { - __extends$1(TinyFaceFeatureExtractor, _super); - function TinyFaceFeatureExtractor() { - return _super.call(this, 'TinyFaceFeatureExtractor') || this; - } - TinyFaceFeatureExtractor.prototype.forwardInput = function (input) { - var params = this.params; - if (!params) { - throw new Error('TinyFaceFeatureExtractor - load model before inference'); - } - return tidy(function () { - var batchTensor = input.toBatchTensor(112, true); - var meanRgb = [122.782, 117.001, 104.298]; - var normalized = normalize(batchTensor, meanRgb).div(scalar(255)); - var out = denseBlock3(normalized, params.dense0, true); - out = denseBlock3(out, params.dense1); - out = denseBlock3(out, params.dense2); - out = avgPool(out, [14, 14], [2, 2], 'valid'); - return out; - }); - }; - TinyFaceFeatureExtractor.prototype.forward = function (input) { - return __awaiter$1(this, void 0, void 0, function () { - var _a; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - TinyFaceFeatureExtractor.prototype.getDefaultModelName = function () { - return 'face_feature_extractor_tiny_model'; - }; - TinyFaceFeatureExtractor.prototype.extractParamsFromWeigthMap = function (weightMap) { - return extractParamsFromWeigthMapTiny(weightMap); - }; - TinyFaceFeatureExtractor.prototype.extractParams = function (weights) { - return extractParamsTiny(weights); - }; - return TinyFaceFeatureExtractor; - }(NeuralNetwork)); - - var FaceLandmark68TinyNet = /** @class */ (function (_super) { - __extends$1(FaceLandmark68TinyNet, _super); - function FaceLandmark68TinyNet(faceFeatureExtractor) { - if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new TinyFaceFeatureExtractor(); } - return _super.call(this, 'FaceLandmark68TinyNet', faceFeatureExtractor) || this; - } - FaceLandmark68TinyNet.prototype.getDefaultModelName = function () { - return 'face_landmark_68_tiny_model'; - }; - FaceLandmark68TinyNet.prototype.getClassifierChannelsIn = function () { - return 128; - }; - return FaceLandmark68TinyNet; - }(FaceLandmark68NetBase)); - - var FaceLandmarkNet = /** @class */ (function (_super) { - __extends$1(FaceLandmarkNet, _super); - function FaceLandmarkNet() { - return _super !== null && _super.apply(this, arguments) || this; - } - return FaceLandmarkNet; - }(FaceLandmark68Net)); - - function scale(x, params) { - return add(mul(x, params.weights), params.biases); - } - - function convLayer$1(x, params, strides, withRelu, padding) { - if (padding === void 0) { padding = 'same'; } - var _a = params.conv, filters = _a.filters, bias = _a.bias; - var out = conv2d(x, filters, strides, padding); - out = add(out, bias); - out = scale(out, params.scale); - return withRelu ? relu(out) : out; - } - function conv(x, params) { - return convLayer$1(x, params, [1, 1], true); - } - function convNoRelu(x, params) { - return convLayer$1(x, params, [1, 1], false); - } - function convDown(x, params) { - return convLayer$1(x, params, [2, 2], true, 'valid'); - } - - function extractorsFactory$3(extractWeights, paramMappings) { - function extractFilterValues(numFilterValues, numFilters, filterSize) { - var weights = extractWeights(numFilterValues); - var depth = weights.length / (numFilters * filterSize * filterSize); - if (isFloat(depth)) { - throw new Error("depth has to be an integer: " + depth + ", weights.length: " + weights.length + ", numFilters: " + numFilters + ", filterSize: " + filterSize); - } - return tidy(function () { return transpose(tensor4d(weights, [numFilters, depth, filterSize, filterSize]), [2, 3, 1, 0]); }); - } - function extractConvParams(numFilterValues, numFilters, filterSize, mappedPrefix) { - var filters = extractFilterValues(numFilterValues, numFilters, filterSize); - var bias = tensor1d(extractWeights(numFilters)); - paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/bias" }); - return { filters: filters, bias: bias }; - } - function extractScaleLayerParams(numWeights, mappedPrefix) { - var weights = tensor1d(extractWeights(numWeights)); - var biases = tensor1d(extractWeights(numWeights)); - paramMappings.push({ paramPath: mappedPrefix + "/weights" }, { paramPath: mappedPrefix + "/biases" }); - return { - weights: weights, - biases: biases - }; - } - function extractConvLayerParams(numFilterValues, numFilters, filterSize, mappedPrefix) { - var conv = extractConvParams(numFilterValues, numFilters, filterSize, mappedPrefix + "/conv"); - var scale = extractScaleLayerParams(numFilters, mappedPrefix + "/scale"); - return { conv: conv, scale: scale }; - } - function extractResidualLayerParams(numFilterValues, numFilters, filterSize, mappedPrefix, isDown) { - if (isDown === void 0) { isDown = false; } - var conv1 = extractConvLayerParams((isDown ? 0.5 : 1) * numFilterValues, numFilters, filterSize, mappedPrefix + "/conv1"); - var conv2 = extractConvLayerParams(numFilterValues, numFilters, filterSize, mappedPrefix + "/conv2"); - return { conv1: conv1, conv2: conv2 }; - } - return { - extractConvLayerParams: extractConvLayerParams, - extractResidualLayerParams: extractResidualLayerParams - }; - } - function extractParams$3(weights) { - var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var paramMappings = []; - var _b = extractorsFactory$3(extractWeights, paramMappings), extractConvLayerParams = _b.extractConvLayerParams, extractResidualLayerParams = _b.extractResidualLayerParams; - var conv32_down = extractConvLayerParams(4704, 32, 7, 'conv32_down'); - var conv32_1 = extractResidualLayerParams(9216, 32, 3, 'conv32_1'); - var conv32_2 = extractResidualLayerParams(9216, 32, 3, 'conv32_2'); - var conv32_3 = extractResidualLayerParams(9216, 32, 3, 'conv32_3'); - var conv64_down = extractResidualLayerParams(36864, 64, 3, 'conv64_down', true); - var conv64_1 = extractResidualLayerParams(36864, 64, 3, 'conv64_1'); - var conv64_2 = extractResidualLayerParams(36864, 64, 3, 'conv64_2'); - var conv64_3 = extractResidualLayerParams(36864, 64, 3, 'conv64_3'); - var conv128_down = extractResidualLayerParams(147456, 128, 3, 'conv128_down', true); - var conv128_1 = extractResidualLayerParams(147456, 128, 3, 'conv128_1'); - var conv128_2 = extractResidualLayerParams(147456, 128, 3, 'conv128_2'); - var conv256_down = extractResidualLayerParams(589824, 256, 3, 'conv256_down', true); - var conv256_1 = extractResidualLayerParams(589824, 256, 3, 'conv256_1'); - var conv256_2 = extractResidualLayerParams(589824, 256, 3, 'conv256_2'); - var conv256_down_out = extractResidualLayerParams(589824, 256, 3, 'conv256_down_out'); - var fc = tidy(function () { return transpose(tensor2d(extractWeights(256 * 128), [128, 256]), [1, 0]); }); - paramMappings.push({ paramPath: "fc" }); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - var params = { - conv32_down: conv32_down, - conv32_1: conv32_1, - conv32_2: conv32_2, - conv32_3: conv32_3, - conv64_down: conv64_down, - conv64_1: conv64_1, - conv64_2: conv64_2, - conv64_3: conv64_3, - conv128_down: conv128_down, - conv128_1: conv128_1, - conv128_2: conv128_2, - conv256_down: conv256_down, - conv256_1: conv256_1, - conv256_2: conv256_2, - conv256_down_out: conv256_down_out, - fc: fc - }; - return { params: params, paramMappings: paramMappings }; - } - - function extractorsFactory$4(weightMap, paramMappings) { - var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); - function extractScaleLayerParams(prefix) { - var weights = extractWeightEntry(prefix + "/scale/weights", 1); - var biases = extractWeightEntry(prefix + "/scale/biases", 1); - return { weights: weights, biases: biases }; - } - function extractConvLayerParams(prefix) { - var filters = extractWeightEntry(prefix + "/conv/filters", 4); - var bias = extractWeightEntry(prefix + "/conv/bias", 1); - var scale = extractScaleLayerParams(prefix); - return { conv: { filters: filters, bias: bias }, scale: scale }; - } - function extractResidualLayerParams(prefix) { - return { - conv1: extractConvLayerParams(prefix + "/conv1"), - conv2: extractConvLayerParams(prefix + "/conv2") - }; - } - return { - extractConvLayerParams: extractConvLayerParams, - extractResidualLayerParams: extractResidualLayerParams - }; - } - function extractParamsFromWeigthMap$3(weightMap) { - var paramMappings = []; - var _a = extractorsFactory$4(weightMap, paramMappings), extractConvLayerParams = _a.extractConvLayerParams, extractResidualLayerParams = _a.extractResidualLayerParams; - var conv32_down = extractConvLayerParams('conv32_down'); - var conv32_1 = extractResidualLayerParams('conv32_1'); - var conv32_2 = extractResidualLayerParams('conv32_2'); - var conv32_3 = extractResidualLayerParams('conv32_3'); - var conv64_down = extractResidualLayerParams('conv64_down'); - var conv64_1 = extractResidualLayerParams('conv64_1'); - var conv64_2 = extractResidualLayerParams('conv64_2'); - var conv64_3 = extractResidualLayerParams('conv64_3'); - var conv128_down = extractResidualLayerParams('conv128_down'); - var conv128_1 = extractResidualLayerParams('conv128_1'); - var conv128_2 = extractResidualLayerParams('conv128_2'); - var conv256_down = extractResidualLayerParams('conv256_down'); - var conv256_1 = extractResidualLayerParams('conv256_1'); - var conv256_2 = extractResidualLayerParams('conv256_2'); - var conv256_down_out = extractResidualLayerParams('conv256_down_out'); - var fc = weightMap['fc']; - paramMappings.push({ originalPath: 'fc', paramPath: 'fc' }); - if (!isTensor2D(fc)) { - throw new Error("expected weightMap[fc] to be a Tensor2D, instead have " + fc); - } - var params = { - conv32_down: conv32_down, - conv32_1: conv32_1, - conv32_2: conv32_2, - conv32_3: conv32_3, - conv64_down: conv64_down, - conv64_1: conv64_1, - conv64_2: conv64_2, - conv64_3: conv64_3, - conv128_down: conv128_down, - conv128_1: conv128_1, - conv128_2: conv128_2, - conv256_down: conv256_down, - conv256_1: conv256_1, - conv256_2: conv256_2, - conv256_down_out: conv256_down_out, - fc: fc - }; - disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: params, paramMappings: paramMappings }; - } - - function residual(x, params) { - var out = conv(x, params.conv1); - out = convNoRelu(out, params.conv2); - out = add(out, x); - out = relu(out); - return out; - } - function residualDown(x, params) { - var out = convDown(x, params.conv1); - out = convNoRelu(out, params.conv2); - var pooled = avgPool(x, 2, 2, 'valid'); - var zeros$1 = zeros(pooled.shape); - var isPad = pooled.shape[3] !== out.shape[3]; - var isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2]; - if (isAdjustShape) { - var padShapeX = out.shape.slice(); - padShapeX[1] = 1; - var zerosW = zeros(padShapeX); - out = concat([out, zerosW], 1); - var padShapeY = out.shape.slice(); - padShapeY[2] = 1; - var zerosH = zeros(padShapeY); - out = concat([out, zerosH], 2); - } - pooled = isPad ? concat([pooled, zeros$1], 3) : pooled; - out = add(pooled, out); - out = relu(out); - return out; - } - - var FaceRecognitionNet = /** @class */ (function (_super) { - __extends$1(FaceRecognitionNet, _super); - function FaceRecognitionNet() { - return _super.call(this, 'FaceRecognitionNet') || this; - } - FaceRecognitionNet.prototype.forwardInput = function (input) { - var params = this.params; - if (!params) { - throw new Error('FaceRecognitionNet - load model before inference'); - } - return tidy(function () { - var batchTensor = input.toBatchTensor(150, true).toFloat(); - var meanRgb = [122.782, 117.001, 104.298]; - var normalized = normalize(batchTensor, meanRgb).div(scalar(256)); - var out = convDown(normalized, params.conv32_down); - out = maxPool(out, 3, 2, 'valid'); - out = residual(out, params.conv32_1); - out = residual(out, params.conv32_2); - out = residual(out, params.conv32_3); - out = residualDown(out, params.conv64_down); - out = residual(out, params.conv64_1); - out = residual(out, params.conv64_2); - out = residual(out, params.conv64_3); - out = residualDown(out, params.conv128_down); - out = residual(out, params.conv128_1); - out = residual(out, params.conv128_2); - out = residualDown(out, params.conv256_down); - out = residual(out, params.conv256_1); - out = residual(out, params.conv256_2); - out = residualDown(out, params.conv256_down_out); - var globalAvg = out.mean([1, 2]); - var fullyConnected = matMul(globalAvg, params.fc); - return fullyConnected; - }); - }; - FaceRecognitionNet.prototype.forward = function (input) { - return __awaiter$1(this, void 0, void 0, function () { - var _a; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - FaceRecognitionNet.prototype.computeFaceDescriptor = function (input) { - return __awaiter$1(this, void 0, void 0, function () { - var netInput, faceDescriptorTensors, faceDescriptorsForBatch; - var _this = this; - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, toNetInput(input)]; - case 1: - netInput = _a.sent(); - faceDescriptorTensors = tidy(function () { return unstack(_this.forwardInput(netInput)); }); - return [4 /*yield*/, Promise.all(faceDescriptorTensors.map(function (t) { return t.data(); }))]; - case 2: - faceDescriptorsForBatch = _a.sent(); - faceDescriptorTensors.forEach(function (t) { return t.dispose(); }); - return [2 /*return*/, netInput.isBatchInput - ? faceDescriptorsForBatch - : faceDescriptorsForBatch[0]]; - } - }); - }); - }; - FaceRecognitionNet.prototype.getDefaultModelName = function () { - return 'face_recognition_model'; - }; - FaceRecognitionNet.prototype.extractParamsFromWeigthMap = function (weightMap) { - return extractParamsFromWeigthMap$3(weightMap); - }; - FaceRecognitionNet.prototype.extractParams = function (weights) { - return extractParams$3(weights); - }; - return FaceRecognitionNet; - }(NeuralNetwork)); - - function createFaceRecognitionNet(weights) { - var net = new FaceRecognitionNet(); - net.extractWeights(weights); - return net; - } - - function extendWithFaceDescriptor(sourceObj, descriptor) { - var extension = { descriptor: descriptor }; - return Object.assign({}, sourceObj, extension); - } - - function extendWithFaceDetection(sourceObj, detection) { - var extension = { detection: detection }; - return Object.assign({}, sourceObj, extension); - } - - function extendWithFaceExpressions(sourceObj, expressions) { - var extension = { expressions: expressions }; - return Object.assign({}, sourceObj, extension); - } - - function extendWithFaceLandmarks(sourceObj, unshiftedLandmarks) { - var shift = sourceObj.detection.box; - var landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y); - var rect = landmarks.align(); - var imageDims = sourceObj.detection.imageDims; - var alignedRect = new FaceDetection(sourceObj.detection.score, rect.rescale(imageDims.reverse()), imageDims); - var extension = { - landmarks: landmarks, - unshiftedLandmarks: unshiftedLandmarks, - alignedRect: alignedRect - }; - return Object.assign({}, sourceObj, extension); - } - - var MtcnnOptions = /** @class */ (function () { - function MtcnnOptions(_a) { - var _b = _a === void 0 ? {} : _a, minFaceSize = _b.minFaceSize, scaleFactor = _b.scaleFactor, maxNumScales = _b.maxNumScales, scoreThresholds = _b.scoreThresholds, scaleSteps = _b.scaleSteps; - this._name = 'MtcnnOptions'; - this._minFaceSize = minFaceSize || 20; - this._scaleFactor = scaleFactor || 0.709; - this._maxNumScales = maxNumScales || 10; - this._scoreThresholds = scoreThresholds || [0.6, 0.7, 0.7]; - this._scaleSteps = scaleSteps; - if (typeof this._minFaceSize !== 'number' || this._minFaceSize < 0) { - throw new Error(this._name + " - expected minFaceSize to be a number > 0"); - } - if (typeof this._scaleFactor !== 'number' || this._scaleFactor <= 0 || this._scaleFactor >= 1) { - throw new Error(this._name + " - expected scaleFactor to be a number between 0 and 1"); - } - if (typeof this._maxNumScales !== 'number' || this._maxNumScales < 0) { - throw new Error(this._name + " - expected maxNumScales to be a number > 0"); - } - if (!Array.isArray(this._scoreThresholds) - || this._scoreThresholds.length !== 3 - || this._scoreThresholds.some(function (th) { return typeof th !== 'number'; })) { - throw new Error(this._name + " - expected scoreThresholds to be an array of numbers of length 3"); - } - if (this._scaleSteps - && (!Array.isArray(this._scaleSteps) || this._scaleSteps.some(function (th) { return typeof th !== 'number'; }))) { - throw new Error(this._name + " - expected scaleSteps to be an array of numbers"); - } - } - Object.defineProperty(MtcnnOptions.prototype, "minFaceSize", { - get: function () { return this._minFaceSize; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MtcnnOptions.prototype, "scaleFactor", { - get: function () { return this._scaleFactor; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MtcnnOptions.prototype, "maxNumScales", { - get: function () { return this._maxNumScales; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MtcnnOptions.prototype, "scoreThresholds", { - get: function () { return this._scoreThresholds; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MtcnnOptions.prototype, "scaleSteps", { - get: function () { return this._scaleSteps; }, - enumerable: true, - configurable: true - }); - return MtcnnOptions; - }()); - - function extractorsFactory$5(extractWeights, paramMappings) { - function extractDepthwiseConvParams(numChannels, mappedPrefix) { - var filters = tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]); - var batch_norm_scale = tensor1d(extractWeights(numChannels)); - var batch_norm_offset = tensor1d(extractWeights(numChannels)); - var batch_norm_mean = tensor1d(extractWeights(numChannels)); - var batch_norm_variance = tensor1d(extractWeights(numChannels)); - paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/batch_norm_scale" }, { paramPath: mappedPrefix + "/batch_norm_offset" }, { paramPath: mappedPrefix + "/batch_norm_mean" }, { paramPath: mappedPrefix + "/batch_norm_variance" }); - return { - filters: filters, - batch_norm_scale: batch_norm_scale, - batch_norm_offset: batch_norm_offset, - batch_norm_mean: batch_norm_mean, - batch_norm_variance: batch_norm_variance - }; - } - function extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, isPointwiseConv) { - var filters = tensor4d(extractWeights(channelsIn * channelsOut * filterSize * filterSize), [filterSize, filterSize, channelsIn, channelsOut]); - var bias = tensor1d(extractWeights(channelsOut)); - paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/" + (isPointwiseConv ? 'batch_norm_offset' : 'bias') }); - return { filters: filters, bias: bias }; - } - function extractPointwiseConvParams(channelsIn, channelsOut, filterSize, mappedPrefix) { - var _a = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true), filters = _a.filters, bias = _a.bias; - return { - filters: filters, - batch_norm_offset: bias - }; - } - function extractConvPairParams(channelsIn, channelsOut, mappedPrefix) { - var depthwise_conv = extractDepthwiseConvParams(channelsIn, mappedPrefix + "/depthwise_conv"); - var pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, mappedPrefix + "/pointwise_conv"); - return { depthwise_conv: depthwise_conv, pointwise_conv: pointwise_conv }; - } - function extractMobilenetV1Params() { - var conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0'); - var conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1'); - var conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2'); - var conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3'); - var conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4'); - var conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5'); - var conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6'); - var conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7'); - var conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8'); - var conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9'); - var conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10'); - var conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11'); - var conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12'); - var conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13'); - return { - conv_0: conv_0, - conv_1: conv_1, - conv_2: conv_2, - conv_3: conv_3, - conv_4: conv_4, - conv_5: conv_5, - conv_6: conv_6, - conv_7: conv_7, - conv_8: conv_8, - conv_9: conv_9, - conv_10: conv_10, - conv_11: conv_11, - conv_12: conv_12, - conv_13: conv_13 - }; - } - function extractPredictionLayerParams() { - var conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0'); - var conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1'); - var conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2'); - var conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3'); - var conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4'); - var conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5'); - var conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6'); - var conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7'); - var box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor'); - var class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor'); - var box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor'); - var class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor'); - var box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor'); - var class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor'); - var box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor'); - var class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor'); - var box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor'); - var class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor'); - var box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor'); - var class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor'); - var box_predictor_0 = { - box_encoding_predictor: box_encoding_0_predictor, - class_predictor: class_predictor_0 - }; - var box_predictor_1 = { - box_encoding_predictor: box_encoding_1_predictor, - class_predictor: class_predictor_1 - }; - var box_predictor_2 = { - box_encoding_predictor: box_encoding_2_predictor, - class_predictor: class_predictor_2 - }; - var box_predictor_3 = { - box_encoding_predictor: box_encoding_3_predictor, - class_predictor: class_predictor_3 - }; - var box_predictor_4 = { - box_encoding_predictor: box_encoding_4_predictor, - class_predictor: class_predictor_4 - }; - var box_predictor_5 = { - box_encoding_predictor: box_encoding_5_predictor, - class_predictor: class_predictor_5 - }; - return { - conv_0: conv_0, - conv_1: conv_1, - conv_2: conv_2, - conv_3: conv_3, - conv_4: conv_4, - conv_5: conv_5, - conv_6: conv_6, - conv_7: conv_7, - box_predictor_0: box_predictor_0, - box_predictor_1: box_predictor_1, - box_predictor_2: box_predictor_2, - box_predictor_3: box_predictor_3, - box_predictor_4: box_predictor_4, - box_predictor_5: box_predictor_5 - }; - } - return { - extractMobilenetV1Params: extractMobilenetV1Params, - extractPredictionLayerParams: extractPredictionLayerParams - }; - } - function extractParams$4(weights) { - var paramMappings = []; - var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var _b = extractorsFactory$5(extractWeights, paramMappings), extractMobilenetV1Params = _b.extractMobilenetV1Params, extractPredictionLayerParams = _b.extractPredictionLayerParams; - var mobilenetv1 = extractMobilenetV1Params(); - var prediction_layer = extractPredictionLayerParams(); - var extra_dim = tensor3d(extractWeights(5118 * 4), [1, 5118, 4]); - var output_layer = { - extra_dim: extra_dim - }; - paramMappings.push({ paramPath: 'output_layer/extra_dim' }); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { - params: { - mobilenetv1: mobilenetv1, - prediction_layer: prediction_layer, - output_layer: output_layer - }, - paramMappings: paramMappings - }; - } - - function extractorsFactory$6(weightMap, paramMappings) { - var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); - function extractPointwiseConvParams(prefix, idx, mappedPrefix) { - var filters = extractWeightEntry(prefix + "/Conv2d_" + idx + "_pointwise/weights", 4, mappedPrefix + "/filters"); - var batch_norm_offset = extractWeightEntry(prefix + "/Conv2d_" + idx + "_pointwise/convolution_bn_offset", 1, mappedPrefix + "/batch_norm_offset"); - return { filters: filters, batch_norm_offset: batch_norm_offset }; - } - function extractConvPairParams(idx) { - var mappedPrefix = "mobilenetv1/conv_" + idx; - var prefixDepthwiseConv = "MobilenetV1/Conv2d_" + idx + "_depthwise"; - var mappedPrefixDepthwiseConv = mappedPrefix + "/depthwise_conv"; - var mappedPrefixPointwiseConv = mappedPrefix + "/pointwise_conv"; - var filters = extractWeightEntry(prefixDepthwiseConv + "/depthwise_weights", 4, mappedPrefixDepthwiseConv + "/filters"); - var batch_norm_scale = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/gamma", 1, mappedPrefixDepthwiseConv + "/batch_norm_scale"); - var batch_norm_offset = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/beta", 1, mappedPrefixDepthwiseConv + "/batch_norm_offset"); - var batch_norm_mean = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/moving_mean", 1, mappedPrefixDepthwiseConv + "/batch_norm_mean"); - var batch_norm_variance = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/moving_variance", 1, mappedPrefixDepthwiseConv + "/batch_norm_variance"); - return { - depthwise_conv: { - filters: filters, - batch_norm_scale: batch_norm_scale, - batch_norm_offset: batch_norm_offset, - batch_norm_mean: batch_norm_mean, - batch_norm_variance: batch_norm_variance - }, - pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv) - }; - } - function extractMobilenetV1Params() { - return { - conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'), - conv_1: extractConvPairParams(1), - conv_2: extractConvPairParams(2), - conv_3: extractConvPairParams(3), - conv_4: extractConvPairParams(4), - conv_5: extractConvPairParams(5), - conv_6: extractConvPairParams(6), - conv_7: extractConvPairParams(7), - conv_8: extractConvPairParams(8), - conv_9: extractConvPairParams(9), - conv_10: extractConvPairParams(10), - conv_11: extractConvPairParams(11), - conv_12: extractConvPairParams(12), - conv_13: extractConvPairParams(13) - }; - } - function extractConvParams(prefix, mappedPrefix) { - var filters = extractWeightEntry(prefix + "/weights", 4, mappedPrefix + "/filters"); - var bias = extractWeightEntry(prefix + "/biases", 1, mappedPrefix + "/bias"); - return { filters: filters, bias: bias }; - } - function extractBoxPredictorParams(idx) { - var box_encoding_predictor = extractConvParams("Prediction/BoxPredictor_" + idx + "/BoxEncodingPredictor", "prediction_layer/box_predictor_" + idx + "/box_encoding_predictor"); - var class_predictor = extractConvParams("Prediction/BoxPredictor_" + idx + "/ClassPredictor", "prediction_layer/box_predictor_" + idx + "/class_predictor"); - return { box_encoding_predictor: box_encoding_predictor, class_predictor: class_predictor }; - } - function extractPredictionLayerParams() { - return { - conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'), - conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'), - conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'), - conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'), - conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'), - conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'), - conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'), - conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'), - box_predictor_0: extractBoxPredictorParams(0), - box_predictor_1: extractBoxPredictorParams(1), - box_predictor_2: extractBoxPredictorParams(2), - box_predictor_3: extractBoxPredictorParams(3), - box_predictor_4: extractBoxPredictorParams(4), - box_predictor_5: extractBoxPredictorParams(5) - }; - } - return { - extractMobilenetV1Params: extractMobilenetV1Params, - extractPredictionLayerParams: extractPredictionLayerParams - }; - } - function extractParamsFromWeigthMap$4(weightMap) { - var paramMappings = []; - var _a = extractorsFactory$6(weightMap, paramMappings), extractMobilenetV1Params = _a.extractMobilenetV1Params, extractPredictionLayerParams = _a.extractPredictionLayerParams; - var extra_dim = weightMap['Output/extra_dim']; - paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' }); - if (!isTensor3D(extra_dim)) { - throw new Error("expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have " + extra_dim); - } - var params = { - mobilenetv1: extractMobilenetV1Params(), - prediction_layer: extractPredictionLayerParams(), - output_layer: { - extra_dim: extra_dim - } - }; - disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: params, paramMappings: paramMappings }; - } - - function pointwiseConvLayer(x, params, strides) { - return tidy(function () { - var out = conv2d(x, params.filters, strides, 'same'); - out = add(out, params.batch_norm_offset); - return clipByValue(out, 0, 6); - }); - } - - var epsilon = 0.0010000000474974513; - function depthwiseConvLayer(x, params, strides) { - return tidy(function () { - var out = depthwiseConv2d(x, params.filters, strides, 'same'); - out = batchNorm(out, params.batch_norm_mean, params.batch_norm_variance, params.batch_norm_offset, params.batch_norm_scale, epsilon); - return clipByValue(out, 0, 6); - }); - } - function getStridesForLayerIdx(layerIdx) { - return [2, 4, 6, 12].some(function (idx) { return idx === layerIdx; }) ? [2, 2] : [1, 1]; - } - function mobileNetV1(x, params) { - return tidy(function () { - var conv11 = null; - var out = pointwiseConvLayer(x, params.conv_0, [2, 2]); - var convPairParams = [ - params.conv_1, - params.conv_2, - params.conv_3, - params.conv_4, - params.conv_5, - params.conv_6, - params.conv_7, - params.conv_8, - params.conv_9, - params.conv_10, - params.conv_11, - params.conv_12, - params.conv_13 - ]; - convPairParams.forEach(function (param, i) { - var layerIdx = i + 1; - var depthwiseConvStrides = getStridesForLayerIdx(layerIdx); - out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides); - out = pointwiseConvLayer(out, param.pointwise_conv, [1, 1]); - if (layerIdx === 11) { - conv11 = out; - } - }); - if (conv11 === null) { - throw new Error('mobileNetV1 - output of conv layer 11 is null'); - } - return { - out: out, - conv11: conv11 - }; - }); - } - - function nonMaxSuppression$2(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold) { - var numBoxes = boxes.shape[0]; - var outputSize = Math.min(maxOutputSize, numBoxes); - var candidates = scores - .map(function (score, boxIndex) { return ({ score: score, boxIndex: boxIndex }); }) - .filter(function (c) { return c.score > scoreThreshold; }) - .sort(function (c1, c2) { return c2.score - c1.score; }); - var suppressFunc = function (x) { return x <= iouThreshold ? 1 : 0; }; - var selected = []; - candidates.forEach(function (c) { - if (selected.length >= outputSize) { - return; - } - var originalScore = c.score; - for (var j = selected.length - 1; j >= 0; --j) { - var iou = IOU(boxes, c.boxIndex, selected[j]); - if (iou === 0.0) { - continue; - } - c.score *= suppressFunc(iou); - if (c.score <= scoreThreshold) { - break; - } - } - if (originalScore === c.score) { - selected.push(c.boxIndex); - } - }); - return selected; - } - function IOU(boxes, i, j) { - var boxesData = boxes.arraySync(); - var yminI = Math.min(boxesData[i][0], boxesData[i][2]); - var xminI = Math.min(boxesData[i][1], boxesData[i][3]); - var ymaxI = Math.max(boxesData[i][0], boxesData[i][2]); - var xmaxI = Math.max(boxesData[i][1], boxesData[i][3]); - var yminJ = Math.min(boxesData[j][0], boxesData[j][2]); - var xminJ = Math.min(boxesData[j][1], boxesData[j][3]); - var ymaxJ = Math.max(boxesData[j][0], boxesData[j][2]); - var xmaxJ = Math.max(boxesData[j][1], boxesData[j][3]); - var areaI = (ymaxI - yminI) * (xmaxI - xminI); - var areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ); - if (areaI <= 0 || areaJ <= 0) { - return 0.0; - } - var intersectionYmin = Math.max(yminI, yminJ); - var intersectionXmin = Math.max(xminI, xminJ); - var intersectionYmax = Math.min(ymaxI, ymaxJ); - var intersectionXmax = Math.min(xmaxI, xmaxJ); - var intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0) * - Math.max(intersectionXmax - intersectionXmin, 0.0); - return intersectionArea / (areaI + areaJ - intersectionArea); - } - - function getCenterCoordinatesAndSizesLayer(x) { - var vec = unstack(transpose(x, [1, 0])); - var sizes = [ - sub(vec[2], vec[0]), - sub(vec[3], vec[1]) - ]; - var centers = [ - add(vec[0], div(sizes[0], scalar(2))), - add(vec[1], div(sizes[1], scalar(2))) - ]; - return { - sizes: sizes, - centers: centers - }; - } - function decodeBoxesLayer(x0, x1) { - var _a = getCenterCoordinatesAndSizesLayer(x0), sizes = _a.sizes, centers = _a.centers; - var vec = unstack(transpose(x1, [1, 0])); - var div0_out = div(mul(exp(div(vec[2], scalar(5))), sizes[0]), scalar(2)); - var add0_out = add(mul(div(vec[0], scalar(10)), sizes[0]), centers[0]); - var div1_out = div(mul(exp(div(vec[3], scalar(5))), sizes[1]), scalar(2)); - var add1_out = add(mul(div(vec[1], scalar(10)), sizes[1]), centers[1]); - return transpose(stack([ - sub(add0_out, div0_out), - sub(add1_out, div1_out), - add(add0_out, div0_out), - add(add1_out, div1_out) - ]), [1, 0]); - } - function outputLayer(boxPredictions, classPredictions, params) { - return tidy(function () { - var batchSize = boxPredictions.shape[0]; - var boxes = decodeBoxesLayer(reshape(tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]), reshape(boxPredictions, [-1, 4])); - boxes = reshape(boxes, [batchSize, (boxes.shape[0] / batchSize), 4]); - var scoresAndClasses = sigmoid(slice(classPredictions, [0, 0, 1], [-1, -1, -1])); - var scores = slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]); - scores = reshape(scores, [batchSize, scores.shape[1]]); - var boxesByBatch = unstack(boxes); - var scoresByBatch = unstack(scores); - return { - boxes: boxesByBatch, - scores: scoresByBatch - }; - }); - } - - function boxPredictionLayer(x, params) { - return tidy(function () { - var batchSize = x.shape[0]; - var boxPredictionEncoding = reshape(convLayer(x, params.box_encoding_predictor), [batchSize, -1, 1, 4]); - var classPrediction = reshape(convLayer(x, params.class_predictor), [batchSize, -1, 3]); - return { - boxPredictionEncoding: boxPredictionEncoding, - classPrediction: classPrediction - }; - }); - } - - function predictionLayer(x, conv11, params) { - return tidy(function () { - var conv0 = pointwiseConvLayer(x, params.conv_0, [1, 1]); - var conv1 = pointwiseConvLayer(conv0, params.conv_1, [2, 2]); - var conv2 = pointwiseConvLayer(conv1, params.conv_2, [1, 1]); - var conv3 = pointwiseConvLayer(conv2, params.conv_3, [2, 2]); - var conv4 = pointwiseConvLayer(conv3, params.conv_4, [1, 1]); - var conv5 = pointwiseConvLayer(conv4, params.conv_5, [2, 2]); - var conv6 = pointwiseConvLayer(conv5, params.conv_6, [1, 1]); - var conv7 = pointwiseConvLayer(conv6, params.conv_7, [2, 2]); - var boxPrediction0 = boxPredictionLayer(conv11, params.box_predictor_0); - var boxPrediction1 = boxPredictionLayer(x, params.box_predictor_1); - var boxPrediction2 = boxPredictionLayer(conv1, params.box_predictor_2); - var boxPrediction3 = boxPredictionLayer(conv3, params.box_predictor_3); - var boxPrediction4 = boxPredictionLayer(conv5, params.box_predictor_4); - var boxPrediction5 = boxPredictionLayer(conv7, params.box_predictor_5); - var boxPredictions = concat([ - boxPrediction0.boxPredictionEncoding, - boxPrediction1.boxPredictionEncoding, - boxPrediction2.boxPredictionEncoding, - boxPrediction3.boxPredictionEncoding, - boxPrediction4.boxPredictionEncoding, - boxPrediction5.boxPredictionEncoding - ], 1); - var classPredictions = concat([ - boxPrediction0.classPrediction, - boxPrediction1.classPrediction, - boxPrediction2.classPrediction, - boxPrediction3.classPrediction, - boxPrediction4.classPrediction, - boxPrediction5.classPrediction - ], 1); - return { - boxPredictions: boxPredictions, - classPredictions: classPredictions - }; - }); - } - - var SsdMobilenetv1Options = /** @class */ (function () { - function SsdMobilenetv1Options(_a) { - var _b = _a === void 0 ? {} : _a, minConfidence = _b.minConfidence, maxResults = _b.maxResults; - this._name = 'SsdMobilenetv1Options'; - this._minConfidence = minConfidence || 0.5; - this._maxResults = maxResults || 100; - if (typeof this._minConfidence !== 'number' || this._minConfidence <= 0 || this._minConfidence >= 1) { - throw new Error(this._name + " - expected minConfidence to be a number between 0 and 1"); - } - if (typeof this._maxResults !== 'number') { - throw new Error(this._name + " - expected maxResults to be a number"); - } - } - Object.defineProperty(SsdMobilenetv1Options.prototype, "minConfidence", { - get: function () { return this._minConfidence; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SsdMobilenetv1Options.prototype, "maxResults", { - get: function () { return this._maxResults; }, - enumerable: true, - configurable: true - }); - return SsdMobilenetv1Options; - }()); - - var SsdMobilenetv1 = /** @class */ (function (_super) { - __extends$1(SsdMobilenetv1, _super); - function SsdMobilenetv1() { - return _super.call(this, 'SsdMobilenetv1') || this; - } - SsdMobilenetv1.prototype.forwardInput = function (input) { - var params = this.params; - if (!params) { - throw new Error('SsdMobilenetv1 - load model before inference'); - } - return tidy(function () { - var batchTensor = input.toBatchTensor(512, false).toFloat(); - var x = sub(mul(batchTensor, scalar(0.007843137718737125)), scalar(1)); - var features = mobileNetV1(x, params.mobilenetv1); - var _a = predictionLayer(features.out, features.conv11, params.prediction_layer), boxPredictions = _a.boxPredictions, classPredictions = _a.classPredictions; - return outputLayer(boxPredictions, classPredictions, params.output_layer); - }); - }; - SsdMobilenetv1.prototype.forward = function (input) { - return __awaiter$1(this, void 0, void 0, function () { - var _a; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; - } - }); - }); - }; - SsdMobilenetv1.prototype.locateFaces = function (input, options) { - if (options === void 0) { options = {}; } - return __awaiter$1(this, void 0, void 0, function () { - var _a, maxResults, minConfidence, netInput, _b, _boxes, _scores, boxes, scores, i, scoresData, _c, _d, iouThreshold, indices, reshapedDims, inputSize, padX, padY, boxesData, results; - return __generator$1(this, function (_e) { - switch (_e.label) { - case 0: - _a = new SsdMobilenetv1Options(options), maxResults = _a.maxResults, minConfidence = _a.minConfidence; - return [4 /*yield*/, toNetInput(input)]; - case 1: - netInput = _e.sent(); - _b = this.forwardInput(netInput), _boxes = _b.boxes, _scores = _b.scores; - boxes = _boxes[0]; - scores = _scores[0]; - for (i = 1; i < _boxes.length; i++) { - _boxes[i].dispose(); - _scores[i].dispose(); - } - _d = (_c = Array).from; - return [4 /*yield*/, scores.data()]; - case 2: - scoresData = _d.apply(_c, [_e.sent()]); - iouThreshold = 0.5; - indices = nonMaxSuppression$2(boxes, scoresData, maxResults, iouThreshold, minConfidence); - reshapedDims = netInput.getReshapedInputDimensions(0); - inputSize = netInput.inputSize; - padX = inputSize / reshapedDims.width; - padY = inputSize / reshapedDims.height; - boxesData = boxes.arraySync(); - results = indices - .map(function (idx) { - var _a = [ - Math.max(0, boxesData[idx][0]), - Math.min(1.0, boxesData[idx][2]) - ].map(function (val) { return val * padY; }), top = _a[0], bottom = _a[1]; - var _b = [ - Math.max(0, boxesData[idx][1]), - Math.min(1.0, boxesData[idx][3]) - ].map(function (val) { return val * padX; }), left = _b[0], right = _b[1]; - return new FaceDetection(scoresData[idx], new Rect(left, top, right - left, bottom - top), { - height: netInput.getInputHeight(0), - width: netInput.getInputWidth(0) - }); - }); - boxes.dispose(); - scores.dispose(); - return [2 /*return*/, results]; - } - }); - }); - }; - SsdMobilenetv1.prototype.getDefaultModelName = function () { - return 'ssd_mobilenetv1_model'; - }; - SsdMobilenetv1.prototype.extractParamsFromWeigthMap = function (weightMap) { - return extractParamsFromWeigthMap$4(weightMap); - }; - SsdMobilenetv1.prototype.extractParams = function (weights) { - return extractParams$4(weights); - }; - return SsdMobilenetv1; - }(NeuralNetwork)); - - function createSsdMobilenetv1(weights) { - var net = new SsdMobilenetv1(); - net.extractWeights(weights); - return net; - } - function createFaceDetectionNet(weights) { - return createSsdMobilenetv1(weights); - } - // alias for backward compatibily - var FaceDetectionNet = /** @class */ (function (_super) { - __extends$1(FaceDetectionNet, _super); - function FaceDetectionNet() { - return _super !== null && _super.apply(this, arguments) || this; - } - return FaceDetectionNet; - }(SsdMobilenetv1)); - - var TinyFaceDetectorOptions = /** @class */ (function (_super) { - __extends$1(TinyFaceDetectorOptions, _super); - function TinyFaceDetectorOptions() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this._name = 'TinyFaceDetectorOptions'; - return _this; - } - return TinyFaceDetectorOptions; - }(TinyYolov2Options)); - - var ComposableTask = /** @class */ (function () { - function ComposableTask() { - } - ComposableTask.prototype.then = function (onfulfilled) { - return __awaiter$1(this, void 0, void 0, function () { - var _a; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - _a = onfulfilled; - return [4 /*yield*/, this.run()]; - case 1: return [2 /*return*/, _a.apply(void 0, [_b.sent()])]; - } - }); - }); - }; - ComposableTask.prototype.run = function () { - return __awaiter$1(this, void 0, void 0, function () { - return __generator$1(this, function (_a) { - throw new Error('ComposableTask - run is not implemented'); - }); - }); - }; - return ComposableTask; - }()); - - function bgrToRgbTensor(tensor) { - return tidy(function () { return stack(unstack(tensor, 3).reverse(), 3); }); - } - - var CELL_STRIDE = 2; - var CELL_SIZE = 12; - - function extractorsFactory$7(extractWeights, paramMappings) { - var extractConvParams = extractConvParamsFactory(extractWeights, paramMappings); - var extractFCParams = extractFCParamsFactory(extractWeights, paramMappings); - function extractPReluParams(size, paramPath) { - var alpha = tensor1d(extractWeights(size)); - paramMappings.push({ paramPath: paramPath }); - return alpha; - } - function extractSharedParams(numFilters, mappedPrefix, isRnet) { - if (isRnet === void 0) { isRnet = false; } - var conv1 = extractConvParams(numFilters[0], numFilters[1], 3, mappedPrefix + "/conv1"); - var prelu1_alpha = extractPReluParams(numFilters[1], mappedPrefix + "/prelu1_alpha"); - var conv2 = extractConvParams(numFilters[1], numFilters[2], 3, mappedPrefix + "/conv2"); - var prelu2_alpha = extractPReluParams(numFilters[2], mappedPrefix + "/prelu2_alpha"); - var conv3 = extractConvParams(numFilters[2], numFilters[3], isRnet ? 2 : 3, mappedPrefix + "/conv3"); - var prelu3_alpha = extractPReluParams(numFilters[3], mappedPrefix + "/prelu3_alpha"); - return { conv1: conv1, prelu1_alpha: prelu1_alpha, conv2: conv2, prelu2_alpha: prelu2_alpha, conv3: conv3, prelu3_alpha: prelu3_alpha }; - } - function extractPNetParams() { - var sharedParams = extractSharedParams([3, 10, 16, 32], 'pnet'); - var conv4_1 = extractConvParams(32, 2, 1, 'pnet/conv4_1'); - var conv4_2 = extractConvParams(32, 4, 1, 'pnet/conv4_2'); - return __assign$1({}, sharedParams, { conv4_1: conv4_1, conv4_2: conv4_2 }); - } - function extractRNetParams() { - var sharedParams = extractSharedParams([3, 28, 48, 64], 'rnet', true); - var fc1 = extractFCParams(576, 128, 'rnet/fc1'); - var prelu4_alpha = extractPReluParams(128, 'rnet/prelu4_alpha'); - var fc2_1 = extractFCParams(128, 2, 'rnet/fc2_1'); - var fc2_2 = extractFCParams(128, 4, 'rnet/fc2_2'); - return __assign$1({}, sharedParams, { fc1: fc1, prelu4_alpha: prelu4_alpha, fc2_1: fc2_1, fc2_2: fc2_2 }); - } - function extractONetParams() { - var sharedParams = extractSharedParams([3, 32, 64, 64], 'onet'); - var conv4 = extractConvParams(64, 128, 2, 'onet/conv4'); - var prelu4_alpha = extractPReluParams(128, 'onet/prelu4_alpha'); - var fc1 = extractFCParams(1152, 256, 'onet/fc1'); - var prelu5_alpha = extractPReluParams(256, 'onet/prelu5_alpha'); - var fc2_1 = extractFCParams(256, 2, 'onet/fc2_1'); - var fc2_2 = extractFCParams(256, 4, 'onet/fc2_2'); - var fc2_3 = extractFCParams(256, 10, 'onet/fc2_3'); - return __assign$1({}, sharedParams, { conv4: conv4, prelu4_alpha: prelu4_alpha, fc1: fc1, prelu5_alpha: prelu5_alpha, fc2_1: fc2_1, fc2_2: fc2_2, fc2_3: fc2_3 }); - } - return { - extractPNetParams: extractPNetParams, - extractRNetParams: extractRNetParams, - extractONetParams: extractONetParams - }; - } - function extractParams$5(weights) { - var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var paramMappings = []; - var _b = extractorsFactory$7(extractWeights, paramMappings), extractPNetParams = _b.extractPNetParams, extractRNetParams = _b.extractRNetParams, extractONetParams = _b.extractONetParams; - var pnet = extractPNetParams(); - var rnet = extractRNetParams(); - var onet = extractONetParams(); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { params: { pnet: pnet, rnet: rnet, onet: onet }, paramMappings: paramMappings }; - } - - function extractorsFactory$8(weightMap, paramMappings) { - var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); - function extractConvParams(prefix) { - var filters = extractWeightEntry(prefix + "/weights", 4, prefix + "/filters"); - var bias = extractWeightEntry(prefix + "/bias", 1); - return { filters: filters, bias: bias }; - } - function extractFCParams(prefix) { - var weights = extractWeightEntry(prefix + "/weights", 2); - var bias = extractWeightEntry(prefix + "/bias", 1); - return { weights: weights, bias: bias }; - } - function extractPReluParams(paramPath) { - return extractWeightEntry(paramPath, 1); - } - function extractSharedParams(prefix) { - var conv1 = extractConvParams(prefix + "/conv1"); - var prelu1_alpha = extractPReluParams(prefix + "/prelu1_alpha"); - var conv2 = extractConvParams(prefix + "/conv2"); - var prelu2_alpha = extractPReluParams(prefix + "/prelu2_alpha"); - var conv3 = extractConvParams(prefix + "/conv3"); - var prelu3_alpha = extractPReluParams(prefix + "/prelu3_alpha"); - return { conv1: conv1, prelu1_alpha: prelu1_alpha, conv2: conv2, prelu2_alpha: prelu2_alpha, conv3: conv3, prelu3_alpha: prelu3_alpha }; - } - function extractPNetParams() { - var sharedParams = extractSharedParams('pnet'); - var conv4_1 = extractConvParams('pnet/conv4_1'); - var conv4_2 = extractConvParams('pnet/conv4_2'); - return __assign$1({}, sharedParams, { conv4_1: conv4_1, conv4_2: conv4_2 }); - } - function extractRNetParams() { - var sharedParams = extractSharedParams('rnet'); - var fc1 = extractFCParams('rnet/fc1'); - var prelu4_alpha = extractPReluParams('rnet/prelu4_alpha'); - var fc2_1 = extractFCParams('rnet/fc2_1'); - var fc2_2 = extractFCParams('rnet/fc2_2'); - return __assign$1({}, sharedParams, { fc1: fc1, prelu4_alpha: prelu4_alpha, fc2_1: fc2_1, fc2_2: fc2_2 }); - } - function extractONetParams() { - var sharedParams = extractSharedParams('onet'); - var conv4 = extractConvParams('onet/conv4'); - var prelu4_alpha = extractPReluParams('onet/prelu4_alpha'); - var fc1 = extractFCParams('onet/fc1'); - var prelu5_alpha = extractPReluParams('onet/prelu5_alpha'); - var fc2_1 = extractFCParams('onet/fc2_1'); - var fc2_2 = extractFCParams('onet/fc2_2'); - var fc2_3 = extractFCParams('onet/fc2_3'); - return __assign$1({}, sharedParams, { conv4: conv4, prelu4_alpha: prelu4_alpha, fc1: fc1, prelu5_alpha: prelu5_alpha, fc2_1: fc2_1, fc2_2: fc2_2, fc2_3: fc2_3 }); - } - return { - extractPNetParams: extractPNetParams, - extractRNetParams: extractRNetParams, - extractONetParams: extractONetParams - }; - } - function extractParamsFromWeigthMap$5(weightMap) { - var paramMappings = []; - var _a = extractorsFactory$8(weightMap, paramMappings), extractPNetParams = _a.extractPNetParams, extractRNetParams = _a.extractRNetParams, extractONetParams = _a.extractONetParams; - var pnet = extractPNetParams(); - var rnet = extractRNetParams(); - var onet = extractONetParams(); - disposeUnusedWeightTensors(weightMap, paramMappings); - return { params: { pnet: pnet, rnet: rnet, onet: onet }, paramMappings: paramMappings }; - } - - function getSizesForScale(scale, _a) { - var height = _a[0], width = _a[1]; - return { - height: Math.floor(height * scale), - width: Math.floor(width * scale) - }; - } - - function pyramidDown(minFaceSize, scaleFactor, dims) { - var height = dims[0], width = dims[1]; - var m = CELL_SIZE / minFaceSize; - var scales = []; - var minLayer = Math.min(height, width) * m; - var exp = 0; - while (minLayer >= 12) { - scales.push(m * Math.pow(scaleFactor, exp)); - minLayer = minLayer * scaleFactor; - exp += 1; - } - return scales; - } - - var MtcnnBox = /** @class */ (function (_super) { - __extends$1(MtcnnBox, _super); - function MtcnnBox(left, top, right, bottom) { - return _super.call(this, { left: left, top: top, right: right, bottom: bottom }, true) || this; - } - return MtcnnBox; - }(Box)); - - function normalize$1(x) { - return tidy(function () { return mul(sub(x, scalar(127.5)), scalar(0.0078125)); }); - } - - function prelu$1(x, alpha) { - return tidy(function () { - return add(relu(x), mul(alpha, neg(relu(neg(x))))); - }); - } - - function sharedLayer(x, params, isPnet) { - if (isPnet === void 0) { isPnet = false; } - return tidy(function () { - var out = convLayer(x, params.conv1, 'valid'); - out = prelu$1(out, params.prelu1_alpha); - out = maxPool(out, isPnet ? [2, 2] : [3, 3], [2, 2], 'same'); - out = convLayer(out, params.conv2, 'valid'); - out = prelu$1(out, params.prelu2_alpha); - out = isPnet ? out : maxPool(out, [3, 3], [2, 2], 'valid'); - out = convLayer(out, params.conv3, 'valid'); - out = prelu$1(out, params.prelu3_alpha); - return out; - }); - } - - function PNet(x, params) { - return tidy(function () { - var out = sharedLayer(x, params, true); - var conv = convLayer(out, params.conv4_1, 'valid'); - var max$1 = expandDims(max(conv, 3), 3); - var prob = softmax(sub(conv, max$1), 3); - var regions = convLayer(out, params.conv4_2, 'valid'); - return { prob: prob, regions: regions }; - }); - } - - function rescaleAndNormalize(x, scale) { - return tidy(function () { - var _a = getSizesForScale(scale, x.shape.slice(1)), height = _a.height, width = _a.width; - var resized = image_ops.resizeBilinear(x, [height, width]); - var normalized = normalize$1(resized); - return transpose(normalized, [0, 2, 1, 3]); - }); - } - function extractBoundingBoxes(scoresTensor, regionsTensor, scale, scoreThreshold) { - // TODO: fix this!, maybe better to use tf.gather here - var indices = []; - var scoresData = scoresTensor.arraySync(); - for (var y = 0; y < scoresTensor.shape[0]; y++) { - for (var x = 0; x < scoresTensor.shape[1]; x++) { - if (scoresData[y][x] >= scoreThreshold) { - indices.push(new Point(x, y)); - } - } - } - var boundingBoxes = indices.map(function (idx) { - var cell = new BoundingBox(Math.round((idx.y * CELL_STRIDE + 1) / scale), Math.round((idx.x * CELL_STRIDE + 1) / scale), Math.round((idx.y * CELL_STRIDE + CELL_SIZE) / scale), Math.round((idx.x * CELL_STRIDE + CELL_SIZE) / scale)); - var score = scoresData[idx.y][idx.x]; - var regionsData = regionsTensor.arraySync(); - var region = new MtcnnBox(regionsData[idx.y][idx.x][0], regionsData[idx.y][idx.x][1], regionsData[idx.y][idx.x][2], regionsData[idx.y][idx.x][3]); - return { - cell: cell, - score: score, - region: region - }; - }); - return boundingBoxes; - } - function stage1(imgTensor, scales, scoreThreshold, params, stats) { - stats.stage1 = []; - var pnetOutputs = scales.map(function (scale) { return tidy(function () { - var statsForScale = { scale: scale }; - var resized = rescaleAndNormalize(imgTensor, scale); - var ts = Date.now(); - var _a = PNet(resized, params), prob = _a.prob, regions = _a.regions; - statsForScale.pnet = Date.now() - ts; - var scoresTensor = unstack(unstack(prob, 3)[1])[0]; - var regionsTensor = unstack(regions)[0]; - return { - scoresTensor: scoresTensor, - regionsTensor: regionsTensor, - scale: scale, - statsForScale: statsForScale - }; - }); }); - var boxesForScale = pnetOutputs.map(function (_a) { - var scoresTensor = _a.scoresTensor, regionsTensor = _a.regionsTensor, scale = _a.scale, statsForScale = _a.statsForScale; - var boundingBoxes = extractBoundingBoxes(scoresTensor, regionsTensor, scale, scoreThreshold); - scoresTensor.dispose(); - regionsTensor.dispose(); - if (!boundingBoxes.length) { - stats.stage1.push(statsForScale); - return []; - } - var ts = Date.now(); - var indices = nonMaxSuppression$1(boundingBoxes.map(function (bbox) { return bbox.cell; }), boundingBoxes.map(function (bbox) { return bbox.score; }), 0.5); - statsForScale.nms = Date.now() - ts; - statsForScale.numBoxes = indices.length; - stats.stage1.push(statsForScale); - return indices.map(function (boxIdx) { return boundingBoxes[boxIdx]; }); - }); - var allBoxes = boxesForScale.reduce(function (all, boxes) { return all.concat(boxes); }, []); - var finalBoxes = []; - var finalScores = []; - if (allBoxes.length > 0) { - var ts = Date.now(); - var indices = nonMaxSuppression$1(allBoxes.map(function (bbox) { return bbox.cell; }), allBoxes.map(function (bbox) { return bbox.score; }), 0.7); - stats.stage1_nms = Date.now() - ts; - finalScores = indices.map(function (idx) { return allBoxes[idx].score; }); - finalBoxes = indices - .map(function (idx) { return allBoxes[idx]; }) - .map(function (_a) { - var cell = _a.cell, region = _a.region; - return new BoundingBox(cell.left + (region.left * cell.width), cell.top + (region.top * cell.height), cell.right + (region.right * cell.width), cell.bottom + (region.bottom * cell.height)).toSquare().round(); - }); - } - return { - boxes: finalBoxes, - scores: finalScores - }; - } - - function extractImagePatches(img, boxes, _a) { - var width = _a.width, height = _a.height; - return __awaiter$1(this, void 0, void 0, function () { - var imgCtx, bitmaps, imagePatchesDatas; - var _this = this; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - imgCtx = getContext2dOrThrow(img); - return [4 /*yield*/, Promise.all(boxes.map(function (box) { return __awaiter$1(_this, void 0, void 0, function () { - var _a, y, ey, x, ex, fromX, fromY, imgData; - return __generator$1(this, function (_b) { - _a = box.padAtBorders(img.height, img.width), y = _a.y, ey = _a.ey, x = _a.x, ex = _a.ex; - fromX = x - 1; - fromY = y - 1; - imgData = imgCtx.getImageData(fromX, fromY, (ex - fromX), (ey - fromY)); - return [2 /*return*/, env.isNodejs() ? createCanvasFromMedia(imgData) : createImageBitmap(imgData)]; - }); - }); }))]; - case 1: - bitmaps = _b.sent(); - imagePatchesDatas = []; - bitmaps.forEach(function (bmp) { - var patch = createCanvas({ width: width, height: height }); - var patchCtx = getContext2dOrThrow(patch); - patchCtx.drawImage(bmp, 0, 0, width, height); - var data = patchCtx.getImageData(0, 0, width, height).data; - var currData = []; - // RGBA -> BGR - for (var i = 0; i < data.length; i += 4) { - currData.push(data[i + 2]); - currData.push(data[i + 1]); - currData.push(data[i]); - } - imagePatchesDatas.push(currData); - }); - return [2 /*return*/, imagePatchesDatas.map(function (data) { - var t = tidy(function () { - var imagePatchTensor = transpose(tensor4d(data, [1, width, height, 3]), [0, 2, 1, 3]).toFloat(); - return normalize$1(imagePatchTensor); - }); - return t; - })]; - } - }); - }); - } - - function RNet(x, params) { - return tidy(function () { - var convOut = sharedLayer(x, params); - var vectorized = reshape(convOut, [convOut.shape[0], params.fc1.weights.shape[0]]); - var fc1 = fullyConnectedLayer(vectorized, params.fc1); - var prelu4 = prelu$1(fc1, params.prelu4_alpha); - var fc2_1 = fullyConnectedLayer(prelu4, params.fc2_1); - var max$1 = expandDims(max(fc2_1, 1), 1); - var prob = softmax(sub(fc2_1, max$1), 1); - var regions = fullyConnectedLayer(prelu4, params.fc2_2); - var scores = unstack(prob, 1)[1]; - return { scores: scores, regions: regions }; - }); - } - - function stage2(img, inputBoxes, scoreThreshold, params, stats) { - return __awaiter$1(this, void 0, void 0, function () { - var ts, rnetInputs, rnetOuts, scoresTensor, scores, _a, _b, indices, filteredBoxes, filteredScores, finalBoxes, finalScores, indicesNms, regions_1; - return __generator$1(this, function (_c) { - switch (_c.label) { - case 0: - ts = Date.now(); - return [4 /*yield*/, extractImagePatches(img, inputBoxes, { width: 24, height: 24 })]; - case 1: - rnetInputs = _c.sent(); - stats.stage2_extractImagePatches = Date.now() - ts; - ts = Date.now(); - rnetOuts = rnetInputs.map(function (rnetInput) { - var out = RNet(rnetInput, params); - rnetInput.dispose(); - return out; - }); - stats.stage2_rnet = Date.now() - ts; - scoresTensor = rnetOuts.length > 1 - ? concat(rnetOuts.map(function (out) { return out.scores; })) - : rnetOuts[0].scores; - _b = (_a = Array).from; - return [4 /*yield*/, scoresTensor.data()]; - case 2: - scores = _b.apply(_a, [_c.sent()]); - scoresTensor.dispose(); - indices = scores - .map(function (score, idx) { return ({ score: score, idx: idx }); }) - .filter(function (c) { return c.score > scoreThreshold; }) - .map(function (_a) { - var idx = _a.idx; - return idx; - }); - filteredBoxes = indices.map(function (idx) { return inputBoxes[idx]; }); - filteredScores = indices.map(function (idx) { return scores[idx]; }); - finalBoxes = []; - finalScores = []; - if (filteredBoxes.length > 0) { - ts = Date.now(); - indicesNms = nonMaxSuppression$1(filteredBoxes, filteredScores, 0.7); - stats.stage2_nms = Date.now() - ts; - regions_1 = indicesNms.map(function (idx) { - var regionsData = rnetOuts[indices[idx]].regions.arraySync(); - return new MtcnnBox(regionsData[0][0], regionsData[0][1], regionsData[0][2], regionsData[0][3]); - }); - finalScores = indicesNms.map(function (idx) { return filteredScores[idx]; }); - finalBoxes = indicesNms.map(function (idx, i) { return filteredBoxes[idx].calibrate(regions_1[i]); }); - } - rnetOuts.forEach(function (t) { - t.regions.dispose(); - t.scores.dispose(); - }); - return [2 /*return*/, { - boxes: finalBoxes, - scores: finalScores - }]; - } - }); - }); - } - - function ONet(x, params) { - return tidy(function () { - var out = sharedLayer(x, params); - out = maxPool(out, [2, 2], [2, 2], 'same'); - out = convLayer(out, params.conv4, 'valid'); - out = prelu$1(out, params.prelu4_alpha); - var vectorized = reshape(out, [out.shape[0], params.fc1.weights.shape[0]]); - var fc1 = fullyConnectedLayer(vectorized, params.fc1); - var prelu5 = prelu$1(fc1, params.prelu5_alpha); - var fc2_1 = fullyConnectedLayer(prelu5, params.fc2_1); - var max$1 = expandDims(max(fc2_1, 1), 1); - var prob = softmax(sub(fc2_1, max$1), 1); - var regions = fullyConnectedLayer(prelu5, params.fc2_2); - var points = fullyConnectedLayer(prelu5, params.fc2_3); - var scores = unstack(prob, 1)[1]; - return { scores: scores, regions: regions, points: points }; - }); - } - - function stage3(img, inputBoxes, scoreThreshold, params, stats) { - return __awaiter$1(this, void 0, void 0, function () { - var ts, onetInputs, onetOuts, scoresTensor, scores, _a, _b, indices, filteredRegions, filteredBoxes, filteredScores, finalBoxes, finalScores, points, indicesNms; - return __generator$1(this, function (_c) { - switch (_c.label) { - case 0: - ts = Date.now(); - return [4 /*yield*/, extractImagePatches(img, inputBoxes, { width: 48, height: 48 })]; - case 1: - onetInputs = _c.sent(); - stats.stage3_extractImagePatches = Date.now() - ts; - ts = Date.now(); - onetOuts = onetInputs.map(function (onetInput) { - var out = ONet(onetInput, params); - onetInput.dispose(); - return out; - }); - stats.stage3_onet = Date.now() - ts; - scoresTensor = onetOuts.length > 1 - ? concat(onetOuts.map(function (out) { return out.scores; })) - : onetOuts[0].scores; - _b = (_a = Array).from; - return [4 /*yield*/, scoresTensor.data()]; - case 2: - scores = _b.apply(_a, [_c.sent()]); - scoresTensor.dispose(); - indices = scores - .map(function (score, idx) { return ({ score: score, idx: idx }); }) - .filter(function (c) { return c.score > scoreThreshold; }) - .map(function (_a) { - var idx = _a.idx; - return idx; - }); - filteredRegions = indices.map(function (idx) { - var regionsData = onetOuts[idx].regions.arraySync(); - return new MtcnnBox(regionsData[0][0], regionsData[0][1], regionsData[0][2], regionsData[0][3]); - }); - filteredBoxes = indices - .map(function (idx, i) { return inputBoxes[idx].calibrate(filteredRegions[i]); }); - filteredScores = indices.map(function (idx) { return scores[idx]; }); - finalBoxes = []; - finalScores = []; - points = []; - if (filteredBoxes.length > 0) { - ts = Date.now(); - indicesNms = nonMaxSuppression$1(filteredBoxes, filteredScores, 0.7, false); - stats.stage3_nms = Date.now() - ts; - finalBoxes = indicesNms.map(function (idx) { return filteredBoxes[idx]; }); - finalScores = indicesNms.map(function (idx) { return filteredScores[idx]; }); - points = indicesNms.map(function (idx, i) { - return Array(5).fill(0).map(function (_, ptIdx) { - var pointsData = onetOuts[idx].points.arraySync(); - return new Point(((pointsData[0][ptIdx] * (finalBoxes[i].width + 1)) + finalBoxes[i].left), ((pointsData[0][ptIdx + 5] * (finalBoxes[i].height + 1)) + finalBoxes[i].top)); - }); - }); - } - onetOuts.forEach(function (t) { - t.regions.dispose(); - t.scores.dispose(); - t.points.dispose(); - }); - return [2 /*return*/, { - boxes: finalBoxes, - scores: finalScores, - points: points - }]; - } - }); - }); - } - - var Mtcnn = /** @class */ (function (_super) { - __extends$1(Mtcnn, _super); - function Mtcnn() { - return _super.call(this, 'Mtcnn') || this; - } - Mtcnn.prototype.forwardInput = function (input, forwardParams) { - if (forwardParams === void 0) { forwardParams = {}; } - return __awaiter$1(this, void 0, void 0, function () { - var params, inputCanvas, stats, tsTotal, imgTensor, onReturn, _a, height, width, _b, minFaceSize, scaleFactor, maxNumScales, scoreThresholds, scaleSteps, scales, ts, out1, out2, out3, results; - return __generator$1(this, function (_c) { - switch (_c.label) { - case 0: - params = this.params; - if (!params) { - throw new Error('Mtcnn - load model before inference'); - } - inputCanvas = input.canvases[0]; - if (!inputCanvas) { - throw new Error('Mtcnn - inputCanvas is not defined, note that passing tensors into Mtcnn.forwardInput is not supported yet.'); - } - stats = {}; - tsTotal = Date.now(); - imgTensor = tidy(function () { - return bgrToRgbTensor(expandDims(browser.fromPixels(inputCanvas)).toFloat()); - }); - onReturn = function (results) { - // dispose tensors on return - imgTensor.dispose(); - stats.total = Date.now() - tsTotal; - return results; - }; - _a = imgTensor.shape.slice(1), height = _a[0], width = _a[1]; - _b = new MtcnnOptions(forwardParams), minFaceSize = _b.minFaceSize, scaleFactor = _b.scaleFactor, maxNumScales = _b.maxNumScales, scoreThresholds = _b.scoreThresholds, scaleSteps = _b.scaleSteps; - scales = (scaleSteps || pyramidDown(minFaceSize, scaleFactor, [height, width])) - .filter(function (scale) { - var sizes = getSizesForScale(scale, [height, width]); - return Math.min(sizes.width, sizes.height) > CELL_SIZE; - }) - .slice(0, maxNumScales); - stats.scales = scales; - stats.pyramid = scales.map(function (scale) { return getSizesForScale(scale, [height, width]); }); - ts = Date.now(); - return [4 /*yield*/, stage1(imgTensor, scales, scoreThresholds[0], params.pnet, stats)]; - case 1: - out1 = _c.sent(); - stats.total_stage1 = Date.now() - ts; - if (!out1.boxes.length) { - return [2 /*return*/, onReturn({ results: [], stats: stats })]; - } - stats.stage2_numInputBoxes = out1.boxes.length; - // using the inputCanvas to extract and resize the image patches, since it is faster - // than doing this on the gpu - ts = Date.now(); - return [4 /*yield*/, stage2(inputCanvas, out1.boxes, scoreThresholds[1], params.rnet, stats)]; - case 2: - out2 = _c.sent(); - stats.total_stage2 = Date.now() - ts; - if (!out2.boxes.length) { - return [2 /*return*/, onReturn({ results: [], stats: stats })]; - } - stats.stage3_numInputBoxes = out2.boxes.length; - ts = Date.now(); - return [4 /*yield*/, stage3(inputCanvas, out2.boxes, scoreThresholds[2], params.onet, stats)]; - case 3: - out3 = _c.sent(); - stats.total_stage3 = Date.now() - ts; - results = out3.boxes.map(function (box, idx) { return extendWithFaceLandmarks(extendWithFaceDetection({}, new FaceDetection(out3.scores[idx], new Rect(box.left / width, box.top / height, box.width / width, box.height / height), { - height: height, - width: width - })), new FaceLandmarks5(out3.points[idx].map(function (pt) { return pt.sub(new Point(box.left, box.top)).div(new Point(box.width, box.height)); }), { width: box.width, height: box.height })); }); - return [2 /*return*/, onReturn({ results: results, stats: stats })]; - } - }); - }); - }; - Mtcnn.prototype.forward = function (input, forwardParams) { - if (forwardParams === void 0) { forwardParams = {}; } - return __awaiter$1(this, void 0, void 0, function () { - var _a; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [4 /*yield*/, _a.apply(this, [_b.sent(), - forwardParams])]; - case 2: return [2 /*return*/, (_b.sent()).results]; - } - }); - }); - }; - Mtcnn.prototype.forwardWithStats = function (input, forwardParams) { - if (forwardParams === void 0) { forwardParams = {}; } - return __awaiter$1(this, void 0, void 0, function () { - var _a; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - _a = this.forwardInput; - return [4 /*yield*/, toNetInput(input)]; - case 1: return [2 /*return*/, _a.apply(this, [_b.sent(), - forwardParams])]; - } - }); - }); - }; - Mtcnn.prototype.getDefaultModelName = function () { - return 'mtcnn_model'; - }; - Mtcnn.prototype.extractParamsFromWeigthMap = function (weightMap) { - return extractParamsFromWeigthMap$5(weightMap); - }; - Mtcnn.prototype.extractParams = function (weights) { - return extractParams$5(weights); - }; - return Mtcnn; - }(NeuralNetwork)); - - var IOU_THRESHOLD = 0.4; - var BOX_ANCHORS = [ - new Point(1.603231, 2.094468), - new Point(6.041143, 7.080126), - new Point(2.882459, 3.518061), - new Point(4.266906, 5.178857), - new Point(9.041765, 10.66308) - ]; - var MEAN_RGB = [117.001, 114.697, 97.404]; - - var TinyFaceDetector = /** @class */ (function (_super) { - __extends$1(TinyFaceDetector, _super); - function TinyFaceDetector() { - var _this = this; - var config = { - withSeparableConvs: true, - iouThreshold: IOU_THRESHOLD, - classes: ['face'], - anchors: BOX_ANCHORS, - meanRgb: MEAN_RGB, - isFirstLayerConv2d: true, - filterSizes: [3, 16, 32, 64, 128, 256, 512] - }; - _this = _super.call(this, config) || this; - return _this; - } - Object.defineProperty(TinyFaceDetector.prototype, "anchors", { - get: function () { - return this.config.anchors; - }, - enumerable: true, - configurable: true - }); - TinyFaceDetector.prototype.locateFaces = function (input, forwardParams) { - return __awaiter$1(this, void 0, void 0, function () { - var objectDetections; - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.detect(input, forwardParams)]; - case 1: - objectDetections = _a.sent(); - return [2 /*return*/, objectDetections.map(function (det) { return new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }); })]; - } - }); - }); - }; - TinyFaceDetector.prototype.getDefaultModelName = function () { - return 'tiny_face_detector_model'; - }; - TinyFaceDetector.prototype.extractParamsFromWeigthMap = function (weightMap) { - return _super.prototype.extractParamsFromWeigthMap.call(this, weightMap); - }; - return TinyFaceDetector; - }(TinyYolov2)); - - var IOU_THRESHOLD$1 = 0.4; - var BOX_ANCHORS$1 = [ - new Point(0.738768, 0.874946), - new Point(2.42204, 2.65704), - new Point(4.30971, 7.04493), - new Point(10.246, 4.59428), - new Point(12.6868, 11.8741) - ]; - var BOX_ANCHORS_SEPARABLE = [ - new Point(1.603231, 2.094468), - new Point(6.041143, 7.080126), - new Point(2.882459, 3.518061), - new Point(4.266906, 5.178857), - new Point(9.041765, 10.66308) - ]; - var MEAN_RGB_SEPARABLE = [117.001, 114.697, 97.404]; - var DEFAULT_MODEL_NAME = 'tiny_yolov2_model'; - var DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model'; - - var TinyYolov2$1 = /** @class */ (function (_super) { - __extends$1(TinyYolov2, _super); - function TinyYolov2(withSeparableConvs) { - if (withSeparableConvs === void 0) { withSeparableConvs = true; } - var _this = this; - var config = Object.assign({}, { - withSeparableConvs: withSeparableConvs, - iouThreshold: IOU_THRESHOLD$1, - classes: ['face'] - }, withSeparableConvs - ? { - anchors: BOX_ANCHORS_SEPARABLE, - meanRgb: MEAN_RGB_SEPARABLE - } - : { - anchors: BOX_ANCHORS$1, - withClassScores: true - }); - _this = _super.call(this, config) || this; - return _this; - } - Object.defineProperty(TinyYolov2.prototype, "withSeparableConvs", { - get: function () { - return this.config.withSeparableConvs; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TinyYolov2.prototype, "anchors", { - get: function () { - return this.config.anchors; - }, - enumerable: true, - configurable: true - }); - TinyYolov2.prototype.locateFaces = function (input, forwardParams) { - return __awaiter$1(this, void 0, void 0, function () { - var objectDetections; - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.detect(input, forwardParams)]; - case 1: - objectDetections = _a.sent(); - return [2 /*return*/, objectDetections.map(function (det) { return new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }); })]; - } - }); - }); - }; - TinyYolov2.prototype.getDefaultModelName = function () { - return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME; - }; - TinyYolov2.prototype.extractParamsFromWeigthMap = function (weightMap) { - return _super.prototype.extractParamsFromWeigthMap.call(this, weightMap); - }; - return TinyYolov2; - }(TinyYolov2)); - - function createTinyYolov2(weights, withSeparableConvs) { - if (withSeparableConvs === void 0) { withSeparableConvs = true; } - var net = new TinyYolov2$1(withSeparableConvs); - net.extractWeights(weights); - return net; - } - - var nets = { - ssdMobilenetv1: new SsdMobilenetv1(), - tinyFaceDetector: new TinyFaceDetector(), - tinyYolov2: new TinyYolov2$1(), - mtcnn: new Mtcnn(), - faceLandmark68Net: new FaceLandmark68Net(), - faceLandmark68TinyNet: new FaceLandmark68TinyNet(), - faceRecognitionNet: new FaceRecognitionNet(), - faceExpressionNet: new FaceExpressionNet() - }; - /** - * Attempts to detect all faces in an image using SSD Mobilenetv1 Network. - * - * @param input The input image. - * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters). - * @returns Bounding box of each face with score. - */ - var ssdMobilenetv1 = function (input, options) { - return nets.ssdMobilenetv1.locateFaces(input, options); - }; - /** - * Attempts to detect all faces in an image using the Tiny Face Detector. - * - * @param input The input image. - * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters). - * @returns Bounding box of each face with score. - */ - var tinyFaceDetector = function (input, options) { - return nets.tinyFaceDetector.locateFaces(input, options); - }; - /** - * Attempts to detect all faces in an image using the Tiny Yolov2 Network. - * - * @param input The input image. - * @param options (optional, default: see TinyYolov2Options constructor for default parameters). - * @returns Bounding box of each face with score. - */ - var tinyYolov2 = function (input, options) { - return nets.tinyYolov2.locateFaces(input, options); - }; - /** - * Attempts to detect all faces in an image and the 5 point face landmarks - * of each detected face using the MTCNN Network. - * - * @param input The input image. - * @param options (optional, default: see MtcnnOptions constructor for default parameters). - * @returns Bounding box of each face with score and 5 point face landmarks. - */ - var mtcnn = function (input, options) { - return nets.mtcnn.forward(input, options); - }; - /** - * Detects the 68 point face landmark positions of the face shown in an image. - * - * @param inputs The face image extracted from the bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns 68 point face landmarks or array thereof in case of batch input. - */ - var detectFaceLandmarks = function (input) { - return nets.faceLandmark68Net.detectLandmarks(input); - }; - /** - * Detects the 68 point face landmark positions of the face shown in an image - * using a tinier version of the 68 point face landmark model, which is slightly - * faster at inference, but also slightly less accurate. - * - * @param inputs The face image extracted from the bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns 68 point face landmarks or array thereof in case of batch input. - */ - var detectFaceLandmarksTiny = function (input) { - return nets.faceLandmark68TinyNet.detectLandmarks(input); - }; - /** - * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image, - * which uniquely represents the features of that persons face. The computed face descriptor can - * be used to measure the similarity between faces, by computing the euclidean distance of two - * face descriptors. - * - * @param inputs The face image extracted from the aligned bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns Face descriptor with 128 entries or array thereof in case of batch input. - */ - var computeFaceDescriptor = function (input) { - return nets.faceRecognitionNet.computeFaceDescriptor(input); - }; - /** - * Recognizes the facial expressions of a face and returns the likelyhood of - * each facial expression. - * - * @param inputs The face image extracted from the bounding box of a face. Can - * also be an array of input images, which will be batch processed. - * @returns An array of facial expressions with corresponding probabilities or array thereof in case of batch input. - */ - var recognizeFaceExpressions = function (input) { - return nets.faceExpressionNet.predictExpressions(input); - }; - var loadSsdMobilenetv1Model = function (url) { return nets.ssdMobilenetv1.load(url); }; - var loadTinyFaceDetectorModel = function (url) { return nets.tinyFaceDetector.load(url); }; - var loadMtcnnModel = function (url) { return nets.mtcnn.load(url); }; - var loadTinyYolov2Model = function (url) { return nets.tinyYolov2.load(url); }; - var loadFaceLandmarkModel = function (url) { return nets.faceLandmark68Net.load(url); }; - var loadFaceLandmarkTinyModel = function (url) { return nets.faceLandmark68TinyNet.load(url); }; - var loadFaceRecognitionModel = function (url) { return nets.faceRecognitionNet.load(url); }; - var loadFaceExpressionModel = function (url) { return nets.faceExpressionNet.load(url); }; - // backward compatibility - var loadFaceDetectionModel = loadSsdMobilenetv1Model; - var locateFaces = ssdMobilenetv1; - var detectLandmarks = detectFaceLandmarks; - - var ComputeFaceDescriptorsTaskBase = /** @class */ (function (_super) { - __extends$1(ComputeFaceDescriptorsTaskBase, _super); - function ComputeFaceDescriptorsTaskBase(parentTask, input) { - var _this = _super.call(this) || this; - _this.parentTask = parentTask; - _this.input = input; - return _this; - } - return ComputeFaceDescriptorsTaskBase; - }(ComposableTask)); - var ComputeAllFaceDescriptorsTask = /** @class */ (function (_super) { - __extends$1(ComputeAllFaceDescriptorsTask, _super); - function ComputeAllFaceDescriptorsTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - ComputeAllFaceDescriptorsTask.prototype.run = function () { - return __awaiter$1(this, void 0, void 0, function () { - var parentResults, alignedRects, alignedFaces, _a, results; - var _this = this; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResults = _b.sent(); - alignedRects = parentResults.map(function (_a) { - var alignedRect = _a.alignedRect; - return alignedRect; - }); - if (!(this.input instanceof Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, extractFaceTensors(this.input, alignedRects)]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, extractFaces(this.input, alignedRects)]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - alignedFaces = _a; - return [4 /*yield*/, Promise.all(parentResults.map(function (parentResult, i) { return __awaiter$1(_this, void 0, void 0, function () { - var descriptor; - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, nets.faceRecognitionNet.computeFaceDescriptor(alignedFaces[i])]; - case 1: - descriptor = _a.sent(); - return [2 /*return*/, extendWithFaceDescriptor(parentResult, descriptor)]; - } - }); - }); }))]; - case 6: - results = _b.sent(); - alignedFaces.forEach(function (f) { return f instanceof Tensor && f.dispose(); }); - return [2 /*return*/, results]; - } - }); - }); - }; - return ComputeAllFaceDescriptorsTask; - }(ComputeFaceDescriptorsTaskBase)); - var ComputeSingleFaceDescriptorTask = /** @class */ (function (_super) { - __extends$1(ComputeSingleFaceDescriptorTask, _super); - function ComputeSingleFaceDescriptorTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - ComputeSingleFaceDescriptorTask.prototype.run = function () { - return __awaiter$1(this, void 0, void 0, function () { - var parentResult, alignedRect, alignedFaces, _a, descriptor; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResult = _b.sent(); - if (!parentResult) { - return [2 /*return*/]; - } - alignedRect = parentResult.alignedRect; - if (!(this.input instanceof Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, extractFaceTensors(this.input, [alignedRect])]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, extractFaces(this.input, [alignedRect])]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - alignedFaces = _a; - return [4 /*yield*/, nets.faceRecognitionNet.computeFaceDescriptor(alignedFaces[0])]; - case 6: - descriptor = _b.sent(); - alignedFaces.forEach(function (f) { return f instanceof Tensor && f.dispose(); }); - return [2 /*return*/, extendWithFaceDescriptor(parentResult, descriptor)]; - } - }); - }); - }; - return ComputeSingleFaceDescriptorTask; - }(ComputeFaceDescriptorsTaskBase)); - - var DetectFaceLandmarksTaskBase = /** @class */ (function (_super) { - __extends$1(DetectFaceLandmarksTaskBase, _super); - function DetectFaceLandmarksTaskBase(parentTask, input, useTinyLandmarkNet) { - var _this = _super.call(this) || this; - _this.parentTask = parentTask; - _this.input = input; - _this.useTinyLandmarkNet = useTinyLandmarkNet; - return _this; - } - Object.defineProperty(DetectFaceLandmarksTaskBase.prototype, "landmarkNet", { - get: function () { - return this.useTinyLandmarkNet - ? nets.faceLandmark68TinyNet - : nets.faceLandmark68Net; - }, - enumerable: true, - configurable: true - }); - return DetectFaceLandmarksTaskBase; - }(ComposableTask)); - var DetectAllFaceLandmarksTask = /** @class */ (function (_super) { - __extends$1(DetectAllFaceLandmarksTask, _super); - function DetectAllFaceLandmarksTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - DetectAllFaceLandmarksTask.prototype.run = function () { - return __awaiter$1(this, void 0, void 0, function () { - var parentResults, detections, faces, _a, faceLandmarksByFace; - var _this = this; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResults = _b.sent(); - detections = parentResults.map(function (res) { return res.detection; }); - if (!(this.input instanceof Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, extractFaceTensors(this.input, detections)]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, extractFaces(this.input, detections)]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - faces = _a; - return [4 /*yield*/, Promise.all(faces.map(function (face) { return _this.landmarkNet.detectLandmarks(face); }))]; - case 6: - faceLandmarksByFace = _b.sent(); - faces.forEach(function (f) { return f instanceof Tensor && f.dispose(); }); - return [2 /*return*/, parentResults.map(function (parentResult, i) { - return extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i]); - })]; - } - }); - }); - }; - DetectAllFaceLandmarksTask.prototype.withFaceDescriptors = function () { - return new ComputeAllFaceDescriptorsTask(this, this.input); - }; - return DetectAllFaceLandmarksTask; - }(DetectFaceLandmarksTaskBase)); - var DetectSingleFaceLandmarksTask = /** @class */ (function (_super) { - __extends$1(DetectSingleFaceLandmarksTask, _super); - function DetectSingleFaceLandmarksTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - DetectSingleFaceLandmarksTask.prototype.run = function () { - return __awaiter$1(this, void 0, void 0, function () { - var parentResult, detection, faces, _a, landmarks; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResult = _b.sent(); - if (!parentResult) { - return [2 /*return*/]; - } - detection = parentResult.detection; - if (!(this.input instanceof Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, extractFaceTensors(this.input, [detection])]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, extractFaces(this.input, [detection])]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - faces = _a; - return [4 /*yield*/, this.landmarkNet.detectLandmarks(faces[0])]; - case 6: - landmarks = _b.sent(); - faces.forEach(function (f) { return f instanceof Tensor && f.dispose(); }); - return [2 /*return*/, extendWithFaceLandmarks(parentResult, landmarks)]; - } - }); - }); - }; - DetectSingleFaceLandmarksTask.prototype.withFaceDescriptor = function () { - return new ComputeSingleFaceDescriptorTask(this, this.input); - }; - return DetectSingleFaceLandmarksTask; - }(DetectFaceLandmarksTaskBase)); - - var PredictFaceExpressionsTaskBase = /** @class */ (function (_super) { - __extends$1(PredictFaceExpressionsTaskBase, _super); - function PredictFaceExpressionsTaskBase(parentTask, input) { - var _this = _super.call(this) || this; - _this.parentTask = parentTask; - _this.input = input; - return _this; - } - return PredictFaceExpressionsTaskBase; - }(ComposableTask)); - var PredictAllFaceExpressionsTask = /** @class */ (function (_super) { - __extends$1(PredictAllFaceExpressionsTask, _super); - function PredictAllFaceExpressionsTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - PredictAllFaceExpressionsTask.prototype.run = function () { - return __awaiter$1(this, void 0, void 0, function () { - var parentResults, detections, faces, _a, faceExpressionsByFace; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResults = _b.sent(); - detections = parentResults.map(function (parentResult) { return parentResult.detection; }); - if (!(this.input instanceof Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, extractFaceTensors(this.input, detections)]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, extractFaces(this.input, detections)]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - faces = _a; - return [4 /*yield*/, Promise.all(faces.map(function (face) { return nets.faceExpressionNet.predictExpressions(face); }))]; - case 6: - faceExpressionsByFace = _b.sent(); - faces.forEach(function (f) { return f instanceof Tensor && f.dispose(); }); - return [2 /*return*/, parentResults.map(function (parentResult, i) { return extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]); })]; - } - }); - }); - }; - PredictAllFaceExpressionsTask.prototype.withFaceLandmarks = function () { - return new DetectAllFaceLandmarksTask(this, this.input, false); - }; - return PredictAllFaceExpressionsTask; - }(PredictFaceExpressionsTaskBase)); - var PredictSingleFaceExpressionTask = /** @class */ (function (_super) { - __extends$1(PredictSingleFaceExpressionTask, _super); - function PredictSingleFaceExpressionTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - PredictSingleFaceExpressionTask.prototype.run = function () { - return __awaiter$1(this, void 0, void 0, function () { - var parentResult, detection, faces, _a, faceExpressions; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.parentTask]; - case 1: - parentResult = _b.sent(); - if (!parentResult) { - return [2 /*return*/]; - } - detection = parentResult.detection; - if (!(this.input instanceof Tensor)) return [3 /*break*/, 3]; - return [4 /*yield*/, extractFaceTensors(this.input, [detection])]; - case 2: - _a = _b.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, extractFaces(this.input, [detection])]; - case 4: - _a = _b.sent(); - _b.label = 5; - case 5: - faces = _a; - return [4 /*yield*/, nets.faceExpressionNet.predictExpressions(faces[0])]; - case 6: - faceExpressions = _b.sent(); - faces.forEach(function (f) { return f instanceof Tensor && f.dispose(); }); - return [2 /*return*/, extendWithFaceExpressions(parentResult, faceExpressions)]; - } - }); - }); - }; - PredictSingleFaceExpressionTask.prototype.withFaceLandmarks = function () { - return new DetectSingleFaceLandmarksTask(this, this.input, false); - }; - return PredictSingleFaceExpressionTask; - }(PredictFaceExpressionsTaskBase)); - - var DetectFacesTaskBase = /** @class */ (function (_super) { - __extends$1(DetectFacesTaskBase, _super); - function DetectFacesTaskBase(input, options) { - if (options === void 0) { options = new SsdMobilenetv1Options(); } - var _this = _super.call(this) || this; - _this.input = input; - _this.options = options; - return _this; - } - return DetectFacesTaskBase; - }(ComposableTask)); - var DetectAllFacesTask = /** @class */ (function (_super) { - __extends$1(DetectAllFacesTask, _super); - function DetectAllFacesTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - DetectAllFacesTask.prototype.run = function () { - return __awaiter$1(this, void 0, void 0, function () { - var _a, input, options, faceDetectionFunction; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - _a = this, input = _a.input, options = _a.options; - if (!(options instanceof MtcnnOptions)) return [3 /*break*/, 2]; - return [4 /*yield*/, nets.mtcnn.forward(input, options)]; - case 1: return [2 /*return*/, (_b.sent()) - .map(function (result) { return result.detection; })]; - case 2: - faceDetectionFunction = options instanceof TinyFaceDetectorOptions - ? function (input) { return nets.tinyFaceDetector.locateFaces(input, options); } - : (options instanceof SsdMobilenetv1Options - ? function (input) { return nets.ssdMobilenetv1.locateFaces(input, options); } - : (options instanceof TinyYolov2Options - ? function (input) { return nets.tinyYolov2.locateFaces(input, options); } - : null)); - if (!faceDetectionFunction) { - throw new Error('detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options'); - } - return [2 /*return*/, faceDetectionFunction(input)]; - } - }); - }); - }; - DetectAllFacesTask.prototype.runAndExtendWithFaceDetections = function () { - var _this = this; - return new Promise(function (res) { return __awaiter$1(_this, void 0, void 0, function () { - var detections; - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.run()]; - case 1: - detections = _a.sent(); - return [2 /*return*/, res(detections.map(function (detection) { return extendWithFaceDetection({}, detection); }))]; - } - }); - }); }); - }; - DetectAllFacesTask.prototype.withFaceLandmarks = function (useTinyLandmarkNet) { - if (useTinyLandmarkNet === void 0) { useTinyLandmarkNet = false; } - return new DetectAllFaceLandmarksTask(this.runAndExtendWithFaceDetections(), this.input, useTinyLandmarkNet); - }; - DetectAllFacesTask.prototype.withFaceExpressions = function () { - return new PredictAllFaceExpressionsTask(this.runAndExtendWithFaceDetections(), this.input); - }; - return DetectAllFacesTask; - }(DetectFacesTaskBase)); - var DetectSingleFaceTask = /** @class */ (function (_super) { - __extends$1(DetectSingleFaceTask, _super); - function DetectSingleFaceTask() { - return _super !== null && _super.apply(this, arguments) || this; - } - DetectSingleFaceTask.prototype.run = function () { - return __awaiter$1(this, void 0, void 0, function () { - var faceDetections, faceDetectionWithHighestScore; - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, new DetectAllFacesTask(this.input, this.options)]; - case 1: - faceDetections = _a.sent(); - faceDetectionWithHighestScore = faceDetections[0]; - faceDetections.forEach(function (faceDetection) { - if (faceDetection.score > faceDetectionWithHighestScore.score) { - faceDetectionWithHighestScore = faceDetection; - } - }); - return [2 /*return*/, faceDetectionWithHighestScore]; - } - }); - }); - }; - DetectSingleFaceTask.prototype.runAndExtendWithFaceDetection = function () { - var _this = this; - return new Promise(function (res) { return __awaiter$1(_this, void 0, void 0, function () { - var detection; - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.run()]; - case 1: - detection = _a.sent(); - return [2 /*return*/, res(detection ? extendWithFaceDetection({}, detection) : undefined)]; - } - }); - }); }); - }; - DetectSingleFaceTask.prototype.withFaceLandmarks = function (useTinyLandmarkNet) { - if (useTinyLandmarkNet === void 0) { useTinyLandmarkNet = false; } - return new DetectSingleFaceLandmarksTask(this.runAndExtendWithFaceDetection(), this.input, useTinyLandmarkNet); - }; - DetectSingleFaceTask.prototype.withFaceExpressions = function () { - return new PredictSingleFaceExpressionTask(this.runAndExtendWithFaceDetection(), this.input); - }; - return DetectSingleFaceTask; - }(DetectFacesTaskBase)); - - function detectSingleFace(input, options) { - if (options === void 0) { options = new SsdMobilenetv1Options(); } - return new DetectSingleFaceTask(input, options); - } - function detectAllFaces(input, options) { - if (options === void 0) { options = new SsdMobilenetv1Options(); } - return new DetectAllFacesTask(input, options); - } - - // export allFaces API for backward compatibility - function allFacesSsdMobilenetv1(input, minConfidence) { - return __awaiter$1(this, void 0, void 0, function () { - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, detectAllFaces(input, new SsdMobilenetv1Options(minConfidence ? { minConfidence: minConfidence } : {})) - .withFaceLandmarks() - .withFaceDescriptors()]; - case 1: return [2 /*return*/, _a.sent()]; - } - }); - }); - } - function allFacesTinyYolov2(input, forwardParams) { - if (forwardParams === void 0) { forwardParams = {}; } - return __awaiter$1(this, void 0, void 0, function () { - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, detectAllFaces(input, new TinyYolov2Options(forwardParams)) - .withFaceLandmarks() - .withFaceDescriptors()]; - case 1: return [2 /*return*/, _a.sent()]; - } - }); - }); - } - function allFacesMtcnn(input, forwardParams) { - if (forwardParams === void 0) { forwardParams = {}; } - return __awaiter$1(this, void 0, void 0, function () { - return __generator$1(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, detectAllFaces(input, new MtcnnOptions(forwardParams)) - .withFaceLandmarks() - .withFaceDescriptors()]; - case 1: return [2 /*return*/, _a.sent()]; - } - }); - }); - } - var allFaces = allFacesSsdMobilenetv1; - - function euclideanDistance(arr1, arr2) { - if (arr1.length !== arr2.length) - throw new Error('euclideanDistance: arr1.length !== arr2.length'); - var desc1 = Array.from(arr1); - var desc2 = Array.from(arr2); - return Math.sqrt(desc1 - .map(function (val, i) { return val - desc2[i]; }) - .reduce(function (res, diff) { return res + Math.pow(diff, 2); }, 0)); - } - - var FaceMatcher = /** @class */ (function () { - function FaceMatcher(inputs, distanceThreshold) { - if (distanceThreshold === void 0) { distanceThreshold = 0.6; } - this._distanceThreshold = distanceThreshold; - var inputArray = Array.isArray(inputs) ? inputs : [inputs]; - if (!inputArray.length) { - throw new Error("FaceRecognizer.constructor - expected atleast one input"); - } - var count = 1; - var createUniqueLabel = function () { return "person " + count++; }; - this._labeledDescriptors = inputArray.map(function (desc) { - if (desc instanceof LabeledFaceDescriptors) { - return desc; - } - if (desc instanceof Float32Array) { - return new LabeledFaceDescriptors(createUniqueLabel(), [desc]); - } - if (desc.descriptor && desc.descriptor instanceof Float32Array) { - return new LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]); - } - throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>"); - }); - } - Object.defineProperty(FaceMatcher.prototype, "labeledDescriptors", { - get: function () { return this._labeledDescriptors; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceMatcher.prototype, "distanceThreshold", { - get: function () { return this._distanceThreshold; }, - enumerable: true, - configurable: true - }); - FaceMatcher.prototype.computeMeanDistance = function (queryDescriptor, descriptors) { - return descriptors - .map(function (d) { return euclideanDistance(d, queryDescriptor); }) - .reduce(function (d1, d2) { return d1 + d2; }, 0) - / (descriptors.length || 1); - }; - FaceMatcher.prototype.matchDescriptor = function (queryDescriptor) { - var _this = this; - return this.labeledDescriptors - .map(function (_a) { - var descriptors = _a.descriptors, label = _a.label; - return new FaceMatch(label, _this.computeMeanDistance(queryDescriptor, descriptors)); - }) - .reduce(function (best, curr) { return best.distance < curr.distance ? best : curr; }); - }; - FaceMatcher.prototype.findBestMatch = function (queryDescriptor) { - var bestMatch = this.matchDescriptor(queryDescriptor); - return bestMatch.distance < this.distanceThreshold - ? bestMatch - : new FaceMatch('unknown', bestMatch.distance); - }; - return FaceMatcher; - }()); - - function createMtcnn(weights) { - var net = new Mtcnn(); - net.extractWeights(weights); - return net; - } - - function createTinyFaceDetector(weights) { - var net = new TinyFaceDetector(); - net.extractWeights(weights); - return net; - } - - function resizeResults(results, _a) { - var width = _a.width, height = _a.height; - if (Array.isArray(results)) { - return results.map(function (obj) { return resizeResults(obj, { width: width, height: height }); }); - } - var hasLandmarks = results['unshiftedLandmarks'] && results['unshiftedLandmarks'] instanceof FaceLandmarks; - var hasDetection = results['detection'] && results['detection'] instanceof FaceDetection; - if (hasLandmarks) { - var resizedDetection = results['detection'].forSize(width, height); - var resizedLandmarks = results['unshiftedLandmarks'].forSize(resizedDetection.box.width, resizedDetection.box.height); - return extendWithFaceLandmarks(extendWithFaceDetection(results, resizedDetection), resizedLandmarks); - } - if (hasDetection) { - return extendWithFaceDetection(results, results['detection'].forSize(width, height)); - } - if (results instanceof FaceLandmarks || results instanceof FaceDetection) { - return results.forSize(width, height); - } - return results; - } - - exports.BoundingBox = BoundingBox; - exports.Box = Box; - exports.BoxWithText = BoxWithText; - exports.ComposableTask = ComposableTask; - exports.ComputeAllFaceDescriptorsTask = ComputeAllFaceDescriptorsTask; - exports.ComputeFaceDescriptorsTaskBase = ComputeFaceDescriptorsTaskBase; - exports.ComputeSingleFaceDescriptorTask = ComputeSingleFaceDescriptorTask; - exports.DetectAllFaceLandmarksTask = DetectAllFaceLandmarksTask; - exports.DetectAllFacesTask = DetectAllFacesTask; - exports.DetectFaceLandmarksTaskBase = DetectFaceLandmarksTaskBase; - exports.DetectFacesTaskBase = DetectFacesTaskBase; - exports.DetectSingleFaceLandmarksTask = DetectSingleFaceLandmarksTask; - exports.DetectSingleFaceTask = DetectSingleFaceTask; - exports.Dimensions = Dimensions; - exports.FaceDetection = FaceDetection; - exports.FaceDetectionNet = FaceDetectionNet; - exports.FaceExpressionNet = FaceExpressionNet; - exports.FaceLandmark68Net = FaceLandmark68Net; - exports.FaceLandmark68TinyNet = FaceLandmark68TinyNet; - exports.FaceLandmarkNet = FaceLandmarkNet; - exports.FaceLandmarks = FaceLandmarks; - exports.FaceLandmarks5 = FaceLandmarks5; - exports.FaceLandmarks68 = FaceLandmarks68; - exports.FaceMatch = FaceMatch; - exports.FaceMatcher = FaceMatcher; - exports.FaceRecognitionNet = FaceRecognitionNet; - exports.LabeledBox = LabeledBox; - exports.LabeledFaceDescriptors = LabeledFaceDescriptors; - exports.Mtcnn = Mtcnn; - exports.MtcnnOptions = MtcnnOptions; - exports.NetInput = NetInput; - exports.NeuralNetwork = NeuralNetwork; - exports.ObjectDetection = ObjectDetection; - exports.Point = Point; - exports.PredictedBox = PredictedBox; - exports.Rect = Rect; - exports.SsdMobilenetv1 = SsdMobilenetv1; - exports.SsdMobilenetv1Options = SsdMobilenetv1Options; - exports.TfjsImageRecognitionBase = tfjsImageRecognitionBase; - exports.TinyFaceDetector = TinyFaceDetector; - exports.TinyFaceDetectorOptions = TinyFaceDetectorOptions; - exports.TinyYolov2 = TinyYolov2$1; - exports.allFaces = allFaces; - exports.allFacesMtcnn = allFacesMtcnn; - exports.allFacesSsdMobilenetv1 = allFacesSsdMobilenetv1; - exports.allFacesTinyYolov2 = allFacesTinyYolov2; - exports.awaitMediaLoaded = awaitMediaLoaded; - exports.bufferToImage = bufferToImage; - exports.computeFaceDescriptor = computeFaceDescriptor; - exports.computeReshapedDimensions = computeReshapedDimensions; - exports.createCanvas = createCanvas; - exports.createCanvasFromMedia = createCanvasFromMedia; - exports.createFaceDetectionNet = createFaceDetectionNet; - exports.createFaceRecognitionNet = createFaceRecognitionNet; - exports.createMtcnn = createMtcnn; - exports.createSsdMobilenetv1 = createSsdMobilenetv1; - exports.createTinyFaceDetector = createTinyFaceDetector; - exports.createTinyYolov2 = createTinyYolov2; - exports.detectAllFaces = detectAllFaces; - exports.detectFaceLandmarks = detectFaceLandmarks; - exports.detectFaceLandmarksTiny = detectFaceLandmarksTiny; - exports.detectLandmarks = detectLandmarks; - exports.detectSingleFace = detectSingleFace; - exports.drawBox = drawBox; - exports.drawContour = drawContour; - exports.drawDetection = drawDetection; - exports.drawFaceExpressions = drawFaceExpressions; - exports.drawLandmarks = drawLandmarks; - exports.drawText = drawText; - exports.env = env; - exports.euclideanDistance = euclideanDistance; - exports.extendWithFaceDescriptor = extendWithFaceDescriptor; - exports.extendWithFaceDetection = extendWithFaceDetection; - exports.extendWithFaceExpressions = extendWithFaceExpressions; - exports.extendWithFaceLandmarks = extendWithFaceLandmarks; - exports.extractFaceTensors = extractFaceTensors; - exports.extractFaces = extractFaces; - exports.faceExpressionLabels = faceExpressionLabels; - exports.fetchImage = fetchImage; - exports.fetchJson = fetchJson; - exports.fetchNetWeights = fetchNetWeights; - exports.fetchOrThrow = fetchOrThrow; - exports.getCenterPoint = getCenterPoint; - exports.getContext2dOrThrow = getContext2dOrThrow; - exports.getDefaultDrawOptions = getDefaultDrawOptions; - exports.getMediaDimensions = getMediaDimensions; - exports.imageTensorToCanvas = imageTensorToCanvas; - exports.imageToSquare = imageToSquare; - exports.inverseSigmoid = inverseSigmoid; - exports.iou = iou; - exports.isDimensions = isDimensions; - exports.isEven = isEven$1; - exports.isFloat = isFloat; - exports.isMediaElement = isMediaElement; - exports.isMediaLoaded = isMediaLoaded; - exports.isTensor = isTensor; - exports.isTensor1D = isTensor1D; - exports.isTensor2D = isTensor2D; - exports.isTensor3D = isTensor3D; - exports.isTensor4D = isTensor4D; - exports.isValidNumber = isValidNumber; - exports.isValidProbablitiy = isValidProbablitiy; - exports.loadFaceDetectionModel = loadFaceDetectionModel; - exports.loadFaceExpressionModel = loadFaceExpressionModel; - exports.loadFaceLandmarkModel = loadFaceLandmarkModel; - exports.loadFaceLandmarkTinyModel = loadFaceLandmarkTinyModel; - exports.loadFaceRecognitionModel = loadFaceRecognitionModel; - exports.loadMtcnnModel = loadMtcnnModel; - exports.loadSsdMobilenetv1Model = loadSsdMobilenetv1Model; - exports.loadTinyFaceDetectorModel = loadTinyFaceDetectorModel; - exports.loadTinyYolov2Model = loadTinyYolov2Model; - exports.loadWeightMap = loadWeightMap; - exports.locateFaces = locateFaces; - exports.mtcnn = mtcnn; - exports.nets = nets; - exports.nonMaxSuppression = nonMaxSuppression$1; - exports.normalize = normalize; - exports.padToSquare = padToSquare; - exports.range = range$1; - exports.recognizeFaceExpressions = recognizeFaceExpressions; - exports.resizeResults = resizeResults; - exports.resolveInput = resolveInput; - exports.round = round$1; - exports.shuffleArray = shuffleArray; - exports.sigmoid = sigmoid$1; - exports.ssdMobilenetv1 = ssdMobilenetv1; - exports.tf = tfCore_esm; - exports.tinyFaceDetector = tinyFaceDetector; - exports.tinyYolov2 = tinyYolov2; - exports.toNetInput = toNetInput; - - Object.defineProperty(exports, '__esModule', { value: true }); - -})); + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.faceapi = global.faceapi || {})); +}(this, (function (exports) { 'use strict'; + + /** + * @license + * Copyright 2020 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ + var t=function(e,n){return (t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e;}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);})(e,n)};function e(e,n){function r(){this.constructor=e;}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r);}function n(t,e,n,r){return new(n||(n=Promise))((function(o,a){function i(t){try{u(r.next(t));}catch(t){a(t);}}function s(t){try{u(r.throw(t));}catch(t){a(t);}}function u(t){t.done?o(t.value):new n((function(e){e(t.value);})).then(i,s);}u((r=r.apply(t,e||[])).next());}))}function r(t,e){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===a[0]||2===a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0;)r=Math.random()*e|0,n=t[--e],t[e]=t[r],t[r]=n;}function x(t,e,n){return Math.max(t,Math.min(e,n))}function b(t){return t%2==0?t:t+1}function w(t){for(var e=0,n=0;n=n?o():setTimeout(i,s);}};i();}))}function _(t,e){for(var n=1,r=-1,o=0;o=0)n*=t[o];else if(-1===t[o]){if(-1!==r)throw Error("Shapes can only have 1 implicit size. Found -1 at dim "+r+" and dim "+o);r=o;}else if(t[o]<0)throw Error("Shapes can not be < 0. Found "+t[o]+" at dim "+o);if(-1===r){if(e>0&&e!==n)throw Error("Size("+e+") must match the product of shape "+t);return t}if(0===n)throw Error("Cannot infer the missing size in ["+t+"] when there are 0 elements");if(e%n!=0)throw Error("The implicit shape can't be a fractional number. Got "+e+" / "+n);var a=t.slice();return a[r]=e/n,a}function O(t,e){var n=e.length;return C((t=null==t?e.map((function(t,e){return e})):[].concat(t)).every((function(t){return t>=-n&&ts)&&1===t[s]&&(n.push(t[s]),r.push(s)),a[i]<=s&&i++;}1!==t[s]&&(n.push(t[s]),r.push(s));}return {newShape:n,keptDims:r}}function B(t,e){var n=null;if(null==t||"float32"===t)n=new Float32Array(e);else if("int32"===t)n=new Int32Array(e);else {if("bool"!==t)throw new Error("Unknown data type "+t);n=new Uint8Array(e);}return n}function P(t,e){var n=null;if(null==t||"float32"===t)n=new Float32Array(e);else if("int32"===t)n=new Int32Array(e);else if("bool"===t)n=new Uint8Array(e);else {if("string"!==t)throw new Error("Unknown data type "+t);n=new Array(e);}return n}function L(t,e){for(var n=0;n=0;--r)n[r]=n[r+1]*t[r+1];return n}function Q(t,e,n){if("string"===e)throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(t)&&(t=I(t)),n&&L(t,e),function(t,e){return t instanceof Float32Array&&"float32"===e||t instanceof Int32Array&&"int32"===e||t instanceof Uint8Array&&"bool"===e}(t,e))return t;if(null==e||"float32"===e||"complex64"===e)return new Float32Array(t);if("int32"===e)return new Int32Array(t);if("bool"===e){for(var r=new Uint8Array(t.length),o=0;o=0,(function(){return "Tensor must have a shape comprised of positive integers but got shape ["+t+"]."}));}));}function rt(t,e){return void 0===e&&(e="utf-8"),e=e||"utf-8",i().platform.encode(t,e)}function ot(t,e){return void 0===e&&(e="utf-8"),e=e||"utf-8",i().platform.decode(t,e)}function at(t,e,n){if(0===e)return 0;if(1===e)return t[0];for(var r=t[t.length-1],o=0;o0?d:"")+" ";}console.log("%c"+s+"\t%c"+i+"\t%c"+u+"D "+l+"\t%c"+c+"\t%c"+h+"\t%c"+a,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue");},t}();var lt=20,ht=3,ft=7;function dt(t,e,n,r){var o=$(e),a=function(t,e,n,r){var o=k(e),a=r[r.length-1],i=new Array(a).fill(0),s=e.length,u="complex64"===n?mt(t):t;if(s>1)for(var c=0;clt){var l=ht*s,h=Array.from(e.slice(0,l)),f=Array.from(e.slice((u-ht)*s,u*s));return "complex64"===r&&(h=mt(h),f=mt(f)),["["+h.map((function(t,e){return pt(t,a[e],r)})).join(", ")+", ..., "+f.map((function(t,e){return pt(t,a[u-ht+e],r)})).join(", ")+"]"]}return ["["+("complex64"===r?mt(e):Array.from(e)).map((function(t,e){return pt(t,a[e],r)})).join(", ")+"]"]}var d=n.slice(1),p=o.slice(1),v=o[0]*s,m=[];if(u>lt){for(var g=0;g=this.shape[n]){var i="Requested out of range element at "+t+". Buffer shape="+this.shape;throw new Error(i)}n++;}for(var s=t[t.length-1],u=0;u0)throw new Error("Backend '"+this.backendName+"' has an internal memory leak ("+i+" data ids) after running '"+t+"'")},t.prototype.runKernelFunc=function(t,e,n,r,o,a,i){var s,u=this;void 0===a&&(a=[]),void 0===i&&(i=[]);var c=[],h=this.isTapeOn();null==r&&(r=null!=this.state.activeScope?this.state.activeScope.name:"");var f,d=function(t){h&&(c=t.map((function(t){return u.keep(u.clone(t))})));},p=this.state.numBytes,v=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);var m,g=l(r,this.backendName);return f=null!=g?function(){var t=u.backend.numDataIds();m=g.kernelFunc({inputs:e,attrs:o,backend:u.backend});var n=Array.isArray(m)?m:[m];u.shouldCheckForMemLeaks()&&u.checkKernelForMemLeak(r,t,n);var s=n.map((function(t){var e=t.dataId,n=t.shape,r=t.dtype;return u.makeTensorFromDataId(e,n,r)})),c=s.filter((function(t,e){return i[e]}));return d((a||[]).slice().concat(c)),s}:function(){var e=u.backend.numDataIds();m=u.tidy((function(){return t(u.backend,d)}));var n=Array.isArray(m)?m:[m];return u.shouldCheckForMemLeaks()&&u.checkKernelForMemLeak(r,e,n),n},this.scopedRun((function(){return u.state.kernelDepth++}),(function(){return u.state.kernelDepth--}),(function(){s=u.ENV.getBool("DEBUG")?u.profiler.profileKernel(r,e,(function(){return f()})):f();})),h&&this.addTapeNode(r,e,s,n,c),this.state.profiling&&this.state.activeProfile.kernels.push({name:r,bytesAdded:this.state.numBytes-p,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-v,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(e).map((function(t){return e[t].shape})),outputShapes:s.map((function(t){return t.shape}))}),Array.isArray(m)?s:s[0]},t.prototype.makeTensor=function(t,e,n,r){if(null==t)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",r=r||this.backend;var o=t;"string"===n&&H(t[0])&&(o=t.map((function(t){return rt(t)})));var a=r.write(o,e,n),i=new wt(e,n,a,this.nextTensorId());if(this.incRef(i,r),"string"===n){var s=this.state.tensorInfo.get(a),u=G(o);this.state.numBytes+=u-s.bytes,s.bytes=u;}return i},t.prototype.makeTensorFromDataId=function(t,e,n,r){var o=new wt(e,n=n||"float32",t,this.nextTensorId());return this.incRef(o,r),o},t.prototype.makeVariable=function(t,e,n,r){void 0===e&&(e=!0),n=n||this.nextVariableId().toString(),null!=r&&r!==t.dtype&&(t=t.asType(r));var o=new St(t,e,n,this.nextTensorId());if(null!=this.state.registeredVariables[o.name])throw new Error("Variable with name "+o.name+" was already registered");return this.state.registeredVariables[o.name]=o,this.incRef(o,this.backend),o},t.prototype.incRef=function(t,e){var n=this.state.tensorInfo.has(t.dataId)?this.state.tensorInfo.get(t.dataId).refCount:0;if(this.state.numTensors++,"string"===t.dtype&&this.state.numStringTensors++,0===n){this.state.numDataBuffers++;var r=0;"complex64"!==t.dtype&&"string"!==t.dtype&&(r=t.size*z(t.dtype)),this.state.tensorInfo.set(t.dataId,{backend:e||this.backend,dtype:t.dtype,shape:t.shape,bytes:r,refCount:0}),this.state.numBytes+=r;}this.state.tensorInfo.get(t.dataId).refCount++,t instanceof St||this.track(t);},t.prototype.disposeTensor=function(t){if(this.state.tensorInfo.has(t.dataId)){this.state.numTensors--,"string"===t.dtype&&this.state.numStringTensors--;var e=this.state.tensorInfo.get(t.dataId);e.refCount<=1?("complex64"!==t.dtype&&(this.state.numBytes-=e.bytes),this.state.numDataBuffers--,e.backend.disposeData(t.dataId),this.state.tensorInfo.delete(t.dataId)):this.state.tensorInfo.get(t.dataId).refCount--;}},t.prototype.disposeVariables=function(){for(var t in this.state.registeredVariables){var e=this.state.registeredVariables[t];this.disposeVariable(e);}},t.prototype.disposeVariable=function(t){this.disposeTensor(t),null!=this.state.registeredVariables[t.name]&&delete this.state.registeredVariables[t.name];},t.prototype.memory=function(){var t=this.backend.memory();return t.numTensors=this.state.numTensors,t.numDataBuffers=this.state.numDataBuffers,t.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(t.unreliable=!0,null==t.reasons&&(t.reasons=[]),t.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),t},t.prototype.profile=function(t){return n(this,void 0,void 0,(function(){var e,n;return r(this,(function(r){return this.state.profiling=!0,e=this.state.numBytes,n=this.state.numTensors,this.state.activeProfile.kernels=[],this.state.activeProfile.result=t(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max.apply(Math,this.state.activeProfile.kernels.map((function(t){return t.totalBytesSnapshot}))),this.state.activeProfile.newBytes=this.state.numBytes-e,this.state.activeProfile.newTensors=this.state.numTensors-n,[2,this.state.activeProfile]}))}))},t.prototype.isTapeOn=function(){return this.state.gradientDepth>0&&0===this.state.kernelDepth},t.prototype.addTapeNode=function(t,e,n,r,o){var a=this,i={id:this.state.nextTapeNodeId++,kernelName:t,inputs:e,outputs:n,saved:o},s=h(t);null!=s&&(r=s.gradFunc),null!=r&&(i.gradient=function(t){return t=t.map((function(t,e){if(null==t){var r=n[e],o=tt(r.size,r.dtype);return a.makeTensor(o,r.shape,r.dtype)}return t})),r(t.length>1?t:t[0],o)}),this.state.activeTape.push(i);},t.prototype.keep=function(t){return t.kept=!0,t},t.prototype.startTape=function(){0===this.state.gradientDepth&&(this.state.activeTape=[]),this.state.gradientDepth++;},t.prototype.endTape=function(){this.state.gradientDepth--;},t.prototype.startScope=function(t){var e={track:[],name:"unnamed scope",id:this.state.nextScopeId++};t&&(e.name=t),this.state.scopeStack.push(e),this.state.activeScope=e;},t.prototype.endScope=function(t){for(var e=this,n=_t(t),r=new Set(n.map((function(t){return t.id}))),o=0;o0,(function(){return "gradients() received an empty list of xs."})),null!=n&&"float32"!==n.dtype)throw new Error("dy must have 'float32' dtype, but has '"+n.dtype+"'");var a=this.scopedRun((function(){return o.startTape()}),(function(){return o.endTape()}),(function(){return o.tidy("forward",t)}));C(a instanceof wt,(function(){return "The result y returned by f() must be a tensor."}));var i=function(t,e,n){for(var r={},o={},a=0;a=0;a--)for(i=(p=t[a]).inputs,l=0;l0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",(function(){var t,r,s={};s[a.id]=null==n?(t=a.shape,r=Z(k(t),"float32"),Lt.makeTensor(r,t,"float32")):n,function(t,e,n){for(var r=function(r){var o=e[r],a=[];if(o.outputs.forEach((function(e){var n=t[e.id];null!=n?a.push(n):a.push(null);})),null==o.gradient)throw new Error("Cannot compute gradient: gradient function not found for "+o.kernelName+".");var i=o.gradient(a),s=function(e){if(!(e in i))throw new Error("Cannot backprop through input "+e+". Available gradients found: "+Object.keys(i)+".");var r=n((function(){return i[e]()}));if("float32"!==r.dtype)throw new Error("Error in gradient for op "+o.kernelName+". The gradient of input "+e+" must have 'float32' dtype, but has '"+r.dtype+"'");var a=o.inputs[e];if(!S(r.shape,a.shape))throw new Error("Error in gradient for op "+o.kernelName+". The gradient of input '"+e+"' has shape '"+r.shape+"', which does not match the shape of the input '"+a.shape+"'");if(null==t[a.id])t[a.id]=r;else {var s=t[a.id];t[a.id]=s.add(r),s.dispose();}};for(var u in o.inputs)s(u);},o=e.length-1;o>=0;o--)r(o);}(s,i,(function(t){return o.tidy(t)}));var u=e.map((function(t){return s[t.id]}));return 0===o.state.gradientDepth&&(o.state.activeTape.forEach((function(t){for(var e=0,n=t.saved;en||e>n){r="["+t+"x"+e+"]";throw new Error("Requested texture size "+r+" greater than WebGL maximum on this browser / GPU "+("["+n+"x"+n+"]")+".")}}function me(t,e){return ke(t,e,(function(){return t.createFramebuffer()}),"Unable to create WebGLFramebuffer.")}function ge(t,e,n,r,o,a,i,s){var u=t.getAttribLocation(n,r);return -1!==u&&(Jt(t,e,(function(){return t.bindBuffer(t.ARRAY_BUFFER,o)})),Jt(t,e,(function(){return t.vertexAttribPointer(u,a,t.FLOAT,!1,i,s)})),Jt(t,e,(function(){return t.enableVertexAttribArray(u)})),!0)}function ye(t,e,n,r){Se(t,r),Jt(t,e,(function(){return t.activeTexture(t.TEXTURE0+r)})),Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,n)}));}function xe(t,e,n,r){return ke(t,e,(function(){return t.getUniformLocation(n,r)}),'uniform "'+r+'" not present in program.')}function be(t,e,n){return t.getUniformLocation(e,n)}function we(t,e,n,r,o,a){Jt(t,e,(function(){return ye(t,e,r,a)})),Jt(t,e,(function(){return t.uniform1i(o,a)}));}function Ce(t,e,n,r){Jt(t,e,(function(){return t.bindFramebuffer(t.FRAMEBUFFER,r)})),Jt(t,e,(function(){return t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,n,0)}));}function Ee(t,e,n){Jt(t,e,(function(){return t.bindFramebuffer(t.FRAMEBUFFER,n)})),Jt(t,e,(function(){return t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,null,0)}));}function Re(t){var e=t.checkFramebufferStatus(t.FRAMEBUFFER);if(e!==t.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+Ie(t,e))}function Ie(t,e){switch(e){case t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return "FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return "FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case t.FRAMEBUFFER_UNSUPPORTED:return "FRAMEBUFFER_UNSUPPORTED";default:return "unknown error "+e}}function ke(t,e,n,r){var o=Jt(t,e,(function(){return n()}));if(null==o)throw new Error(r);return o}function Se(t,e){var n=t.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=e+t.TEXTURE0;if(rn)throw new Error("textureUnit must be in "+("[gl.TEXTURE0, gl.TEXTURE"+n+"]")+".")}function Ae(t,e){return void 0===e&&(e=2),k(t.slice(0,t.length-e))}function De(t){if(0===t.length)throw Error("Cannot get rows and columns of an empty shape array.");return [t.length>1?t[t.length-2]:1,t[t.length-1]]}function Te(t){var e=[1,1,1];return 0===t.length||1===t.length&&1===t[0]||(e=[Ae(t)].concat(De(t))),e}function Ne(t,e){var n;void 0===e&&(e=!1);var r=i().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e&&(r*=2,1===(t=t.map((function(e,n){return n>=t.length-2?b(t[n]):t[n]}))).length&&(t=[2,t[0]])),2!==t.length){var o=M(t);t=o.newShape;}var a=k(t);if(t.length<=1&&a<=r)return [1,a];if(2===t.length&&t[0]<=r&&t[1]<=r)return t;if(3===t.length&&t[0]*t[1]<=r&&t[2]<=r)return [t[0]*t[1],t[2]];if(3===t.length&&t[0]<=r&&t[1]*t[2]<=r)return [t[0],t[1]*t[2]];if(4===t.length&&t[0]*t[1]*t[2]<=r&&t[3]<=r)return [t[0]*t[1]*t[2],t[3]];if(4===t.length&&t[0]<=r&&t[1]*t[2]*t[3]<=r)return [t[0],t[1]*t[2]*t[3]];if(e){var s=Ae(t),u=2,c=2;return t.length&&(u=(n=De(t))[0],c=n[1]),T(a=s*(u/2)*(c/2)).map((function(t){return 2*t}))}return T(a)}function Fe(t){return t%2==0}function _e(t,e){if(S(t=t.slice(-2),e=e.slice(-2)))return !0;if(!t.length||!e.length)return !0;if(0===t[0]||0===t[1]||0===e[0]||0===e[1])return !0;if(t.length!==e.length){var n=t.slice(-1)[0],r=e.slice(-1)[0];if(n===r)return !0;if(Fe(n)&&Fe(r)&&(1===t[0]||1===e[0]))return !0}return t[1]===e[1]&&Fe(t[0])&&Fe(e[0])}function Oe(t){if(null==ie){var e=jt(t);ie=e.getParameter(e.MAX_TEXTURE_SIZE);}return ie}function Me(t){if(null==se){var e=jt(t);se=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS);}return Math.min(16,se)}function Be(t){if(0===t)return 0;var e=jt(t);return Pe(e,"EXT_disjoint_timer_query_webgl2")&&2===t?2:Pe(e,"EXT_disjoint_timer_query")?1:0}function Pe(t,e){return null!=t.getExtension(e)}function Le(t){try{if(null!=jt(t))return !0}catch(t){return !1}return !1}function We(t){if(0===t)return !1;var e=jt(t);if(1===t){if(!Pe(e,"OES_texture_float"))return !1}else if(!Pe(e,"EXT_color_buffer_float"))return !1;return Ve(e)}function Ue(t){if(0===t)return !1;var e=jt(t);if(1!==t){if(Pe(e,"EXT_color_buffer_float"))return Ve(e);if(Pe(e,"EXT_color_buffer_half_float")){var n=e.getExtension("EXT_color_buffer_half_float");return function(t,e){var n=Qt(t,e),r=t.createTexture();t.bindTexture(t.TEXTURE_2D,r);t.texImage2D(t.TEXTURE_2D,0,n.internalFormatHalfFloat,1,1,0,n.textureFormatFloat,n.textureTypeHalfFloat,null);var o=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,o),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,r,0);var a=t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE;return t.bindTexture(t.TEXTURE_2D,null),t.bindFramebuffer(t.FRAMEBUFFER,null),t.deleteTexture(r),t.deleteFramebuffer(o),a}(e,n)}return !1}return !!Pe(e,"OES_texture_float")&&(!!Pe(e,"WEBGL_color_buffer_float")&&Ve(e))}function Ve(t){var e=Qt(t),n=t.createTexture();t.bindTexture(t.TEXTURE_2D,n);t.texImage2D(t.TEXTURE_2D,0,e.internalFormatFloat,1,1,0,e.textureFormatFloat,e.textureTypeFloat,null);var r=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,r),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,n,0);var o=t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE;return t.bindTexture(t.TEXTURE_2D,null),t.bindFramebuffer(t.FRAMEBUFFER,null),t.deleteTexture(n),t.deleteFramebuffer(r),o}function ze(t){return 2===t&&null!=jt(t).fenceSync}var Ge=Object.freeze({callAndCheck:Jt,canBeRepresented:ee,getWebGLErrorMessage:ne,getExtensionOrThrow:re,createVertexShader:oe,createFragmentShader:ae,createProgram:ce,linkProgram:le,validateProgram:he,createStaticVertexBuffer:fe,createStaticIndexBuffer:de,getNumChannels:function(){return 2===i().getNumber("WEBGL_VERSION")?1:4},createTexture:pe,validateTextureSize:ve,createFramebuffer:me,bindVertexBufferToProgramAttribute:ge,bindTextureUnit:ye,unbindTextureUnit:function(t,e,n){Se(t,n),Jt(t,e,(function(){return t.activeTexture(t.TEXTURE0+n)})),Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,null)}));},getProgramUniformLocationOrThrow:xe,getProgramUniformLocation:be,bindTextureToProgramUniformSampler:we,bindCanvasToFramebuffer:function(t,e){Jt(t,e,(function(){return t.bindFramebuffer(t.FRAMEBUFFER,null)})),Jt(t,e,(function(){return t.viewport(0,0,t.canvas.width,t.canvas.height)})),Jt(t,e,(function(){return t.scissor(0,0,t.canvas.width,t.canvas.height)}));},bindColorTextureToFramebuffer:Ce,unbindColorTextureFromFramebuffer:Ee,validateFramebuffer:Re,getFramebufferErrorMessage:Ie,getBatchDim:Ae,getRowsCols:De,getShapeAs3D:Te,getTextureShapeFromLogicalShape:Ne,isReshapeFree:_e,getWebGLMaxTextureSize:Oe,resetMaxTextureSize:function(){ie=null;},resetMaxTexturesInShader:function(){se=null;},getMaxTexturesInShader:Me,getWebGLDisjointQueryTimerVersion:Be,hasExtension:Pe,isWebGLVersionEnabled:Le,isCapableOfRenderingToFloatTexture:We,isDownloadFloatTextureEnabled:Ue,isWebGLFenceEnabled:ze}),He=i();function qe(){i().set("PROD",!0);}function Ke(){i().set("DEBUG",!0);}function je(){i().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.");}function Xe(t){i().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(t+" You can disable deprecation warnings with tf.disableDeprecationWarnings().");}function Ye(){Lt.disposeVariables();}function $e(){return Lt}function Qe(){return Lt.memory()}function Je(t){return Lt.profile(t)}function Ze(t,e){return Lt.tidy(t,e)}function tn(t){_t(t).forEach((function(t){return t.dispose()}));}function en(t){return Lt.keep(t)}function nn(t){return Lt.time(t)}function rn(t){return Lt.setBackend(t)}function on(){return Lt.ready()}function an(){return Lt.backendName}function sn(t){Lt.removeBackend(t);}function un(t){return Lt.findBackend(t)}function cn(t){return Lt.findBackendFactory(t)}function ln(t,e,n){return void 0===n&&(n=1),Lt.registerBackend(t,e,n)}function hn(){return Lt.backend}function fn(t,e){i().setPlatform(t,e);}function dn(){for(var t=[],e=0;e0,(function(){return "Element arr["+r.join("][")+"] should be a primitive, but is an array of "+e.length+" elements"})),C(e.length===n[0],(function(){return "Element arr["+r.join("][")+"] should have "+n[0]+" elements, but has "+e.length+" elements"}));for(var o=n.slice(1),a=0;a=0&&(o=r),vn(r,o,e,n),null==t||!V(t)&&!Array.isArray(t)&&"number"!=typeof t&&"boolean"!=typeof t&&"string"!=typeof t){var a=null==t?"null":t.constructor.name;throw new Error("Argument '"+e+"' passed to '"+n+"' must be a Tensor or TensorLike, but got '"+a+"'")}var s=pn(t,o);V(t)||Array.isArray(t)||(t=[t]);var u="string"!==o?Q(t,o,i().getBool("DEBUG")):I(t,[],!0);return Lt.makeTensor(u,s,o)}function gn(t,e,n,r){if(void 0===r&&(r="numeric"),!Array.isArray(t))throw new Error("Argument "+e+" passed to "+n+" must be a `Tensor[]` or `TensorLike[]`");return t.map((function(t,r){return mn(t,e+"["+r+"]",n)}),r)}function yn(t,e){for(var n=0;n=0&&e0})),He.registerFlag("WEBGL_VERSION",(function(){return Le(2)?2:Le(1)?1:0})),He.registerFlag("WEBGL_BUFFER_SUPPORTED",(function(){return 2===He.get("WEBGL_VERSION")})),He.registerFlag("WEBGL_CPU_FORWARD",(function(){return !0})),He.registerFlag("WEBGL_FORCE_F16_TEXTURES",(function(){return !1})),He.registerFlag("WEBGL_PACK",(function(){return He.getBool("HAS_WEBGL")})),He.registerFlag("WEBGL_PACK_NORMALIZATION",(function(){return He.getBool("WEBGL_PACK")})),He.registerFlag("WEBGL_PACK_CLIP",(function(){return He.getBool("WEBGL_PACK")})),He.registerFlag("WEBGL_PACK_DEPTHWISECONV",(function(){return !1})),He.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",(function(){return He.getBool("WEBGL_PACK")})),He.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",(function(){return He.getBool("WEBGL_PACK")})),He.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",(function(){return He.getBool("WEBGL_PACK")})),He.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",(function(){return He.getBool("WEBGL_PACK")})),He.registerFlag("WEBGL_PACK_REDUCE",(function(){return He.getBool("WEBGL_PACK")})),He.registerFlag("WEBGL_LAZILY_UNPACK",(function(){return He.getBool("WEBGL_PACK")})),He.registerFlag("WEBGL_CONV_IM2COL",(function(){return He.getBool("WEBGL_PACK")})),He.registerFlag("WEBGL_MAX_TEXTURE_SIZE",(function(){return Oe(He.getNumber("WEBGL_VERSION"))})),He.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",(function(){return Me(He.getNumber("WEBGL_VERSION"))})),He.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",(function(){var t=He.getNumber("WEBGL_VERSION");return 0===t?0:Be(t)})),He.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",(function(){return He.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&(t=navigator.userAgent||navigator.vendor||window.opera,!(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))));var t;})),He.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",(function(){return We(He.getNumber("WEBGL_VERSION"))})),He.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",(function(){return !He.getBool("WEBGL_FORCE_F16_TEXTURES")&&He.getBool("WEBGL_RENDER_FLOAT32_CAPABLE")})),He.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",(function(){return Ue(He.getNumber("WEBGL_VERSION"))})),He.registerFlag("WEBGL_FENCE_API_ENABLED",(function(){return ze(He.getNumber("WEBGL_VERSION"))})),He.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",(function(){return He.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0})),bt=Xe;var Dn=An({complex_:function(t,e){var n=mn(t,"real","complex"),r=mn(e,"imag","complex");return E(n.shape,r.shape,"real and imag shapes, "+n.shape+" and "+r.shape+", must match in call to tf.complex()."),Lt.runKernelFunc((function(t){return t.complex(n,r)}),{$real:n,$imag:r})}}),Tn=An({real_:function(t){var e=mn(t,"input","real");return Lt.runKernelFunc((function(t){return t.real(e)}),{$input:e})}}),Nn=An({imag_:function(t){var e=mn(t,"input","imag");return Lt.runKernelFunc((function(t){return t.imag(e)}),{$input:e})}});function Fn(t,e,n){return _n(t,e,pn(t,n),n)}function _n(t,e,n,r){if(null==r&&(r=j(t)),"complex64"===r)throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!V(t)&&!Array.isArray(t)&&"number"!=typeof t&&"boolean"!=typeof t&&"string"!=typeof t)throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(null!=e){nt(e);var o=k(e),a=k(n);C(o===a,(function(){return "Based on the provided shape, ["+e+"], the tensor should have "+o+" values but has "+a}));for(var s=0;s1)return Gn([0],r);var o=tt(Math.abs(Math.ceil((e-t)/n)),r);e=1,(function(){return "Pass at least one tensor to concat"}));var n=gn(t,"tensors","concat");"complex64"===n[0].dtype&&n.forEach((function(t){if("complex64"!==t.dtype)throw new Error("Cannot concatenate complex64 tensors with a tensor\n with dtype "+t.dtype+". ")})),e=O(e,n[0].shape)[0];var r=Sn(n.map((function(t){return t.shape})),e);if(0===k(r))return Fn([],r);if(1===(n=n.filter((function(t){return t.size>0}))).length)return n[0];var o=n.map((function(t){return t.shape}));kn(o,e);var a=n,i={axis:e};return Lt.runKernelFunc((function(t){return t.concat(n,e)}),a,(function(t){var n=o.map((function(t){return t[e]}));return tr(t,n,e).map((function(t){return function(){return t}}))}),"Concat",i)}}),$n=An({concat1d_:function(t){return Yn(t,0)}}),Qn=An({concat2d_:function(t,e){return Yn(t,e)}}),Jn=An({concat3d_:function(t,e){return Yn(t,e)}}),Zn=An({concat4d_:function(t,e){return Yn(t,e)}}),tr=An({split_:function(t,e,n){void 0===n&&(n=0);var r,o=mn(t,"x","split");return n=O(n,o.shape)[0],"number"==typeof e?(C(o.shape[n]%e==0,(function(){return "Number of splits must evenly divide the axis."})),r=new Array(e).fill(o.shape[n]/e)):(C(o.shape[n]===e.reduce((function(t,e){return t+e})),(function(){return "The sum of sizes must match the size of the axis dimension."})),r=e),Lt.runKernelFunc((function(t){return t.split(o,r,n)}),{$x:o},(function(t){return {$x:function(){return Yn(t,n)}}}))}});function er(t,e){return t(e={exports:{}},e.exports),e.exports}var nr=er((function(t){!function(t,e,n){function r(t){var e,n=this,r=(e=4022871197,function(t){t=t.toString();for(var n=0;n>>0,e=(r*=e)>>>0,e+=4294967296*(r-=e);}return 2.3283064365386963e-10*(e>>>0)});n.next=function(){var t=2091639*n.s0+2.3283064365386963e-10*n.c;return n.s0=n.s1,n.s1=n.s2,n.s2=t-(n.c=0|t)},n.c=1,n.s0=r(" "),n.s1=r(" "),n.s2=r(" "),n.s0-=r(t),n.s0<0&&(n.s0+=1),n.s1-=r(t),n.s1<0&&(n.s1+=1),n.s2-=r(t),n.s2<0&&(n.s2+=1),r=null;}function o(t,e){return e.c=t.c,e.s0=t.s0,e.s1=t.s1,e.s2=t.s2,e}function a(t,e){var n=new r(t),a=e&&e.state,i=n.next;return i.int32=function(){return 4294967296*n.next()|0},i.double=function(){return i()+11102230246251565e-32*(2097152*i()|0)},i.quick=i,a&&("object"==typeof a&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n((function(){return a})):this.alea=a;}(0,t,!1);})),rr=er((function(t){!function(t,e,n){function r(t){var e=this,n="";e.x=0,e.y=0,e.z=0,e.w=0,e.next=function(){var t=e.x^e.x<<11;return e.x=e.y,e.y=e.z,e.z=e.w,e.w^=e.w>>>19^t^t>>>8},t===(0|t)?e.x=t:n+=t;for(var r=0;r>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21);}while(0===t);return t},i.int32=n.next,i.quick=i,a&&("object"==typeof a&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n((function(){return a})):this.xor128=a;}(0,t,!1);})),or=er((function(t){!function(t,e,n){function r(t){var e=this,n="";e.next=function(){var t=e.x^e.x>>>2;return e.x=e.y,e.y=e.z,e.z=e.w,e.w=e.v,(e.d=e.d+362437|0)+(e.v=e.v^e.v<<4^t^t<<1)|0},e.x=0,e.y=0,e.z=0,e.w=0,e.v=0,t===(0|t)?e.x=t:n+=t;for(var r=0;r>>4),e.next();}function o(t,e){return e.x=t.x,e.y=t.y,e.z=t.z,e.w=t.w,e.v=t.v,e.d=t.d,e}function a(t,e){var n=new r(t),a=e&&e.state,i=function(){return (n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21);}while(0===t);return t},i.int32=n.next,i.quick=i,a&&("object"==typeof a&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n((function(){return a})):this.xorwow=a;}(0,t,!1);})),ar=er((function(t){!function(t,e,n){function r(t){var e=this;e.next=function(){var t,n,r=e.x,o=e.i;return t=r[o],n=(t^=t>>>7)^t<<24,n^=(t=r[o+1&7])^t>>>10,n^=(t=r[o+3&7])^t>>>3,n^=(t=r[o+4&7])^t<<7,t=r[o+7&7],n^=(t^=t<<13)^t<<9,r[o]=n,e.i=o+1&7,n},function(t,e){var n,r=[];if(e===(0|e))r[0]=e;else for(e=""+e,n=0;n0;--n)t.next();}(e,t);}function o(t,e){return e.x=t.x.slice(),e.i=t.i,e}function a(t,e){null==t&&(t=+new Date);var n=new r(t),a=e&&e.state,i=function(){return (n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21);}while(0===t);return t},i.int32=n.next,i.quick=i,a&&(a.x&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n((function(){return a})):this.xorshift7=a;}(0,t,!1);})),ir=er((function(t){!function(t,e,n){function r(t){var e=this;e.next=function(){var t,n,r=e.w,o=e.X,a=e.i;return e.w=r=r+1640531527|0,n=o[a+34&127],t=o[a=a+1&127],n^=n<<13,t^=t<<17,n^=n>>>15,t^=t>>>12,n=o[a]=n^t,e.i=a,n+(r^r>>>16)|0},function(t,e){var n,r,o,a,i,s=[],u=128;for(e===(0|e)?(r=e,e=null):(e+="\0",r=0,u=Math.max(u,e.length)),o=0,a=-32;a>>15,r^=r<<4,r^=r>>>13,a>=0&&(i=i+1640531527|0,o=0==(n=s[127&a]^=r+i)?o+1:0);for(o>=128&&(s[127&(e&&e.length||0)]=-1),o=127,a=512;a>0;--a)r=s[o+34&127],n=s[o=o+1&127],r^=r<<13,n^=n<<17,r^=r>>>15,n^=n>>>12,s[o]=r^n;t.w=i,t.X=s,t.i=o;}(e,t);}function o(t,e){return e.i=t.i,e.w=t.w,e.X=t.X.slice(),e}function a(t,e){null==t&&(t=+new Date);var n=new r(t),a=e&&e.state,i=function(){return (n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21);}while(0===t);return t},i.int32=n.next,i.quick=i,a&&(a.X&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n((function(){return a})):this.xor4096=a;}(0,t,!1);})),sr=er((function(t){!function(t,e,n){function r(t){var e=this,n="";e.next=function(){var t=e.b,n=e.c,r=e.d,o=e.a;return t=t<<25^t>>>7^n,n=n-r|0,r=r<<24^r>>>8^o,o=o-t|0,e.b=t=t<<20^t>>>12^n,e.c=n=n-r|0,e.d=r<<16^n>>>16^o,e.a=o-t|0},e.a=0,e.b=0,e.c=-1640531527,e.d=1367130551,t===Math.floor(t)?(e.a=t/4294967296|0,e.b=0|t):n+=t;for(var r=0;r>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21);}while(0===t);return t},i.int32=n.next,i.quick=i,a&&("object"==typeof a&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n((function(){return a})):this.tychei=a;}(0,t,!1);})),ur=er((function(t){!function(e,n){var r,o=this,a=256,i=6,s="random",u=n.pow(a,i),c=n.pow(2,52),l=2*c,h=a-1;function f(t,h,f){var g=[],y=v(function t(e,n){var r,o=[],a=typeof e;if(n&&"object"==a)for(r in e)try{o.push(t(e[r],n-1));}catch(t){}return o.length?o:"string"==a?e:e+"\0"}((h=1==h?{entropy:!0}:h||{}).entropy?[t,m(e)]:null==t?function(){try{var t;return r&&(t=r.randomBytes)?t=t(a):(t=new Uint8Array(a),(o.crypto||o.msCrypto).getRandomValues(t)),m(t)}catch(t){var n=o.navigator,i=n&&n.plugins;return [+new Date,o,i,o.screen,m(e)]}}():t,3),g),x=new d(g),b=function(){for(var t=x.g(i),e=u,n=0;t=l;)t/=2,e/=2,n>>>=1;return (t+n)/e};return b.int32=function(){return 0|x.g(4)},b.quick=function(){return x.g(4)/4294967296},b.double=b,v(m(x.S),e),(h.pass||f||function(t,e,r,o){return o&&(o.S&&p(o,x),t.state=function(){return p(x,{})}),r?(n[s]=t,e):t})(b,y,"global"in h?h.global:this==n,h.state)}function d(t){var e,n=t.length,r=this,o=0,i=r.i=r.j=0,s=r.S=[];for(n||(t=[n++]);o=1||0===i);var s=Math.sqrt(-2*Math.log(i)/i);e=this.mean+this.stdDev*o*s,n=this.mean+this.stdDev*a*s,this.truncated&&!this.isValidTruncated(e)||(r=!0);}return this.truncated&&!this.isValidTruncated(n)||(this.nextVal=this.convertValue(n)),this.convertValue(e)},t.prototype.convertValue=function(t){return null==this.dtype||"float32"===this.dtype?t:Math.round(t)},t.prototype.isValidTruncated=function(t){return t<=this.upper&&t>=this.lower},t}(),hr=function(){function t(t,e,n,r){this.alpha=t,this.beta=1/e,this.dtype=n;var o=r||Math.random();this.randu=cr(o.toString()),this.randn=new lr(0,1,n,!1,this.randu()),this.d=t<1?t+2/3:t-1/3,this.c=1/Math.sqrt(9*this.d);}return t.prototype.nextValue=function(){for(var t,e,n,r,o,a;;){do{r=this.randn.nextValue(),a=1+this.c*r;}while(a<=0);if(a*=a*a,e=1-.331*(t=r*r)*t,n=.5*t+this.d*(1-a+Math.log(a)),(o=this.randu())=1+e.length,(function(){return "input rank is "+r.rank+" but should be > than blockShape.length "+e.length})),C(n.length===e.length,(function(){return "crops.length is "+n.length+" but should be equal to blockShape.length "+e.length})),C(r.shape[0]%o==0,(function(){return "input tensor batch is "+r.shape[0]+" but is not divisible by the product of the elements of blockShape "+e.join(" * ")+" === "+o})),Lt.runKernelFunc((function(t){return t.batchToSpaceND(r,e,n)}),{$x:r},(function(t){return {$x:function(){return t.spaceToBatchND(e,n)}}}))}}),mr=An({broadcastTo_:function(t,e){var n=mn(t,"broadcastTo","x"),r=n.shape;if(e.some((function(t){return !(t>0)||t%1!=0})))throw new Error("broadcastTo(): Invalid broadcast shape ["+e+"].");if(e.lengthn.rank){for(var o=n.shape.slice();o.length=0;i--)if(n.shape[i]===e[i])a[i]=1;else if(1!==n.shape[i])throw new Error("broadcastTo(): ["+r+"] cannot be broadcast to ["+e+"].");var s=a.map((function(t,e){return t>1?e:-1})).filter((function(t){return t>=0}));return 0===s.length?n.clone():Lt.runKernelFunc((function(t){return t.tile(n,a)}),{input:n},(function(t){return {input:function(){return t.sum(s,!0)}}}))}}),gr=An({cast_:function(t,e){var n=mn(t,"x","cast");if(!W(e))throw new Error("Failed to cast to unknown dtype "+e);if("string"===e&&"string"!==n.dtype||"string"!==e&&"string"===n.dtype)throw new Error("Only strings can be casted to strings");var r={dtype:e};return Lt.runKernelFunc((function(t){return t.cast(n,e)}),{x:n},(function(t){return {x:function(){return t.clone()}}}),"Cast",r)}}),yr=An({clone_:function(t){var e=mn(t,"x","clone",null);return Lt.runKernelFunc((function(){return Lt.makeTensorFromDataId(e.dataId,e.shape,e.dtype)}),{$x:e},(function(t){return {$x:function(){return t.toFloat()}}}))}}),xr=An({cumsum_:function(t,e,n,r){void 0===e&&(e=0),void 0===n&&(n=!1),void 0===r&&(r=!1);var o=mn(t,"x","cumsum"),a=En([e|=0],o.rank),i=o;null!=a&&(i=o.transpose(a));var s=In(1,o.rank)[0],u=Lt.runKernelFunc((function(t){return t.cumsum(i,s,n,r)}),{permutedX:i},(function(t){return {permutedX:function(){return t.cumsum(e,n,!r)}}}));return null!=a&&(u=u.transpose(a)),u}}),br=An({depthToSpace_:function(t,e,n){void 0===n&&(n="NHWC");var r=mn(t,"x","depthToSpace"),o="NHWC"===n?r.shape[1]:r.shape[2],a="NHWC"===n?r.shape[2]:r.shape[3],i="NHWC"===n?r.shape[3]:r.shape[1];return C(o*e>=0,(function(){return "Negative dimension size caused by overflow when multiplying\n "+o+" and "+e+" for depthToSpace with input shape\n "+r.shape})),C(a*e>=0,(function(){return "Negative dimension size caused by overflow when multiplying\n "+a+" and "+e+" for depthToSpace with input shape\n "+r.shape})),C(i%(e*e)==0,(function(){return "Dimension size must be evenly divisible by "+e*e+" but is "+i+" for depthToSpace with input shape "+r.shape})),Lt.runKernelFunc((function(t){return t.depthToSpace(r,e,n)}),{$x:r})}}),wr=An({expandDims_:function(t,e){void 0===e&&(e=0);var n=mn(t,"x","expandDims",null);C(e<=n.rank,(function(){return "Axis must be <= rank of the tensor"}));var r=n.shape.slice();return e<0&&(C(-(n.rank+1)<=e,(function(){return "Axis must be in the interval ["+-(n.rank+1)+", "+n.rank+"]"})),e=n.rank+e+1),r.splice(e,0,1),Or(n,r)}}),Cr=An({eye_:function(t,e,n,r){void 0===r&&(r="float32"),null==e&&(e=t);for(var o=dr([t,e],r),a=t<=e?t:e,i=0;i2)throw new Error("Rank of probabilities must be 1 or 2, but is "+i);n=n||Math.random();var s=1===i?o.as2D(1,-1):o,u=Lt.runKernelFunc((function(t){return t.multinomial(s,r,e,n)}),{logits2D:s});return 1===i?u.as1D():u}}),Rr=An({oneHot_:function(t,e,n,r){if(void 0===n&&(n=1),void 0===r&&(r=0),e<2)throw new Error("Error in oneHot: depth must be >=2, but it is "+e);var o=mn(t,"indices","oneHot","int32"),a=o.shape.concat([e]);return o=o.flatten(),Lt.runKernelFunc((function(t){return t.oneHot(o,e,n,r)}),{$indices:o},(function(t){return {$indices:function(){return Gn(o.shape,"float32")}}})).reshape(a)}}),Ir=An({pad_:function(t,e,n){void 0===n&&(n=0);var r=mn(t,"x","pad");if(0===r.rank)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");var o={paddings:e,constantValue:n};return Lt.runKernelFunc((function(t){return t.pad(r,e,n)}),{x:r},(function(t){var n=e.map((function(t){return t[0]}));return {x:function(){return t.slice(n,r.shape)}}}),"PadV2",o)}}),kr=An({pad1d_:function(t,e,n){return void 0===n&&(n=0),C(2===e.length,(function(){return "Invalid number of paddings. Must be length of 2."})),Ir(t,[e],n)}}),Sr=An({pad2d_:function(t,e,n){return void 0===n&&(n=0),C(2===e.length&&2===e[0].length&&2===e[1].length,(function(){return "Invalid number of paddings. Must be length of 2 each."})),Ir(t,e,n)}}),Ar=An({pad3d_:function(t,e,n){return void 0===n&&(n=0),C(3===e.length&&2===e[0].length&&2===e[1].length&&2===e[2].length,(function(){return "Invalid number of paddings. Must be length of 2 each."})),Ir(t,e,n)}}),Dr=An({pad4d_:function(t,e,n){return void 0===n&&(n=0),C(4===e.length&&2===e[0].length&&2===e[1].length&&2===e[2].length&&2===e[3].length,(function(){return "Invalid number of paddings. Must be length of 2 each."})),Ir(t,e,n)}}),Tr=An({rand_:function(t,e,n){var r=k(t),o=null;if(null==n||"float32"===n)o=new Float32Array(r);else if("int32"===n)o=new Int32Array(r);else {if("bool"!==n)throw new Error("Unknown data type "+n);o=new Uint8Array(r);}for(var a=0;a=1+e.length,(function(){return "input rank "+r.rank+" should be > than [blockShape] "+e.length})),C(n.length===e.length,(function(){return "paddings.shape[0] "+n.length+" must be equal to [blockShape] "+e.length})),C(r.shape.reduce((function(t,r,o){return o>0&&o<=e.length?t&&(r+n[o-1][0]+n[o-1][1])%e[o-1]==0:t}),!0),(function(){return "input spatial dimensions "+r.shape.slice(1)+" with paddings "+n.toString()+" must be divisible by blockShapes "+e.toString()})),Lt.runKernelFunc((function(t){return t.spaceToBatchND(r,e,n)}),{$x:r},(function(t){return {$x:function(){return t.batchToSpaceND(e,n)}}}))}}),Br=An({squeeze_:function(t,e){var n=mn(t,"x","squeeze");return Or(n,M(n.shape,e).newShape)}}),Pr=An({stack_:function(t,e){void 0===e&&(e=0);var n=gn(t,"tensors","stack");if(C(n.length>=1,(function(){return "Pass at least one tensor to tf.stack"})),1===n.length)return n[0].expandDims(e);var r=n[0].rank,o=n[0].shape,a=n[0].dtype;C(e<=r,(function(){return "Axis must be <= rank of the tensor"})),n.forEach((function(t){E(o,t.shape,"All tensors passed to stack must have matching shapes");})),n.forEach((function(t){C(a===t.dtype,(function(){return "All tensors passed to stack must have matching dtypes"}));}));var i=n.map((function(t){return t.expandDims(e)}));return Yn(i,e)}}),Lr=An({tile_:function(t,e){var n=mn(t,"x","tile",null);C(n.rank===e.length,(function(){return "Error in transpose: rank of input "+n.rank+" must match length of reps "+e+"."}));var r=[n],o={reps:e};return Lt.runKernelFunc((function(t,r){var o=t.tile(n,e);return r([n]),o}),{x:n},(function(t,n){var r=n[0];return {x:function(){var n=Xn(r);if(1===r.rank)for(var o=0;o=-n.shape.length&&e=2*e+1||o%2==1?i.push(o):a.push(o);r.push.apply(r,a),r.push(0),r.push.apply(r,i);}return r}function Hr(t,e,n,r){void 0===r&&(r=!0);var o=[];r?o.push(t[0]/n):o.push(t[0]*n);for(var a=1;at.rank)throw new Error("index innermost dimension length must be <= tensor rank; saw: "+e.shape[e.rank-1]+" vs. "+t.rank);if(0===t.size)throw new Error("Requested more than 0 entries, but input is empty. Input shape: "+t.shape+".");for(var n=e.shape,r=n[n.length-1],o=1,a=0;a1?e.shape[e.rank-1]:1,o=e.rank>1?e.rank-1:1,a="Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: "+n.shape+", indices.shape: "+e.shape+", shape: "+t+", sliceDim: "+r+", and batchDim: "+o+".";if(n.rank1?e.shape[r-1]:1,a=n.length,i=1,s=o;s0;)1&t&&e.push(n),t/=2,n++;return e}function ro(t,e,n){for(var r=[],o=0;o0?Number.MIN_SAFE_INTEGER:Number.MAX_SAFE_INTEGER);var s=r[o];return a<0&&(a+=s),a=x(0,a,s-1)}function ao(t,e,n,r,o){var a=e[o],i=n[o]||1;(t&1<0?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER);var s=r[o];return a<0&&(a+=s),a=i>0?x(0,a,s):x(-1,a,s-1)}function io(t,e,n){for(var r=n.length,o=0;o1){r=o;break}for(o=r+1;o0||n[o]!==t[o])return !1;return !0}function so(t,e){for(var n=t.length>0?t[t.length-1]:1,r=0;r0,(function(){return "variableGrads() expects at least one of the input variables to be trainable, but none of the "+a+" variables is trainable."}));var i=Lt.gradients(t,e,null,!0),s=i.value,u=i.grads;C(u.some((function(t){return null!=t})),(function(){return "Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."})),C(0===s.rank,(function(){return "The f passed in variableGrads(f) must return a scalar, but it returned a rank-"+s.rank+" tensor"}));var c={};return e.forEach((function(t,e){null!=u[e]&&(c[t.name]=u[e]);})),null!=o&&o.forEach((function(t){return c[t.name]=null})),{value:s,grads:c}}function vo(t){return Lt.customGrad(t)}function mo(t){if(t.filter((function(t){return null==t})).length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that\n the f you passed encloses all operations that lead from x to y.")}var go=An({softmax_:function(t,e){void 0===e&&(e=-1);var n=mn(t,"logits","softmax","float32");if(-1===e&&(e=n.rank-1),e!==n.rank-1)throw Error("Softmax along a non-last dimension is not yet supported. Logits was rank "+n.rank+" and dim was "+e);return Lt.runKernelFunc((function(t,r){var o=t.softmax(n,e);return r([o]),o}),{logits:n},(function(t,n){var r=n[0],o=t.mul(r);return {logits:function(){return o.sub(o.sum([e],!0).mul(r))}}}),"Softmax",{dim:e},[],[!0])}}),yo=An({logSoftmax_:function(t,e){void 0===e&&(e=-1);var n=mn(t,"logits","logSoftmax");if(-1===e&&(e=n.rank-1),e!==n.rank-1)throw Error("Log Softmax along a non-last dimension is not yet supported. Logits was rank "+n.rank+" and axis was "+e);return vo((function(t,n){var r=t.max(e,!0),o=t.sub(r),a=o.toFloat().sub(o.exp().sum(e,!0).log());n([a]);return {value:a,gradFunc:function(t,n){var r=n[0].exp();return t.sub(t.sum(e,!0).mul(r))}}}))(n)}}),xo=function(){function t(t,e){this.backend=t,this.dataMover=e,this.data=new WeakMap,this.dataIdsCount=0;}return t.prototype.get=function(t){return this.data.has(t)||this.dataMover.moveData(this.backend,t),this.data.get(t)},t.prototype.set=function(t,e){this.dataIdsCount++,this.data.set(t,e);},t.prototype.has=function(t){return this.data.has(t)},t.prototype.delete=function(t){return this.dataIdsCount--,this.data.delete(t)},t.prototype.numDataIds=function(){return this.dataIdsCount},t}(),bo=function(){function t(){}return t.prototype.time=function(t){return wo("time")},t.prototype.read=function(t){return wo("read")},t.prototype.readSync=function(t){return wo("readSync")},t.prototype.numDataIds=function(){return wo("numDataIds")},t.prototype.disposeData=function(t){return wo("disposeData")},t.prototype.write=function(t,e,n){return wo("write")},t.prototype.move=function(t,e,n,r){return wo("move")},t.prototype.memory=function(){return wo("memory")},t.prototype.floatPrecision=function(){return wo("floatPrecision")},t.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},t.prototype.batchMatMul=function(t,e,n,r){return wo("batchMatMul")},t.prototype.fusedBatchMatMul=function(t){t.a,t.b,t.transposeA,t.transposeB,t.bias,t.activation,t.preluActivationWeights;return wo("fusedBatchMatMul")},t.prototype.slice=function(t,e,n){return wo("slice")},t.prototype.stridedSlice=function(t,e,n,r){return wo("stridedSlice")},t.prototype.unstack=function(t,e){return wo("unstack")},t.prototype.reverse=function(t,e){return wo("reverse")},t.prototype.concat=function(t,e){return wo("concat")},t.prototype.neg=function(t){return wo("neg")},t.prototype.add=function(t,e){return wo("add")},t.prototype.addN=function(t){return wo("addN")},t.prototype.subtract=function(t,e){return wo("subtract")},t.prototype.multiply=function(t,e){return wo("multiply")},t.prototype.realDivide=function(t,e){return wo("realDivide")},t.prototype.floorDiv=function(t,e){return wo("floorDiv")},t.prototype.sum=function(t,e){return wo("sum")},t.prototype.prod=function(t,e){return wo("prod")},t.prototype.unsortedSegmentSum=function(t,e,n){return wo("unsortedSegmentSum")},t.prototype.argMin=function(t,e){return wo("argMin")},t.prototype.argMax=function(t,e){return wo("argMax")},t.prototype.equal=function(t,e){return wo("equal")},t.prototype.notEqual=function(t,e){return wo("notEqual")},t.prototype.less=function(t,e){return wo("less")},t.prototype.lessEqual=function(t,e){return wo("lessEqual")},t.prototype.greater=function(t,e){return wo("greater")},t.prototype.greaterEqual=function(t,e){return wo("greaterEqual")},t.prototype.logicalNot=function(t){return wo("logicalNot")},t.prototype.logicalAnd=function(t,e){return wo("logicalAnd")},t.prototype.logicalOr=function(t,e){return wo("logicalOr")},t.prototype.where=function(t){return wo("where")},t.prototype.select=function(t,e,n){return wo("select")},t.prototype.topk=function(t,e,n){return wo("topk")},t.prototype.min=function(t,e){return wo("min")},t.prototype.minimum=function(t,e){return wo("minimum")},t.prototype.mod=function(t,e){return wo("mod")},t.prototype.max=function(t,e){return wo("max")},t.prototype.maximum=function(t,e){return wo("maximum")},t.prototype.all=function(t,e){return wo("all")},t.prototype.any=function(t,e){return wo("any")},t.prototype.squaredDifference=function(t,e){return wo("squaredDifference")},t.prototype.ceil=function(t){return wo("ceil")},t.prototype.floor=function(t){return wo("floor")},t.prototype.round=function(t){return wo("round")},t.prototype.sign=function(t){return wo("sign")},t.prototype.isNaN=function(t){return wo("isNaN")},t.prototype.isInf=function(t){return wo("isInf")},t.prototype.isFinite=function(t){return wo("isFinite")},t.prototype.pow=function(t,e){return wo("pow")},t.prototype.exp=function(t){return wo("exp")},t.prototype.expm1=function(t){return wo("expm1")},t.prototype.softmax=function(t,e){return wo("softmax")},t.prototype.log=function(t){return wo("log")},t.prototype.log1p=function(t){return wo("log1p")},t.prototype.sqrt=function(t){return wo("sqrt")},t.prototype.rsqrt=function(t){return wo("rsqrt")},t.prototype.square=function(t){return wo("square")},t.prototype.reciprocal=function(t){return wo("reciprocal")},t.prototype.relu=function(t){return wo("relu")},t.prototype.relu6=function(t){return wo("relu6")},t.prototype.prelu=function(t,e){return wo("prelu")},t.prototype.elu=function(t){return wo("elu")},t.prototype.eluDer=function(t,e){return wo("eluDer")},t.prototype.selu=function(t){return wo("selu")},t.prototype.int=function(t){return wo("int")},t.prototype.clip=function(t,e,n){return wo("clip")},t.prototype.abs=function(t){return wo("abs")},t.prototype.complexAbs=function(t){return wo("complexAbs")},t.prototype.sigmoid=function(t){return wo("sigmoid")},t.prototype.softplus=function(t){return wo("softplus")},t.prototype.sin=function(t){return wo("sin")},t.prototype.cos=function(t){return wo("cos")},t.prototype.tan=function(t){return wo("tan")},t.prototype.asin=function(t){return wo("asin")},t.prototype.acos=function(t){return wo("acos")},t.prototype.atan=function(t){return wo("atan")},t.prototype.atan2=function(t,e){return wo("atan2")},t.prototype.sinh=function(t){return wo("sinh")},t.prototype.cosh=function(t){return wo("cosh")},t.prototype.tanh=function(t){return wo("tanh")},t.prototype.asinh=function(t){return wo("asinh")},t.prototype.acosh=function(t){return wo("acosh")},t.prototype.atanh=function(t){return wo("atanh")},t.prototype.erf=function(t){return wo("erf")},t.prototype.step=function(t,e){return wo("step")},t.prototype.fusedConv2d=function(t){t.input,t.filter,t.convInfo,t.bias,t.activation,t.preluActivationWeights;return wo("fusedConv2d")},t.prototype.conv2d=function(t,e,n){return wo("conv2d")},t.prototype.conv2dDerInput=function(t,e,n){return wo("conv2dDerInput")},t.prototype.conv2dDerFilter=function(t,e,n){return wo("conv2dDerFilter")},t.prototype.fusedDepthwiseConv2D=function(t){t.input,t.filter,t.convInfo,t.bias,t.activation,t.preluActivationWeights;return wo("fusedDepthwiseConv2D")},t.prototype.depthwiseConv2D=function(t,e,n){return wo("depthwiseConv2D")},t.prototype.depthwiseConv2DDerInput=function(t,e,n){return wo("depthwiseConv2DDerInput")},t.prototype.depthwiseConv2DDerFilter=function(t,e,n){return wo("depthwiseConv2DDerFilter")},t.prototype.conv3d=function(t,e,n){return wo("conv3d")},t.prototype.conv3dDerInput=function(t,e,n){return wo("conv3dDerInput")},t.prototype.conv3dDerFilter=function(t,e,n){return wo("conv3dDerFilter")},t.prototype.maxPool=function(t,e){return wo("maxPool")},t.prototype.maxPoolBackprop=function(t,e,n,r){return wo("maxPoolBackprop")},t.prototype.avgPool=function(t,e){return wo("avgPool")},t.prototype.avgPoolBackprop=function(t,e,n){return wo("avgPoolBackprop")},t.prototype.avgPool3d=function(t,e){return wo("avgPool3d")},t.prototype.avgPool3dBackprop=function(t,e,n){return wo("avgPool3dBackprop")},t.prototype.maxPool3d=function(t,e){return wo("maxPool3d")},t.prototype.maxPool3dBackprop=function(t,e,n,r){return wo("maxPool3dBackprop")},t.prototype.reshape=function(t,e){return wo("reshape")},t.prototype.cast=function(t,e){return wo("cast")},t.prototype.tile=function(t,e){return wo("tile")},t.prototype.pad=function(t,e,n){return wo("pad")},t.prototype.transpose=function(t,e){return wo("transpose")},t.prototype.gather=function(t,e,n){return wo("gather")},t.prototype.gatherND=function(t,e){return wo("gatherND")},t.prototype.scatterND=function(t,e,n){return wo("scatterND")},t.prototype.batchToSpaceND=function(t,e,n){return wo("batchToSpaceND")},t.prototype.spaceToBatchND=function(t,e,n){return wo("spaceToBatchND")},t.prototype.resizeBilinear=function(t,e,n,r){return wo("resizeBilinear")},t.prototype.resizeBilinearBackprop=function(t,e,n){return wo("resizeBilinearBackprop")},t.prototype.resizeNearestNeighbor=function(t,e,n,r){return wo("resizeNearestNeighbor")},t.prototype.resizeNearestNeighborBackprop=function(t,e,n){return wo("resizeNearestNeighborBackprop")},t.prototype.batchNormalization=function(t,e,n,r,o,a){return wo("batchNormalization")},t.prototype.localResponseNormalization4D=function(t,e,n,r,o){return wo("localResponseNormalization4D")},t.prototype.LRNGrad=function(t,e,n,r,o,a,i){return wo("LRNGrad")},t.prototype.multinomial=function(t,e,n,r){return wo("multinomial")},t.prototype.oneHot=function(t,e,n,r){return wo("oneHot")},t.prototype.cumsum=function(t,e,n,r){return wo("cumsum")},t.prototype.nonMaxSuppression=function(t,e,n,r,o){return wo("nonMaxSuppression")},t.prototype.fft=function(t){return wo("fft")},t.prototype.ifft=function(t){return wo("ifft")},t.prototype.complex=function(t,e){return wo("complex")},t.prototype.real=function(t){return wo("real")},t.prototype.imag=function(t){return wo("imag")},t.prototype.cropAndResize=function(t,e,n,r,o,a){return wo("cropAndResize")},t.prototype.depthToSpace=function(t,e,n){return wo("depthToSpace")},t.prototype.split=function(t,e,n){return wo("split")},t.prototype.sparseToDense=function(t,e,n,r){return wo("sparseToDense")},t.prototype.diag=function(t){return wo("diag")},t.prototype.fill=function(t,e,n){return wo("fill")},t.prototype.onesLike=function(t){return wo("onesLike")},t.prototype.zerosLike=function(t){return wo("zerosLike")},t.prototype.linspace=function(t,e,n){return wo("linspace")},t.prototype.dispose=function(){return wo("dispose")},t}();function wo(t){throw new Error("'"+t+"' not yet implemented or not found in the registry. Did you forget to import the kernel?")}function Co(t,e){for(var n=t.length,r=[],o=0;o1&&1===i&&r.unshift(a);}return r}function Eo(t,e){for(var n=[],r=0;r1)&&n.unshift(a);}return n}function Ro(t,e){for(var n=[],r=Math.max(t.length,e.length),o=0;o>>1)]);s>0?r=a+1:(o=a,i=!s);}return i?r:-r-1}(t,e,n||Ko)}(t,e,n),o=r<0?-(r+1):r;t.splice(o,0,e);}function Ko(t,e){return t>e?1:to})).sort(Jo),c=a>0?-.5/a:0,l=[],h=[];l.length0;){var f=u.pop(),d=f.score,p=f.boxIndex,v=f.suppressBeginIndex;if(d=v;--g){var y=$o(t,p,l[g]);if(y>=r){m=!0;break}if(f.score=f.score*Qo(r,c,y),f.score<=o)break}f.suppressBeginIndex=l.length,m||(f.score===d?(l.push(p),h.push(f.score)):f.score>o&&qo(u,f,Jo));}var x=l.length;return s&&(l.fill(0,x),h.fill(0,x)),{selectedIndices:Mn(l,"int32"),selectedScores:Mn(h,"float32"),numValidOutputs:On(x,"int32")}}function $o(t,e,n){var r=t.subarray(4*e,4*e+4),o=t.subarray(4*n,4*n+4),a=Math.min(r[0],r[2]),i=Math.min(r[1],r[3]),s=Math.max(r[0],r[2]),u=Math.max(r[1],r[3]),c=Math.min(o[0],o[2]),l=Math.min(o[1],o[3]),h=Math.max(o[0],o[2]),f=Math.max(o[1],o[3]),d=(s-a)*(u-i),p=(h-c)*(f-l);if(d<=0||p<=0)return 0;var v=Math.max(a,c),m=Math.max(i,l),g=Math.min(s,h),y=Math.min(u,f),x=Math.max(g-v,0)*Math.max(y-m,0);return x/(d+p-x)}function Qo(t,e,n){var r=Math.exp(e*n*n);return n<=t?r:0}function Jo(t,e){return t.score-e.score||t.score===e.score&&e.boxIndex-t.boxIndex}function Zo(t,e,n){var r=new Array(t.rank).fill(0),o=t.shape.slice();return e.map((function(e){o[n]=e;var a=t.slice(r,o);return r[n]+=e,a}))}function ta(t,e){for(var n=new Array(t.rank),r=0;r":"<",u=n?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * "+r+";\n\n int bestIndex = inOffset;\n float bestValue = getA(batch, bestIndex);\n\n for (int i = 0; i < "+r+"; i++) {\n int inIdx = "+u+";\n float candidate = getA(batch, inIdx);\n if (candidate "+s+" bestValue) {\n bestValue = candidate;\n bestIndex = inIdx;\n }\n }\n setOutput(float(bestIndex));\n }\n ";};function ia(t,e){return ["x","y","z","w","u","v"].slice(0,e).map((function(e){return t+"."+e}))}function sa(t,e){return 1===e?[t]:ia(t,e)}function ua(){var t,e,n,r,o,a,s,u,c,l;return 2===i().getNumber("WEBGL_VERSION")?(t="#version 300 es",e="in",n="out",r="in",o="texture",a="outputColor",s="out vec4 outputColor;",u="\n bool isnan_custom(float val) {\n return (val > 0.0 || val < 0.0) ? false : val != 0.0;\n }\n\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan_custom(val.x),\n isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));\n }\n\n #define isnan(value) isnan_custom(value)\n ",c="",l="\n #define round(value) newRound(value)\n int newRound(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 newRound(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n "):(t="",e="attribute",n="varying",r="varying",o="texture2D",a="gl_FragColor",s="",u="\n #define isnan(value) isnan_custom(value)\n bool isnan_custom(float val) {\n return (val > 0. || val < 1. || val == 0.) ? false : true;\n }\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));\n }\n ",c="\n uniform float INFINITY;\n\n bool isinf(float val) {\n return abs(val) == INFINITY;\n }\n bvec4 isinf(vec4 val) {\n return equal(abs(val), vec4(INFINITY));\n }\n ",l="\n int round(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 round(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n "),{version:t,attribute:e,varyingVs:n,varyingFs:r,texture2D:o,output:a,defineOutput:s,defineSpecialNaN:u,defineSpecialInf:c,defineRound:l}}function ca(t,e,n){void 0===n&&(n="index");var r=$(e);return r.map((function(e,o){return "int "+t[o]+" = "+n+" / "+e+"; "+(o===r.length-1?"int "+t[o+1]+" = "+n+" - "+t[o]+" * "+e:"index -= "+t[o]+" * "+e)+";"})).join("")}function la(t){var e=$(t).map((function(t){return t.toString()}));return "\n int getFlatIndex(ivec3 coords) {\n return coords.x * "+e[0]+" + coords.y * "+e[1]+" + coords.z;\n }\n"}var ha="\n const float FLOAT_MAX = 1.70141184e38;\n const float FLOAT_MIN = 1.17549435e-38;\n\n lowp vec4 encode_float(highp float v) {\n if (isnan(v)) {\n return vec4(255, 255, 255, 255);\n }\n\n highp float av = abs(v);\n\n if(av < FLOAT_MIN) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n } else if(v > FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\n } else if(v < -FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;\n }\n\n highp vec4 c = vec4(0,0,0,0);\n\n highp float e = floor(log2(av));\n highp float m = exp2(fract(log2(av))) - 1.0;\n\n c[2] = floor(128.0 * m);\n m -= c[2] / 128.0;\n c[1] = floor(32768.0 * m);\n m -= c[1] / 32768.0;\n c[0] = floor(8388608.0 * m);\n\n highp float ebias = e + 127.0;\n c[3] = floor(ebias / 2.0);\n ebias -= c[3] * 2.0;\n c[2] += floor(ebias) * 128.0;\n\n c[3] += 128.0 * step(0.0, -v);\n\n return c / 255.0;\n }\n";function fa(t,e,n,r){var o=[];t.forEach((function(t){var e=k(t.shapeInfo.logicalShape);t.shapeInfo.isUniform?o.push("uniform float "+t.name+(e>1?"["+e+"]":"")+";"):(o.push("uniform sampler2D "+t.name+";"),o.push("uniform int offset"+t.name+";"));}));var a,i,s=o.join("\n"),u=t.map((function(t){return function(t,e,n){void 0===n&&(n=!1);var r="";r+=n?pa(t):da(t);var o=t.shapeInfo.logicalShape,a=e.logicalShape;o.length<=a.length&&(r+=n?function(t,e){var n,r=t.name,o=r.charAt(0).toUpperCase()+r.slice(1),a="get"+o+"AtOutCoords",i=t.shapeInfo.logicalShape.length,s=e.logicalShape.length,u=Co(t.shapeInfo.logicalShape,e.logicalShape),c=wa(s),l=s-i,h=["x","y","z","w","u","v"];n=0===i?"":s<2&&u.length>=1?"coords = 0;":u.map((function(t){return "coords."+h[t+l]+" = 0;"})).join("\n");var f="";f=s<2&&i>0?"coords":t.shapeInfo.logicalShape.map((function(t,e){return "coords."+h[e+l]})).join(", ");var d="return outputValue;",p=1===k(t.shapeInfo.logicalShape),v=1===k(e.logicalShape);if(1!==i||p||v){if(p&&!v)d=1===s?"\n return vec4(outputValue.x, outputValue.x, 0., 0.);\n ":"\n return vec4(outputValue.x);\n ";else if(u.length){var m=i-2,g=i-1;u.indexOf(m)>-1&&u.indexOf(g)>-1?d="return vec4(outputValue.x);":u.indexOf(m)>-1?d="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":u.indexOf(g)>-1&&(d="return vec4(outputValue.xx, outputValue.zz);");}}else d="\n return vec4(outputValue.xy, outputValue.xy);\n ";return "\n vec4 "+a+"() {\n "+c+" coords = getOutputCoords();\n "+n+"\n vec4 outputValue = get"+o+"("+f+");\n "+d+"\n }\n "}(t,e):function(t,e){var n=t.name,r=n.charAt(0).toUpperCase()+n.slice(1),o="get"+r+"AtOutCoords",a=e.texShape,i=t.shapeInfo.texShape,s=t.shapeInfo.logicalShape.length,u=e.logicalShape.length;if(!t.shapeInfo.isUniform&&s===u&&null==t.shapeInfo.flatOffset&&S(i,a))return "\n float "+o+"() {\n return sampleTexture("+n+", resultUV);\n }\n ";var c,l=wa(u),h=Co(t.shapeInfo.logicalShape,e.logicalShape),f=u-s,d=["x","y","z","w","u","v"];c=0===s?"":u<2&&h.length>=1?"coords = 0;":h.map((function(t){return "coords."+d[t+f]+" = 0;"})).join("\n");var p="";p=u<2&&s>0?"coords":t.shapeInfo.logicalShape.map((function(t,e){return "coords."+d[e+f]})).join(", ");return "\n float "+o+"() {\n "+l+" coords = getOutputCoords();\n "+c+"\n return get"+r+"("+p+");\n }\n "}(t,e));return r}(t,e,r)})).join("\n"),c=e.texShape,l=ua(),h=function(t){return "\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return "+t.texture2D+"(textureSampler, uv).r;\n }\n "}(l),f=function(t){return t.version+"\n precision highp float;\n precision highp int;\n precision highp sampler2D;\n "+t.varyingFs+" vec2 resultUV;\n "+t.defineOutput+"\n const vec2 halfCR = vec2(0.5, 0.5);\n\n struct ivec5\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n };\n\n struct ivec6\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n int v;\n };\n\n uniform float NAN;\n "+t.defineSpecialNaN+"\n "+t.defineSpecialInf+"\n "+t.defineRound+"\n\n int imod(int x, int y) {\n return x - y * (x / y);\n }\n\n int idiv(int a, int b, float sign) {\n int res = a / b;\n int mod = imod(a, b);\n if (sign < 0. && mod != 0) {\n res -= 1;\n }\n return res;\n }\n\n //Based on the work of Dave Hoskins\n //https://www.shadertoy.com/view/4djSRW\n #define HASHSCALE1 443.8975\n float random(float seed){\n vec2 p = resultUV * seed;\n vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n }\n\n "+va+"\n "+ma+"\n "+ga+"\n "}(l);return e.isPacked?(a=function(t,e){switch(t.length){case 0:return "\n int getOutputCoords() {\n return 0;\n }\n ";case 1:return function(t,e){var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];if(1===n[0])return "\n int getOutputCoords() {\n return 2 * int(resultUV.x * "+n[1]+".0);\n }\n ";if(1===n[1])return "\n int getOutputCoords() {\n return 2 * int(resultUV.y * "+n[0]+".0);\n }\n ";return "\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+n[0]+", "+n[1]+"));\n return 2 * (resTexRC.x * "+n[1]+" + resTexRC.y);\n }\n "}(0,e);case 2:return function(t,e){var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];if(S(t,e))return "\n ivec2 getOutputCoords() {\n return 2 * ivec2(resultUV.yx * vec2("+n[0]+", "+n[1]+"));\n }\n ";var r=Math.ceil(t[1]/2);return "\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+n[0]+", "+n[1]+"));\n\n int index = resTexRC.x * "+n[1]+" + resTexRC.y;\n int r = 2 * (index / "+r+");\n int c = imod(index, "+r+") * 2;\n\n return ivec2(r, c);\n }\n "}(t,e);case 3:return n=t,r=e,o=[Math.ceil(r[0]/2),Math.ceil(r[1]/2)],a=Math.ceil(n[2]/2),i=a*Math.ceil(n[1]/2),"\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+o[0]+", "+o[1]+"));\n int index = resTexRC.x * "+o[1]+" + resTexRC.y;\n\n int b = index / "+i+";\n index -= b * "+i+";\n\n int r = 2 * (index / "+a+");\n int c = imod(index, "+a+") * 2;\n\n return ivec3(b, r, c);\n }\n ";default:return function(t,e){for(var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],r=Math.ceil(t[t.length-1]/2),o=r*Math.ceil(t[t.length-2]/2),a=o,i="",s="b, r, c",u=2;u2,(function(){return "Packed arg"+(n.charAt(0).toUpperCase()+n.slice(1))+" supports only inputs with rank above 2."}));var o=t[t.length-1],a=Math.ceil(o/e);this.outputShape=t.slice(0,-1),a>1&&this.outputShape.push(a),r||this.variableNames.push("bestIndicesA");var i,s,u=this.outputShape,c=u.length,l=wa(c),h=sa("coords",c);if(1===a){var f=wa(s=c+1);i="\n "+f+" sourceLocR = "+f+"("+h.join()+", 0);\n ++"+h[c-1]+";\n "+f+" sourceLocG = "+f+"("+h.join()+", 0);\n ++"+h[c-2]+";\n "+f+" sourceLocA = "+f+"("+h.join()+", 0);\n --"+h[c-1]+";\n "+f+" sourceLocB = "+f+"("+h.join()+", 0);\n --"+h[c-2]+";";}else s=c,i="\n "+l+" sourceLocR = coords;\n ++"+h[c-1]+";\n "+l+" sourceLocG = coords;\n ++"+h[c-2]+";\n "+l+" sourceLocA = coords;\n --"+h[c-1]+";\n "+l+" sourceLocB = coords;\n --"+h[c-2]+";";var d=["x","y","z","w","u","v"].slice(0,s),p="."+d[s-1],v=d.map((function(t){return "int "+t})),m=sa("sourceLocR",s-1).concat("inIdx.r"),g=sa("sourceLocG",s-1).concat("inIdx.g"),y=sa("sourceLocB",s-1).concat("inIdx.b"),x=sa("sourceLocA",s-1).concat("inIdx.a"),b="max"===n?"greaterThan":"lessThan",w=r?"":"\n inIdx = round(vec4(getBestIndicesAChannel("+m.join()+"),\n getBestIndicesAChannel("+g.join()+"),\n getBestIndicesAChannel("+y.join()+"),\n getBestIndicesAChannel("+x.join()+")));",E="vec4(\n getAChannel("+m.join()+"),\n hasNextCol ? getAChannel("+g.join()+") : 0.,\n hasNextRow ? getAChannel("+y.join()+") : 0.,\n hasNextRow && hasNextCol ? getAChannel("+x.join()+") : 0.)",R=r?"":"\n float getBestIndicesAChannel("+v.join()+") {\n return getChannel(getBestIndicesA("+d.join()+"),\n vec2("+d.slice(-2).join()+"));\n }";this.userCode="\n float getAChannel("+v.join()+") {\n return getChannel(getA("+d.join()+"),\n vec2("+d.slice(-2).join()+"));\n }\n "+R+"\n void main() {\n "+l+" coords = getOutputCoords();\n bool hasNextCol = "+h[c-1]+" < "+(u[c-1]-1)+";\n bool hasNextRow = "+h[c-2]+" < "+(u[c-2]-1)+";\n "+i+"\n ivec4 srcIdx = ivec4(sourceLocR"+p+", sourceLocG"+p+",\n sourceLocB"+p+", sourceLocA"+p+") * "+e+";\n ivec4 inIdx = srcIdx;\n vec4 bestIndex = vec4(inIdx);\n vec4 bestValue = "+E+";\n\n for (int i = 0; i < "+e+"; i++) {\n inIdx = srcIdx;\n "+w+"\n vec4 candidate = "+E+";\n bvec4 nan = isnan(candidate);\n bvec4 replace = bvec4(\n vec4("+b+"(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\n\n bestValue = vec4(replace.x ? candidate.x : bestValue.x,\n replace.y ? candidate.y : bestValue.y,\n replace.z ? candidate.z : bestValue.z,\n replace.w ? candidate.w : bestValue.w);\n bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\n srcIdx++;\n }\n setOutput(bestIndex);\n }\n ";},Ia=function(t){this.variableNames=["dy"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,o=t.strideWidth,a=t.dilationHeight,i=t.dilationWidth,s=t.effectiveFilterHeight,u=t.effectiveFilterWidth,c=s-1-t.padInfo.top,l=u-1-t.padInfo.left,h=1/(e*n);this.userCode="\n const ivec2 pads = ivec2("+c+", "+l+");\n const float avgMultiplier = float("+h+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+s+";\n wR += "+a+") {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+u+";\n wC+= "+i+") {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n setOutput(dotProd);\n }\n ";},ka=function(t){this.variableNames=["dy"],this.outputShape=t.inShape;var e=t.filterDepth,n=t.filterHeight,r=t.filterWidth,o=t.strideDepth,a=t.strideHeight,i=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.effectiveFilterDepth,h=t.effectiveFilterHeight,f=t.effectiveFilterWidth,d=l-1-t.padInfo.front,p=h-1-t.padInfo.top,v=f-1-t.padInfo.left,m=1/(e*n*r);this.userCode="\n const ivec3 pads = ivec3("+d+", "+p+", "+v+");\n const float avgMultiplier = float("+m+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < "+l+";\n wD += "+s+") {\n float dyD = float(dyDCorner + wD) / "+o+".0;\n\n if (dyD < 0.0 || dyD >= "+t.outDepth+".0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < "+h+";\n wR += "+u+") {\n float dyR = float(dyRCorner + wR) / "+a+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+f+";\n wC += "+c+") {\n float dyC = float(dyCCorner + wC) / "+i+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n }\n setOutput(dotProd);\n }\n ";},Sa=function(t,e,n,r,o,a){this.outputShape=[],this.variableNames=["x","mean","variance"],Ro(t,e),Ro(t,n);var i="0.0";null!=r&&(Ro(t,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");var s="1.0";null!=o&&(Ro(t,o),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=t,this.userCode="\n void main() {\n float x = getXAtOutCoords();\n float mean = getMeanAtOutCoords();\n float variance = getVarianceAtOutCoords();\n float offset = "+i+";\n float scale = "+s+";\n float inv = scale * inversesqrt(variance + float("+a+"));\n setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n }\n ";},Aa=function(t,e,n,r,o,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],Ro(t,e),Ro(t,n);var i="vec4(0.0)";null!=r&&(Ro(t,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");var s="vec4(1.0)";null!=o&&(Ro(t,o),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=t,this.userCode="\n void main() {\n vec4 offset = "+i+";\n vec4 scale = "+s+";\n\n vec4 x = getXAtOutCoords();\n vec4 mean = getMeanAtOutCoords();\n vec4 variance = getVarianceAtOutCoords();\n\n vec4 inv = scale * inversesqrt(variance + vec4("+a+"));\n\n setOutput((x - mean) * inv + offset);\n }\n ";},Da="return areal * breal - aimag * bimag;",Ta="return areal * bimag + aimag * breal;",Na=function(t,e,n){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=Ro(e,n),this.userCode="\n float binaryOpComplex(\n float areal, float aimag, float breal, float bimag) {\n "+t+"\n }\n\n void main() {\n float areal = getARealAtOutCoords();\n float aimag = getAImagAtOutCoords();\n float breal = getBRealAtOutCoords();\n float bimag = getBImagAtOutCoords();\n setOutput(binaryOpComplex(areal, aimag, breal, bimag));\n }\n ";},Fa="return a + b;",_a="return a - b;",Oa="return a * b;",Ma="return (a < 0.) ? b * a : a;",Ba=function(t,e,n){this.variableNames=["A","B"],this.outputShape=Ro(e,n),this.userCode="\n float binaryOperation(float a, float b) {\n "+t+"\n }\n\n void main() {\n float a = getAAtOutCoords();\n float b = getBAtOutCoords();\n setOutput(binaryOperation(a, b));\n }\n ";},Pa="\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n",La=function(t,e,n,r){void 0===r&&(r=!1),this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=Ro(e,n);var o=this.outputShape.length,a="";if(r)if(0===o||1===k(this.outputShape))a="\n result.y = 0.;\n result.z = 0.;\n result.w = 0.;\n ";else if(a="\n "+wa(o)+" coords = getOutputCoords();\n ",1===o)a+="\n result.y = (coords + 1) >= "+this.outputShape[0]+" ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n ";else {var i=sa("coords",o);a+="\n bool nextRowOutOfBounds =\n ("+i[o-2]+" + 1) >= "+this.outputShape[o-2]+";\n bool nextColOutOfBounds =\n ("+i[o-1]+" + 1) >= "+this.outputShape[o-1]+";\n result.y = nextColOutOfBounds ? 0. : result.y;\n result.z = nextRowOutOfBounds ? 0. : result.z;\n result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n ";}this.userCode="\n vec4 binaryOperation(vec4 a, vec4 b) {\n "+t+"\n }\n\n void main() {\n vec4 a = getAAtOutCoords();\n vec4 b = getBAtOutCoords();\n\n vec4 result = binaryOperation(a, b);\n "+a+"\n\n setOutput(result);\n }\n ";},Wa=function(){function t(t){this.variableNames=["A"],this.outputShape=t,this.userCode="\n uniform float minVal;\n uniform float maxVal;\n\n void main() {\n float value = getAAtOutCoords();\n if (isnan(value)) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, minVal, maxVal));\n }\n ";}return t.prototype.getCustomSetupFunc=function(t,e){var n=this;return function(r,o){null==n.minLoc&&(n.minLoc=r.getUniformLocationNoThrow(o,"minVal"),n.maxLoc=r.getUniformLocationNoThrow(o,"maxVal")),r.gl.uniform1f(n.minLoc,t),r.gl.uniform1f(n.maxLoc,e);}},t}(),Ua=function(){function t(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.userCode="\n uniform float minVal;\n uniform float maxVal;\n\n void main() {\n vec4 value = getAAtOutCoords();\n\n if (any(isnan(value))) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, vec4(minVal), vec4(maxVal)));\n }\n ";}return t.prototype.getCustomSetupFunc=function(t,e){var n=this;return function(r,o){null==n.minLoc&&(n.minLoc=r.getUniformLocationNoThrow(o,"minVal"),n.maxLoc=r.getUniformLocationNoThrow(o,"maxVal")),r.gl.uniform1f(n.minLoc,t),r.gl.uniform1f(n.maxLoc,e);}},t}(),Va=function(t){this.variableNames=["real","imag"],this.outputShape=t,this.userCode="\n void main() {\n float re = abs(getRealAtOutCoords());\n float im = abs(getImagAtOutCoords());\n float mx = max(re, im);\n\n // sadly the length function in glsl is not underflow-safe\n // (at least not on Intel GPUs). So the safe solution is\n // to ensure underflow-safety in all cases.\n setOutput(\n mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\n );\n }\n ";},za=function(t){this.outputShape=[],this.outputShape=Sn(t,1),this.variableNames=t.map((function(t,e){return "T"+e}));var e=new Array(t.length-1);e[0]=t[0][1];for(var n=1;n= "+s[u-1]+") {\n return getChannel(\n getT"+u+"("+Ha(i,c,d)+"),\n vec2("+Ha(l,c,d)+"));\n }";}var p=s.length,v=s[s.length-1];f+="\n return getChannel(\n getT"+p+"("+Ha(i,c,v)+"),\n vec2("+Ha(l,c,v)+"));",this.userCode="\n float getValue("+i.map((function(t){return "int "+t}))+") {\n "+f+"\n }\n\n void main() {\n "+o+" coords = getOutputCoords();\n vec4 result = vec4(getValue("+a+"), 0., 0., 0.);\n\n "+a[r-1]+" = "+a[r-1]+" + 1;\n if ("+a[r-1]+" < "+n[r-1]+") {\n result.g = getValue("+a+");\n }\n\n "+a[r-2]+" = "+a[r-2]+" + 1;\n if ("+a[r-2]+" < "+n[r-2]+") {\n result.a = getValue("+a+");\n }\n\n "+a[r-1]+" = "+a[r-1]+" - 1;\n if ("+a[r-2]+" < "+n[r-2]+" &&\n "+a[r-1]+" < "+n[r-1]+") {\n result.b = getValue("+a+");\n }\n setOutput(result);\n }\n ";};function Ha(t,e,n){var r=t.indexOf(e);return t.map((function(t,e){return e===r?t+" - "+n:t})).join()}var qa=function(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideHeight,n=t.strideWidth,r=t.padInfo.top,o=t.padInfo.left,a="channelsLast"===t.dataFormat;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int d2 = coords.w;\n\n // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int b = 0; b < "+t.batchSize+"; b++) {\n for (int yR = 0; yR < "+t.outHeight+"; yR++) {\n int xR = wR + yR * "+e+" - "+r+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+t.outWidth+"; yC++) {\n int xC = wC + yC * "+n+" - "+o+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n if ("+a+") {\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n } else {\n float dyValue = getDy(b, d2, yR, yC);\n float xValue = getX(b, d1, xR, xC);\n dotProd += (xValue * dyValue);\n }\n\n }\n }\n }\n setOutput(dotProd);\n }\n ";},Ka=function(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,o=t.strideWidth,a="channelsLast"===t.dataFormat,i=e-1-t.padInfo.top,s=n-1-t.padInfo.left,u=a?1:2,c=a?2:3,l=a?3:1;this.userCode="\n const ivec2 pads = ivec2("+i+", "+s+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords["+l+"];\n\n ivec2 dyCorner = ivec2(coords["+u+"], coords["+c+"]) - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+e+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+e+" - 1 - wR;\n\n for (int wC = 0; wC < "+n+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+n+" - 1 - wC;\n\n for (int d2 = 0; d2 < "+t.outChannels+"; d2++) {\n\n if ("+a+") {\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n } else {\n float xValue = getDy(batch, d2, idyR, idyC);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n\n }\n }\n }\n setOutput(dotProd);\n }\n ";},ja=function(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideDepth,n=t.strideHeight,r=t.strideWidth,o=t.padInfo.front,a=t.padInfo.top,i=t.padInfo.left;this.userCode="\n void main() {\n ivec5 coords = getOutputCoords();\n int wF = coords.x;\n int wR = coords.y;\n int wC = coords.z;\n int d1 = coords.w;\n int d2 = coords.u;\n\n float dotProd = 0.0;\n\n for (int b = 0; b < "+t.batchSize+"; b++) {\n for (int yF = 0; yF < "+t.outDepth+"; yF++) {\n int xF = wF + yF * "+e+" - "+o+";\n\n if (xF < 0 || xF >= "+t.inDepth+") {\n continue;\n }\n\n for (int yR = 0; yR < "+t.outHeight+"; yR++) {\n int xR = wR + yR * "+n+" - "+a+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+t.outWidth+"; yC++) {\n int xC = wC + yC * "+r+" - "+i+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float dyValue = getDy(b, yF, yR, yC, d2);\n float xValue = getX(b, xF, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n ";},Xa=function(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterDepth,n=t.filterHeight,r=t.filterWidth,o=t.strideDepth,a=t.strideHeight,i=t.strideWidth,s=e-1-t.padInfo.front,u=n-1-t.padInfo.top,c=r-1-t.padInfo.left;this.userCode="\n const ivec3 pads = ivec3("+s+", "+u+", "+c+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d1 = coords.u;\n\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyFCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n float dotProd = 0.0;\n for (int wF = 0; wF < "+e+"; wF++) {\n float dyF = float(dyFCorner + wF) / "+o+".0;\n\n if (dyF < 0.0 || dyF >= "+t.outDepth+".0 || fract(dyF) > 0.0) {\n continue;\n }\n int idyF = int(dyF);\n\n int wFPerm = "+e+" - 1 - wF;\n\n for (int wR = 0; wR < "+n+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+a+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+n+" - 1 - wR;\n\n for (int wC = 0; wC < "+r+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+i+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+r+" - 1 - wC;\n\n for (int d2 = 0; d2 < "+t.outChannels+"; d2++) {\n float xValue = getDy(batch, idyF, idyR, idyC, d2);\n float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n }\n setOutput(dotProd);\n }\n ";},Ya=function(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideHeight,n=t.strideWidth,r=t.padInfo.top,o=t.padInfo.left,a=t.outChannels/t.inChannels;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int dm = coords.w;\n int d2 = d1 * "+a+" + dm;\n\n float dotProd = 0.0;\n\n // TO DO: Vec4 over the batch size\n for (int b = 0; b < "+t.batchSize+"; b++) {\n for (int yR = 0; yR < "+t.outHeight+"; yR++) {\n int xR = wR + yR * "+e+" - "+r+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+t.outWidth+"; yC++) {\n int xC = wC + yC * "+n+" - "+o+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n setOutput(dotProd);\n }\n ";},$a=function(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,o=t.strideWidth,a=e-1-t.padInfo.top,i=n-1-t.padInfo.left,s=t.outChannels/t.inChannels;this.userCode="\n const ivec2 pads = ivec2("+a+", "+i+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n ivec2 dyCorner = coords.yz - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n float dotProd = 0.0;\n\n for (int wR = 0; wR < "+e+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+e+" - 1 - wR;\n\n for (int wC = 0; wC < "+n+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+n+" - 1 - wC;\n\n // TO DO: Vec4 over the channelMul\n for (int dm = 0; dm < "+s+"; dm++) {\n int d2 = d1 * "+s+" + dm;\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, dm);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutput(dotProd);\n }\n ";},Qa=function(t,e,n,r){void 0===e&&(e=!1),void 0===n&&(n=null),void 0===r&&(r=!1),this.variableNames=["x","W"],this.outputShape=t.outShape;var o=t.padInfo.top,a=t.padInfo.left,i=t.strideHeight,s=t.strideWidth,u=t.dilationHeight,c=t.dilationWidth,l=t.filterHeight,h=t.filterWidth,f=4*Math.floor(t.inChannels/4),d=t.inChannels%4,p="channelsLast"===t.dataFormat,v=p?1:2,m=p?2:3,g=p?3:1,y="",x="";n&&(y=r?"float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n "+n+"\n }":"\n float activation(float x) {\n "+n+"\n }\n ",x="result = activation(result);");var b=e?"result += getBiasAtOutCoords();":"";e&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+y+"\n\n const ivec2 strides = ivec2("+i+", "+s+");\n const ivec2 pads = ivec2("+o+", "+a+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d2 = coords["+g+"];\n\n ivec2 xRCCorner =\n ivec2(coords["+v+"], coords["+m+"]) * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+l+"; wR++) {\n int xR = xRCorner + wR * "+u+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+h+"; wC++) {\n int xC = xCCorner + wC * "+c+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n for (int d1 = 0; d1 < "+f+"; d1 += 4) {\n vec4 wValues = vec4(\n getW(wR, wC, d1, d2),\n getW(wR, wC, d1 + 1, d2),\n getW(wR, wC, d1 + 2, d2),\n getW(wR, wC, d1 + 3, d2)\n );\n\n if ("+p+") {\n vec4 xValues = vec4(\n getX(batch, xR, xC, d1),\n getX(batch, xR, xC, d1 + 1),\n getX(batch, xR, xC, d1 + 2),\n getX(batch, xR, xC, d1 + 3)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec4 xValues = vec4(\n getX(batch, d1, xR, xC),\n getX(batch, d1 + 1, xR, xC),\n getX(batch, d1 + 2, xR, xC),\n getX(batch, d1 + 3, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n\n if ("+(1===d)+") {\n\n if ("+p+") {\n dotProd +=\n getX(batch, xR, xC, "+f+") *\n getW(wR, wC, "+f+", d2);\n } else {\n dotProd +=\n getX(batch, "+f+", xR, xC) *\n getW(wR, wC, "+f+", d2);\n }\n\n } else if ("+(2===d)+") {\n vec2 wValues = vec2(\n getW(wR, wC, "+f+", d2),\n getW(wR, wC, "+f+" + 1, d2)\n );\n\n if ("+p+") {\n vec2 xValues = vec2(\n getX(batch, xR, xC, "+f+"),\n getX(batch, xR, xC, "+f+" + 1)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec2 xValues = vec2(\n getX(batch, "+f+", xR, xC),\n getX(batch, "+f+" + 1, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n } else if ("+(3===d)+") {\n vec3 wValues = vec3(\n getW(wR, wC, "+f+", d2),\n getW(wR, wC, "+f+" + 1, d2),\n getW(wR, wC, "+f+" + 2, d2)\n );\n\n if ("+p+") {\n vec3 xValues = vec3(\n getX(batch, xR, xC, "+f+"),\n getX(batch, xR, xC, "+f+" + 1),\n getX(batch, xR, xC, "+f+" + 2)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec3 xValues = vec3(\n getX(batch, "+f+", xR, xC),\n getX(batch, "+f+" + 1, xR, xC),\n getX(batch, "+f+" + 2, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n }\n }\n }\n\n float result = dotProd;\n "+b+"\n "+x+"\n setOutput(result);\n }\n ";},Ja=function(t){this.variableNames=["x","W"],this.outputShape=t.outShape;var e=t.padInfo.front,n=t.padInfo.top,r=t.padInfo.left,o=t.strideDepth,a=t.strideHeight,i=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.filterDepth,h=t.filterHeight,f=t.filterWidth,d=4*Math.floor(t.inChannels/4),p=t.inChannels%4;this.userCode="\n const ivec3 strides = ivec3("+o+", "+a+", "+i+");\n const ivec3 pads = ivec3("+e+", "+n+", "+r+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d2 = coords.u;\n\n ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xFCorner = xFRCCorner.x;\n int xRCorner = xFRCCorner.y;\n int xCCorner = xFRCCorner.z;\n\n // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\n // y(yF, yR, yC, d2). ? = to be determined. : = across all\n // values in that axis.\n float dotProd = 0.0;\n for (int wF = 0; wF < "+l+"; wF++) {\n int xF = xFCorner + wF * "+s+";\n\n if (xF < 0 || xF >= "+t.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+h+"; wR++) {\n int xR = xRCorner + wR * "+u+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+f+"; wC++) {\n int xC = xCCorner + wC * "+c+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n for (int d1 = 0; d1 < "+d+"; d1 += 4) {\n vec4 xValues = vec4(\n getX(batch, xF, xR, xC, d1),\n getX(batch, xF, xR, xC, d1 + 1),\n getX(batch, xF, xR, xC, d1 + 2),\n getX(batch, xF, xR, xC, d1 + 3)\n );\n vec4 wValues = vec4(\n getW(wF, wR, wC, d1, d2),\n getW(wF, wR, wC, d1 + 1, d2),\n getW(wF, wR, wC, d1 + 2, d2),\n getW(wF, wR, wC, d1 + 3, d2)\n );\n\n dotProd += dot(xValues, wValues);\n }\n\n if ("+(1===p)+") {\n dotProd +=\n getX(batch, xF, xR, xC, "+d+") *\n getW(wF, wR, wC, "+d+", d2);\n } else if ("+(2===p)+") {\n vec2 xValues = vec2(\n getX(batch, xF, xR, xC, "+d+"),\n getX(batch, xF, xR, xC, "+d+" + 1)\n );\n vec2 wValues = vec2(\n getW(wF, wR, wC, "+d+", d2),\n getW(wF, wR, wC, "+d+" + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if ("+(3===p)+") {\n vec3 xValues = vec3(\n getX(batch, xF, xR, xC, "+d+"),\n getX(batch, xF, xR, xC, "+d+" + 1),\n getX(batch, xF, xR, xC, "+d+" + 2)\n );\n vec3 wValues = vec3(\n getW(wF, wR, wC, "+d+", d2),\n getW(wF, wR, wC, "+d+" + 1, d2),\n getW(wF, wR, wC, "+d+" + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n ";},Za=function(t,e,n,r){void 0===e&&(e=!1),void 0===n&&(n=null),void 0===r&&(r=!1),this.variableNames=["x","W"],this.outputShape=t.outShape;var o=t.inHeight,a=t.inWidth,i=t.padInfo.top,s=t.padInfo.left,u=t.strideHeight,c=t.strideWidth,l=t.dilationHeight,h=t.dilationWidth,f=t.filterHeight,d=t.filterWidth,p=t.outChannels/t.inChannels,v="",m="";n&&(v=r?"float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n "+n+"\n }":"\n float activation(float x) {\n "+n+"\n }\n ",m="result = activation(result);");var g=e?"result += getBiasAtOutCoords();":"";e&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+v+"\n\n const ivec2 strides = ivec2("+u+", "+c+");\n const ivec2 pads = ivec2("+i+", "+s+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n ivec2 xRCCorner = coords.yz * strides - pads;\n int d2 = coords.w;\n int d1 = d2 / "+p+";\n int q = d2 - d1 * "+p+";\n\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.\n for (int wR = 0; wR < "+f+"; wR++) {\n int xR = xRCorner + wR * "+l+";\n\n if (xR < 0 || xR >= "+o+") {\n continue;\n }\n\n for (int wC = 0; wC < "+d+"; wC++) {\n int xC = xCCorner + wC * "+h+";\n\n if (xC < 0 || xC >= "+a+") {\n continue;\n }\n\n float xVal = getX(batch, xR, xC, d1);\n float wVal = getW(wR, wC, d1, q);\n dotProd += xVal * wVal;\n }\n }\n\n float result = dotProd;\n "+g+"\n "+m+"\n setOutput(result);\n }\n ";},ti=function(t,e,n,r){void 0===e&&(e=!1),void 0===n&&(n=null),void 0===r&&(r=!1),this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.outShape;for(var o=t.inHeight,a=t.inWidth,i=t.padInfo.top,s=t.padInfo.left,u=t.strideHeight,c=t.strideWidth,l=t.dilationHeight,h=t.dilationWidth,f=t.filterHeight,d=t.filterWidth,p=d,v="int xR; int xC; int xCOffset;",m=0;m= 0 && xR < "+o+" && xCOffset >= 0 && xCOffset < "+a+") {\n xTexelR"+m+"C"+g+" = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if(xCOffset + 1 >= "+a+") {\n xTexelR"+m+"C"+g+".zw = vec2(0.);\n }\n } else {\n xTexelR"+m+"C"+g+" = vec4(0.);\n }\n\n xCOffset = xC + 1 - 2;\n if(xR >= 0 && xR < "+o+" && xCOffset >= 0 && xCOffset < "+a+") {\n vec4 previous = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if(xCOffset + 1 >= "+a+") {\n previous.zw = vec2(0.);\n }\n\n xR"+m+"C"+g+" = vec4(previous.zw, xTexelR"+m+"C"+g+".xy);\n } else {\n xR"+m+"C"+g+" = vec4(0, 0, xTexelR"+m+"C"+g+".xy);\n }\n ":"\n if(xR >= 0 && xR < "+o+" && xC >= 0 && xC < "+a+") {\n xTexelR"+m+"C"+g+" = getX(batch, xR, xC, d1);\n } else {\n xTexelR"+m+"C"+g+" = vec4(0.);\n }\n\n xR"+m+"C"+g+" = xTexelR"+m+"C"+g+";\n ",g+1= 0 && xR < "+o+" &&\n xCOffset >= 0 && xCOffset < "+a+") {\n xTexelR"+m+"C"+(g+2)+" = getX(batch, xR, xCOffset, d1);\n }\n ",h>1&&(v+="\n xCOffset -= 2;\n if(xR >= 0 && xR < "+o+" &&\n xCOffset >= 0 && xCOffset < "+a+") {\n xTexelR"+m+"C"+g+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+m+"C"+g+" = vec4(0.);\n }\n "),v+="\n xR"+m+"C"+(g+1)+" = vec4(\n xTexelR"+m+"C"+g+".zw, xTexelR"+m+"C"+(g+2)+".xy);\n "):v+="\n xCOffset = xC + "+x+";\n\n if(xR >= 0 && xR < "+o+" &&\n xCOffset >= 0 && xCOffset < "+a+") {\n xTexelR"+m+"C"+(g+2)+" = getX(batch, xR, xCOffset, d1);\n }\n\n xR"+m+"C"+(g+1)+" = xTexelR"+m+"C"+(g+2)+";\n ";}}else g= 0 && xR < "+o+") {\n ",s%2==1?(v+="\n xCOffset = xC + 1 - "+c+";\n if(xCOffset >= 0 && xCOffset < "+a+") {\n xTexelR"+m+"C"+g+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+m+"C"+g+" = vec4(0.);\n }\n\n if(xC + 1 >= 0 && xC + 1 < "+a+") {\n xTexelR"+m+"C"+(g+2)+" = getX(batch, xR, xC + 1, d1);\n } else {\n xTexelR"+m+"C"+(g+2)+" = vec4(0.);\n }\n\n xR"+m+"C"+g+" = vec4(\n xTexelR"+m+"C"+g+".zw, xTexelR"+m+"C"+(g+2)+".zw);\n ",g+1= 0 && xCOffset < "+a+") {\n final = getX(batch, xR, xCOffset, d1);\n }\n xR"+m+"C"+(g+1)+" = vec4(xTexelR"+m+"C"+(g+2)+".xy, final.xy);\n ")):(v+="\n if(xC >= 0 && xC < "+a+") {\n xTexelR"+m+"C"+g+" = getX(batch, xR, xC, d1);\n } else {\n xTexelR"+m+"C"+g+" = vec4(0.);\n }\n\n xCOffset = xC + "+c+";\n if(xCOffset >= 0 && xCOffset < "+a+") {\n xTexelR"+m+"C"+(g+2)+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+m+"C"+(g+2)+" = vec4(0.);\n }\n\n xR"+m+"C"+g+" = vec4(\n xTexelR"+m+"C"+g+".xy, xTexelR"+m+"C"+(g+2)+".xy);\n ",g+11?[""+(i-1)/(l-1),"(y2-y1) * height_ratio","y1*"+p+" + float(y)*(height_scale)"]:["0.0","0.0","0.5 * (y1+y2) * "+p],g=m[0],y=m[1],x=m[2],b=h>1?[""+(s-1)/(h-1),"(x2-x1) * width_ratio","x1*"+v+" + float(x)*(width_scale)"]:["0.0","0.0","0.5 * (x1+x2) * "+v],w=b[0],C=b[1],E=b[2];this.userCode="\n const float height_ratio = float("+g+");\n const float width_ratio = float("+w+");\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int y = coords[1];\n int x = coords[2];\n int d = coords[3];\n\n // get box vals\n float y1 = getBoxes(b,0);\n float x1 = getBoxes(b,1);\n float y2 = getBoxes(b,2);\n float x2 = getBoxes(b,3);\n\n // get image in batch index\n int bInd = round(getBoxInd(b));\n if(bInd < 0 || bInd >= "+a+") {\n return;\n }\n\n float height_scale = "+y+";\n float width_scale = "+C+";\n\n float in_y = "+x+";\n if( in_y < 0.0 || in_y > "+p+" ) {\n setOutput(float("+o+"));\n return;\n }\n float in_x = "+E+";\n if( in_x < 0.0 || in_x > "+v+" ) {\n setOutput(float("+o+"));\n return;\n }\n\n vec2 sourceFracIndexCR = vec2(in_x,in_y);\n if("+f+" == 1) {\n // Compute the four integer indices.\n ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\n ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\n\n float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\n float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\n float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\n float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\n\n vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n\n float top = topLeft + (topRight - topLeft) * fracCR.x;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n float newValue = top + (bottom - top) * fracCR.y;\n setOutput(newValue);\n } else {\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestCR = ivec2(floor(\n sourceFracIndexCR + vec2(0.5,0.5)));\n float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\n setOutput(newValue);\n }\n }\n ";},ni=function(t,e,n){this.variableNames=["x"],this.outputShape=t;var r=t.length,o=t[t.length-1],a=n?"<":">";this.userCode="\n int getIndex(int i) {\n "+(n?"return "+o+" -i - 1;":"return i;")+"\n }\n\n void main() {\n "+wa(r)+" coords = getOutputCoords();\n int end = "+ri(r,"coords")+";\n float val = 0.0;\n for (int i = "+o+" - 1; i >= 0; i -= 1) {\n int idx = getIndex(i);\n if (idx "+a+" end) {\n continue;\n }\n if (idx == end && "+e+") {\n continue;\n }\n "+ri(r,"coords")+" = idx;\n val += getX("+function(t,e){if(1===t)return ""+e;if(2===t)return e+".x, "+e+".y";if(3===t)return e+".x, "+e+".y, "+e+".z";if(4===t)return e+".x, "+e+".y, "+e+".z, "+e+".w";throw Error("Cumulative sum for rank "+t+" is not yet supported")}(r,"coords")+");\n }\n setOutput(val);\n }\n ";};function ri(t,e){if(1===t)return ""+e;if(2===t)return e+".y";if(3===t)return e+".z";if(4===t)return e+".w";throw Error("Cumulative sum for rank "+t+" is not yet supported")}var oi=function(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Vt.DENSE;var e=Yt(t),n=ua();this.outputShape=t,this.userCode="\n ivec3 outCoordsFromFlatIndex(int index) {\n "+ca(["r","c","d"],t)+"\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+e[0]+", "+e[1]+"));\n int index = 4 * (resTexRC.x * "+e[1]+" + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getA(rc.x, rc.y, rc.z);\n }\n\n "+n.output+" = result;\n }\n ";},ai=function(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Vt.DENSE;var e=Yt(t),n=ua();this.outputShape=t,this.userCode="\n ivec3 outCoordsFromFlatIndex(int index) {\n "+ca(["r","c","d"],t)+"\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+e[0]+", "+e[1]+"));\n int index = 4 * (resTexRC.x * "+e[1]+" + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));\n }\n\n "+n.output+" = result;\n }\n ";},ii=function(){function t(t,e,n){this.variableNames=["x"],this.outputShape=[],this.outputShape=t,this.blockSize=e,this.dataFormat=n,this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int h = "+this.getHeightCoordString()+";\n int w = "+this.getWidthCoordString()+";\n int d = "+this.getDepthCoordString()+";\n\n int in_h = h / "+e+";\n int offset_h = imod(h, "+e+");\n int in_w = w / "+e+";\n int offset_w = imod(w, "+e+");\n int offset_d = (offset_h * "+e+" + offset_w) *\n "+this.getOutputDepthSize()+";\n int in_d = d + offset_d;\n\n float result = "+this.getInputSamplingString()+";\n setOutput(result);\n }\n ";}return t.prototype.getHeightCoordString=function(){return "NHWC"===this.dataFormat?"coords[1]":"coords[2]"},t.prototype.getWidthCoordString=function(){return "NHWC"===this.dataFormat?"coords[2]":"coords[3]"},t.prototype.getDepthCoordString=function(){return "NHWC"===this.dataFormat?"coords[3]":"coords[1]"},t.prototype.getOutputDepthSize=function(){return "NHWC"===this.dataFormat?this.outputShape[3]:this.outputShape[1]},t.prototype.getInputSamplingString=function(){return "NHWC"===this.dataFormat?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"},t}(),si=function(t){this.variableNames=["X"],this.outputShape=[t,t],this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;\n setOutput(val);\n }\n ";},ui=function(t){this.variableNames=["A"],this.outTexUsage=zt.DOWNLOAD;var e=ua();this.outputShape=t,this.userCode="\n "+ha+"\n\n void main() {\n float x = getAAtOutCoords();\n "+e.output+" = encode_float(x);\n }\n ";},ci=function(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=zt.DOWNLOAD;var e=ua();this.outputShape=t,this.userCode="\n "+ha+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n "+e.output+" = encode_float(x);\n }\n ";},li=function(t,e,n){void 0===n&&(n=!1),this.variableNames=["A"];var r=ua(),o=e[0],a=e[1];this.outputShape=t;var i="result";n&&(i="floor(result * 255. + 0.5)"),this.userCode="\n "+la(t)+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n\n int flatIndex = getFlatIndex(coords);\n int offset = imod(flatIndex, 4);\n\n flatIndex = idiv(flatIndex, 4, 1.);\n \n int r = flatIndex / "+a+";\n int c = imod(flatIndex, "+a+");\n vec2 uv = (vec2(c, r) + halfCR) / vec2("+a+".0, "+o+".0);\n vec4 values = "+r.texture2D+"(A, uv);\n\n float result;\n\n if(offset == 0) {\n result = values[0];\n } else if(offset == 1) {\n result = values[1];\n } else if(offset == 2) {\n result = values[2];\n } else {\n result = values[3];\n }\n\n "+r.output+" = vec4("+i+", 0., 0., 0.);\n }\n ";},hi=function(t,e,n){void 0===n&&(n=!1),this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;var r=ua(),o=e[0],a=e[1];this.outputShape=t;var i="",s="result";n&&(s="floor(result * 255. + 0.5)");for(var u=0;u<=1;u++)for(var c=0;c<=1;c++){var l=2*u+c;i+="\n localCoords = coords;\n if(localCoords[2] + "+c+" < "+t[2]+") {\n localCoords[2] += "+c+";\n if(localCoords[1] + "+u+" < "+t[1]+") {\n localCoords[1] += "+u+";\n\n flatIndex = getFlatIndex(localCoords);\n offset = imod(flatIndex, 4);\n\n flatIndex = idiv(flatIndex, 4, 1.);\n\n r = flatIndex / "+a+";\n c = imod(flatIndex, "+a+");\n uv = (vec2(c, r) + halfCR) / vec2("+a+".0, "+o+".0);\n values = "+r.texture2D+"(A, uv);\n\n if(offset == 0) {\n result["+l+"] = values[0];\n } else if(offset == 1) {\n result["+l+"] = values[1];\n } else if(offset == 2) {\n result["+l+"] = values[2];\n } else {\n result["+l+"] = values[3];\n }\n }\n }\n ";}this.userCode="\n "+la(t)+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n\n vec4 result = vec4(0.);\n int flatIndex, r, c, offset;\n ivec3 localCoords;\n vec2 uv;\n vec4 values;\n\n "+i+"\n\n "+r.output+" = "+s+";\n }\n ";},fi="return real * expR - imag * expI;",di="return real * expI + imag * expR;",pi=function(t,e,n){this.variableNames=["real","imag"];var r=e[1];this.outputShape=e;var o=n?"2.0 * "+Math.PI:"-2.0 * "+Math.PI,a=n?r+".0":"1.0";this.userCode="\n const float exponentMultiplier = "+o+";\n\n float unaryOpComplex(float real, float expR, float imag, float expI) {\n "+t+"\n }\n\n float mulMatDFT(int batch, int index) {\n float indexRatio = float(index) / float("+r+");\n float exponentMultiplierTimesIndexRatio =\n exponentMultiplier * indexRatio;\n\n float result = 0.0;\n\n for (int i = 0; i < "+r+"; i++) {\n // x = (-2|2 * PI / N) * index * i;\n float x = exponentMultiplierTimesIndexRatio * float(i);\n float expR = cos(x);\n float expI = sin(x);\n float real = getReal(batch, i);\n float imag = getImag(batch, i);\n\n result +=\n unaryOpComplex(real, expR, imag, expI) / "+a+";\n }\n\n return result;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n setOutput(mulMatDFT(coords[0], coords[1]));\n }\n ";},vi=function(){function t(t,e){this.outputShape=[],this.variableNames=["x"],this.outputShape=t,this.userCode="\n uniform float value;\n void main() {\n // Input can be obtained from uniform value.\n setOutput(value);\n }\n ";}return t.prototype.getCustomSetupFunc=function(t){var e=this;return function(n,r){null==e.valueLoc&&(e.valueLoc=n.getUniformLocationNoThrow(r,"value")),n.gl.uniform1f(e.valueLoc,t);}},t}(),mi=function(t,e,n){this.variableNames=["A","indices"];var r=t.slice();r[n]=e,this.outputShape=r,this.rank=r.length;var o=wa(this.rank),a=function(t,e){var n=t.length;if(n>4)throw Error("Gather for rank "+n+" is not yet supported");if(1===n)return "int(getIndices(resRC))";for(var r=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],a=0;a1?"strides[j]":"strides";this.userCode="\n "+r+" strides = "+r+"("+this.strides+");\n void main() {\n "+o+" coords = getOutputCoords();\n int flattenIndex = 0;\n for (int j = 0; j < "+this.sliceDim+"; j++) {\n int index = round(getIndices(coords[0], j));\n flattenIndex += index * "+a+";\n }\n setOutput(getX(flattenIndex, coords[1]));\n }\n ";};function yi(t,e){var n=ua();return oe(t,e,n.version+"\n precision highp float;\n "+n.attribute+" vec3 clipSpacePos;\n "+n.attribute+" vec2 uv;\n "+n.varyingVs+" vec2 resultUV;\n\n void main() {\n gl_Position = vec4(clipSpacePos, 1);\n resultUV = uv;\n }")}function xi(t,e){return fe(t,e,new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]))}function bi(t,e){return de(t,e,new Uint16Array([0,1,2,2,1,3]))}function wi(t,e,n,r,o,a,i){ve(n,r);var s=pe(t,e),u=t.TEXTURE_2D;return Jt(t,e,(function(){return t.bindTexture(u,s)})),Jt(t,e,(function(){return t.texParameteri(u,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE)})),Jt(t,e,(function(){return t.texParameteri(u,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)})),Jt(t,e,(function(){return t.texParameteri(u,t.TEXTURE_MIN_FILTER,t.NEAREST)})),Jt(t,e,(function(){return t.texParameteri(u,t.TEXTURE_MAG_FILTER,t.NEAREST)})),Jt(t,e,(function(){return t.texImage2D(u,0,o,n,r,0,a,i,null)})),Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,null)})),s}function Ci(t,e,n,r,o){var a=Xt(n,r);return wi(t,e,a[0],a[1],o.internalFormatFloat,o.textureFormatFloat,t.FLOAT)}function Ei(t,e,n,r,o){var a=Xt(n,r);return wi(t,e,a[0],a[1],o.internalFormatHalfFloat,o.textureFormatFloat,o.textureTypeHalfFloat)}function Ri(t,e,n,r,o){var a=Xt(n,r);return wi(t,e,a[0],a[1],t.RGBA,t.RGBA,t.UNSIGNED_BYTE)}function Ii(t,e,n,r,o){var a=$t(n,r);return wi(t,e,a[0],a[1],o.internalFormatPackedFloat,t.RGBA,t.FLOAT)}function ki(t,e,n,r,o){var a=$t(n,r);return wi(t,e,a[0],a[1],o.internalFormatPackedHalfFloat,t.RGBA,o.textureTypeHalfFloat)}function Si(t,e,n,r){return Jt(t,e,(function(){return t.bindBuffer(t.ARRAY_BUFFER,r)})),ge(t,e,n,"clipSpacePos",r,3,20,0)&&ge(t,e,n,"uv",r,2,20,12)}function Ai(t,e,n,r,o,a,i){var s,u,c;Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,n)})),a instanceof Uint8Array?(s=new Uint8Array(r*o*4),u=t.UNSIGNED_BYTE,c=t.RGBA):(s=new Float32Array(r*o*4),u=t.FLOAT,c=i.internalFormatPackedFloat),s.set(a),Jt(t,e,(function(){return t.texImage2D(t.TEXTURE_2D,0,c,r,o,0,t.RGBA,u,s)})),Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,null)}));}function Di(t,e,n,r){Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,n)})),r.data instanceof Uint8Array?Jt(t,e,(function(){return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,r.width,r.height,0,t.RGBA,t.UNSIGNED_BYTE,r.data)})):Jt(t,e,(function(){return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r)})),Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,null)}));}function Ti(t,e,n,r,o){var a=t.createBuffer();Jt(t,e,(function(){return t.bindBuffer(t.PIXEL_PACK_BUFFER,a)}));var i=16*n*r;return Jt(t,e,(function(){return t.bufferData(t.PIXEL_PACK_BUFFER,i,t.STREAM_READ)})),Jt(t,e,(function(){return t.readPixels(0,0,r,n,t.RGBA,t.FLOAT,0)})),Jt(t,e,(function(){return t.bindBuffer(t.PIXEL_PACK_BUFFER,null)})),a}function Ni(t,e,n){var r=t,o=new Float32Array(n);return r.bindBuffer(r.PIXEL_PACK_BUFFER,e),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,o),r.bindBuffer(r.PIXEL_PACK_BUFFER,null),o}function Fi(t,e,n,r,o){var a=Xt(n,r),i=a[0],s=a[1],u=new Uint8Array(n*r*4);return Jt(t,e,(function(){return t.readPixels(0,0,i,s,o.downloadTextureFormat,t.UNSIGNED_BYTE,u)})),new Float32Array(u.buffer)}function _i(t,e,n,r,o,a,i,s){var u=t,c=new Float32Array(function(t,e){var n=$t(t,e);return n[0]*n[1]*4}(a,i));return u.bindBuffer(u.PIXEL_PACK_BUFFER,e),u.getBufferSubData(u.PIXEL_PACK_BUFFER,0,c),u.bindBuffer(u.PIXEL_PACK_BUFFER,null),c}function Oi(t,e,n,r){var o=new Float32Array(n*r*4);return Jt(t,e,(function(){return t.readPixels(0,0,r,n,t.RGBA,t.FLOAT,o)})),o}var Mi=Object.freeze({createVertexShader:yi,createVertexBuffer:xi,createIndexBuffer:bi,createFloat32MatrixTexture:Ci,createFloat16MatrixTexture:Ei,createUnsignedBytesMatrixTexture:Ri,createPackedMatrixTexture:Ii,createFloat16PackedMatrixTexture:ki,bindVertexProgramAttributeStreams:Si,uploadDenseMatrixToTexture:Ai,uploadPixelDataToTexture:Di,createBufferFromOutputTexture:Ti,downloadFloat32MatrixFromBuffer:Ni,downloadByteEncodedFloatMatrixFromOutputTexture:Fi,downloadPackedMatrixFromBuffer:_i,downloadMatrixFromPackedOutputTexture:Oi}),Bi=function(){function t(t){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];var e=i().getNumber("WEBGL_VERSION");null!=t?(this.gl=t,Kt(e,t)):this.gl=jt(e);var n="WEBGL_color_buffer_float";if(1===i().getNumber("WEBGL_VERSION")){if(this.textureFloatExtension=re(this.gl,this.debug,"OES_texture_float"),Pe(this.gl,"OES_texture_half_float"))this.textureHalfFloatExtension=re(this.gl,this.debug,"OES_texture_half_float");else if(i().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.");if(this.colorBufferFloatExtension=this.gl.getExtension(n),Pe(this.gl,"EXT_color_buffer_half_float"))this.colorBufferHalfFloatExtension=re(this.gl,this.debug,"EXT_color_buffer_half_float");else if(i().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}else if(n="EXT_color_buffer_float",Pe(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else {if(!Pe(this.gl,"EXT_color_buffer_half_float"))throw new Error("GL context does not support color renderable floats");this.colorBufferHalfFloatExtension=this.gl.getExtension("EXT_color_buffer_half_float");}this.vertexBuffer=xi(this.gl,this.debug),this.indexBuffer=bi(this.gl,this.debug),this.framebuffer=me(this.gl,this.debug),this.textureConfig=Qt(this.gl,this.textureHalfFloatExtension);}return Object.defineProperty(t.prototype,"debug",{get:function(){return i().getBool("DEBUG")},enumerable:!0,configurable:!0}),t.prototype.dispose=function(){var t=this;if(!this.disposed){null!=this.program&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),null!=this.outputTexture&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");var e=this.gl;Jt(e,this.debug,(function(){return e.finish()})),Jt(e,this.debug,(function(){return e.bindFramebuffer(e.FRAMEBUFFER,null)})),Jt(e,this.debug,(function(){return e.deleteFramebuffer(t.framebuffer)})),Jt(e,this.debug,(function(){return e.bindBuffer(e.ARRAY_BUFFER,null)})),Jt(e,this.debug,(function(){return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)})),Jt(e,this.debug,(function(){return e.deleteBuffer(t.indexBuffer)})),this.disposed=!0;}},t.prototype.createFloat32MatrixTexture=function(t,e){return this.throwIfDisposed(),Ci(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createFloat16MatrixTexture=function(t,e){return this.throwIfDisposed(),Ei(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createUnsignedBytesMatrixTexture=function(t,e){return this.throwIfDisposed(),Ri(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.uploadPixelDataToTexture=function(t,e){this.throwIfDisposed(),Di(this.gl,this.debug,t,e);},t.prototype.uploadDenseMatrixToTexture=function(t,e,n,r){this.throwIfDisposed(),Ai(this.gl,this.debug,t,e,n,r,this.textureConfig);},t.prototype.createFloat16PackedMatrixTexture=function(t,e){return this.throwIfDisposed(),ki(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createPackedMatrixTexture=function(t,e){return this.throwIfDisposed(),Ii(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.deleteMatrixTexture=function(t){var e=this;this.throwIfDisposed(),this.outputTexture===t&&(Ee(this.gl,this.debug,this.framebuffer),this.outputTexture=null),Jt(this.gl,this.debug,(function(){return e.gl.deleteTexture(t)}));},t.prototype.downloadByteEncodedFloatMatrixFromOutputTexture=function(t,e,n){var r=this;return this.downloadMatrixDriver(t,(function(){return Fi(r.gl,r.debug,e,n,r.textureConfig)}))},t.prototype.downloadPackedMatrixFromBuffer=function(t,e,n,r,o,a){return _i(this.gl,t,0,0,0,o,a,this.textureConfig)},t.prototype.downloadFloat32MatrixFromBuffer=function(t,e){return Ni(this.gl,t,e)},t.prototype.createBufferFromTexture=function(t,e,n){this.bindTextureToFrameBuffer(t);var r=Ti(this.gl,this.debug,e,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),r},t.prototype.createAndWaitForFence=function(){var t=this.createFence(this.gl);return this.pollFence(t)},t.prototype.createFence=function(t){var e,n,r=this;if(i().getBool("WEBGL_FENCE_API_ENABLED")){var o=t,a=o.fenceSync(o.SYNC_GPU_COMMANDS_COMPLETE,0);t.flush(),n=function(){var t=o.clientWaitSync(a,0,0);return t===o.ALREADY_SIGNALED||t===o.CONDITION_SATISFIED},e=a;}else i().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(e=this.beginQuery(),this.endQuery(),n=function(){return r.isQueryAvailable(e,i().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}):n=function(){return !0};return {query:e,isFencePassed:n}},t.prototype.downloadMatrixFromPackedTexture=function(t,e,n){var r=this;return this.downloadMatrixDriver(t,(function(){return Oi(r.gl,r.debug,e,n)}))},t.prototype.createProgram=function(t){this.throwIfDisposed();var e=this.gl,n=ae(e,this.debug,t),r=yi(e,this.debug),o=ce(e,this.debug);return Jt(e,this.debug,(function(){return e.attachShader(o,r)})),Jt(e,this.debug,(function(){return e.attachShader(o,n)})),le(e,this.debug,o),this.debug&&he(e,this.debug,o),this.vertexAttrsAreBound||(this.setProgram(o),this.vertexAttrsAreBound=Si(e,this.debug,this.program,this.vertexBuffer)),o},t.prototype.deleteProgram=function(t){var e=this;this.throwIfDisposed(),t===this.program&&(this.program=null),null!=t&&Jt(this.gl,this.debug,(function(){return e.gl.deleteProgram(t)}));},t.prototype.setProgram=function(t){var e=this;this.throwIfDisposed(),this.program=t,null!=this.program&&this.debug&&he(this.gl,this.debug,this.program),Jt(this.gl,this.debug,(function(){return e.gl.useProgram(t)}));},t.prototype.getUniformLocation=function(t,e,n){return void 0===n&&(n=!0),this.throwIfDisposed(),n?xe(this.gl,this.debug,t,e):be(this.gl,t,e)},t.prototype.getAttributeLocation=function(t,e){var n=this;return this.throwIfDisposed(),Jt(this.gl,this.debug,(function(){return n.gl.getAttribLocation(t,e)}))},t.prototype.getUniformLocationNoThrow=function(t,e){return this.throwIfDisposed(),this.gl.getUniformLocation(t,e)},t.prototype.setInputMatrixTexture=function(t,e,n){this.throwIfDisposed(),this.throwIfNoProgram(),we(this.gl,this.debug,this.program,t,e,n);},t.prototype.setOutputMatrixTexture=function(t,e,n){this.setOutputMatrixTextureDriver(t,n,e);},t.prototype.setOutputPackedMatrixTexture=function(t,e,n){this.throwIfDisposed();var r=$t(e,n),o=r[0],a=r[1];this.setOutputMatrixTextureDriver(t,o,a);},t.prototype.setOutputMatrixWriteRegion=function(t,e,n,r){this.setOutputMatrixWriteRegionDriver(n,t,r,e);},t.prototype.setOutputPackedMatrixWriteRegion=function(t,e,n,r){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")},t.prototype.debugValidate=function(){null!=this.program&&he(this.gl,this.debug,this.program),Re(this.gl);},t.prototype.executeProgram=function(){this.throwIfDisposed(),this.throwIfNoProgram();var t=this.gl;this.debug&&this.debugValidate(),Jt(t,this.debug,(function(){return t.drawElements(t.TRIANGLES,6,t.UNSIGNED_SHORT,0)}));},t.prototype.blockUntilAllProgramsCompleted=function(){var t=this;this.throwIfDisposed(),Jt(this.gl,this.debug,(function(){return t.gl.finish()}));},t.prototype.getQueryTimerExtension=function(){return null==this.disjointQueryTimerExtension&&(this.disjointQueryTimerExtension=re(this.gl,this.debug,2===i().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension},t.prototype.getQueryTimerExtensionWebGL2=function(){return this.getQueryTimerExtension()},t.prototype.getQueryTimerExtensionWebGL1=function(){return this.getQueryTimerExtension()},t.prototype.beginQuery=function(){if(2===i().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){var t=this.gl,e=this.getQueryTimerExtensionWebGL2(),n=t.createQuery();return t.beginQuery(e.TIME_ELAPSED_EXT,n),n}var r=this.getQueryTimerExtensionWebGL1(),o=r.createQueryEXT();return r.beginQueryEXT(r.TIME_ELAPSED_EXT,o),o},t.prototype.endQuery=function(){if(2!==i().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){var t=this.getQueryTimerExtensionWebGL1();t.endQueryEXT(t.TIME_ELAPSED_EXT);}else {var e=this.gl,n=this.getQueryTimerExtensionWebGL2();e.endQuery(n.TIME_ELAPSED_EXT);}},t.prototype.waitForQueryAndGetTime=function(t){return n(this,void 0,void 0,(function(){var e=this;return r(this,(function(n){switch(n.label){case 0:return [4,F((function(){return e.disposed||e.isQueryAvailable(t,i().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}))];case 1:return n.sent(),[2,this.getQueryTime(t,i().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))]}}))}))},t.prototype.getQueryTime=function(t,e){if(0===e)return null;if(2===e){var n=this.gl;return n.getQueryParameter(t,n.QUERY_RESULT)/1e6}var r=this.getQueryTimerExtensionWebGL1();return r.getQueryObjectEXT(t,r.QUERY_RESULT_EXT)/1e6},t.prototype.isQueryAvailable=function(t,e){if(0===e)return !0;if(2===e){var n=this.gl,r=this.getQueryTimerExtensionWebGL2(),o=n.getQueryParameter(t,n.QUERY_RESULT_AVAILABLE);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),o&&!this.disjoint}o=(r=this.getQueryTimerExtensionWebGL1()).getQueryObjectEXT(t,r.QUERY_RESULT_AVAILABLE_EXT);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),o&&!this.disjoint},t.prototype.pollFence=function(t){var e=this;return new Promise((function(n){e.addItemToPoll((function(){return t.isFencePassed()}),(function(){return n()}));}))},t.prototype.pollItems=function(){for(var t=function(t){for(var e=0;e1||F((function(){return n.pollItems(),0===n.itemsToPoll.length}));},t.prototype.bindTextureToFrameBuffer=function(t){this.throwIfDisposed(),Ce(this.gl,this.debug,t,this.framebuffer),this.debug&&Re(this.gl);},t.prototype.unbindTextureToFrameBuffer=function(){null!=this.outputTexture?(Ce(this.gl,this.debug,this.outputTexture,this.framebuffer),this.debug&&Re(this.gl)):Ee(this.gl,this.debug,this.framebuffer);},t.prototype.downloadMatrixDriver=function(t,e){this.bindTextureToFrameBuffer(t);var n=e();return this.unbindTextureToFrameBuffer(),n},t.prototype.setOutputMatrixTextureDriver=function(t,e,n){this.throwIfDisposed();var r=this.gl;Ce(r,this.debug,t,this.framebuffer),this.debug&&Re(r),this.outputTexture=t,Jt(r,this.debug,(function(){return r.viewport(0,0,e,n)})),Jt(r,this.debug,(function(){return r.scissor(0,0,e,n)}));},t.prototype.setOutputMatrixWriteRegionDriver=function(t,e,n,r){var o=this;this.throwIfDisposed(),Jt(this.gl,this.debug,(function(){return o.gl.scissor(t,e,n,r)}));},t.prototype.throwIfDisposed=function(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")},t.prototype.throwIfNoProgram=function(){if(null==this.program)throw new Error("No GPU program is currently set.")},t}();function Pi(t,e){if(t.length!==e.length)throw Error("Binary was compiled with "+t.length+" inputs, but was executed with "+e.length+" inputs");t.forEach((function(t,n){var r=t.logicalShape,o=e[n],a=o.shape;if(!S(r,a))throw Error("Binary was compiled with different shapes than the current args. Shapes "+r+" and "+a+" must match");if(!t.isUniform||!o.isUniform){var i=t.texShape,s=o.isUniform?null:o.texData.texShape;if(!S(i,s))throw Error("Binary was compiled with different texture shapes than the current args. Shape "+i+" and "+s+" must match")}}));}var Li=function(t,e,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t;for(var r=n.filterWidth,o=n.inChannels,a=n.strideWidth,i=n.strideHeight,s=n.padInfo,u=n.outWidth,c=n.dilationWidth,l=n.dilationHeight,h=n.dataFormat,f=s.left,d=s.top,p=o*r,v=ua(),m="channelsLast"===h,g=m?0:1,y=m?1:2,x="",b=0;b<=1;b++)for(var w=0;w<=1;w++)x+="\n blockIndex = rc.y + "+w+";\n pos = rc.x + "+b+";\n\n if(blockIndex < "+t[1]+" && pos < "+t[0]+") {\n offsetY = int(blockIndex / ("+u+")) * "+i+" - "+d+";\n d0 = offsetY + "+l+" * (pos / "+p+");\n\n if(d0 < "+e[g]+" && d0 >= 0) {\n\n offsetX = int(mod(float(blockIndex), "+u+".) * "+a+". - "+f+".);\n d1 = offsetX + "+c+" * (int(mod(float(pos), "+p+".) / "+o+".));\n\n if(d1 < "+e[y]+" && d1 >= 0) {\n\n ch = int(mod(float(pos), "+o+".));\n\n if ("+m+") {\n innerDims = vec2(d1, ch);\n result["+(2*b+w)+"] = getChannel(\n getA(d0, int(innerDims.x),\n int(innerDims.y)), innerDims);\n } else {\n innerDims = vec2(d0, d1);\n result["+(2*b+w)+"] = getChannel(\n getA(ch, int(innerDims.x),\n int(innerDims.y)), innerDims);\n }\n }\n }\n }\n ";this.userCode="\n void main() {\n ivec2 rc = getOutputCoords();\n\n vec4 result = vec4(0);\n\n int blockIndex, pos, offsetY, d0, offsetX, d1, ch;\n vec2 innerDims;\n\n "+x+"\n\n "+v.output+" = result;\n }\n ";},Wi=function(t,e,n,r,o){this.variableNames=["x"],this.outputShape=[];var a,i=e,s=t[3]-1;this.outputShape=t;var u="float("+n+") + float("+r+") * sum";a=.5===o?"inversesqrt("+u+")":1===o?"1.0/("+u+")":"exp(log("+u+") * float(-"+o+"));",this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n int d = coords[3];\n float x = getX(b, r, c, d);\n float sum = 0.0;\n for (int j = -"+i+"; j <= "+i+"; j++) {\n int idx = d + j;\n if (idx >= 0 && idx <= "+s+") {\n float z = getX(b, r, c, idx);\n sum += z * z;\n }\n }\n float val = x * "+a+";\n setOutput(val);\n }\n ";},Ui=function(t,e,n,r,o){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=t,this.depth=t[3],this.depthRadius=e,this.bias=n,this.alpha=r,this.beta=o,this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n\n float result = 0.0;\n for (int d = 0; d < "+this.depth+"; ++d) {\n int depthBegin = int(max(0.0, float(d - "+e+")));\n int depthEnd = int(min(float("+this.depth+"),\n float(d + "+e+" + 1)));\n\n const int MIN_DEPTH_BEGIN = 0;\n const int MAX_DEPTH_END = "+this.depth+";\n\n float norm = 0.0;\n for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd) {\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n }\n else {\n break;\n }\n }\n\n norm = float("+r+") * norm + float("+n+");\n\n for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd){\n float dyi = -2.0 * float("+r+")\n * float("+o+")\n * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)\n / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * "+o+");\n }\n if (k == coords[3]) {\n dyi *= getDy(b, r, c, d);\n result += dyi;\n }\n }\n else {\n break;\n }\n }\n }\n setOutput(result);\n }\n ";},Vi=function(t,e,n,r,o){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;var a,i=e,s=t[3]-1;this.outputShape=t;var u="float("+n+") + float("+r+") * sum";a=.5===o?"inversesqrt("+u+")":1===o?"1.0/("+u+")":"exp(log("+u+") * float(-"+o+"));",this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords.x;\n int r = coords.y;\n int c = coords.z;\n int d = coords.w;\n\n bool hasNextCol = d < "+this.outputShape[3]+";\n bool hasNextRow = c < "+this.outputShape[2]+";\n\n vec4 sum = vec4(0.);\n vec4 xFragAtOutputCoords = getX(b, r, c, d);\n\n vec4 xAtOutputCoords = vec4(\n getChannel(xFragAtOutputCoords, vec2(c, d)),\n hasNextCol ?\n getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,\n hasNextRow ?\n getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,\n (hasNextRow && hasNextCol) ?\n getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0\n );\n\n int firstChannel = d - "+i+";\n vec2 cache = vec2(0.);\n if(firstChannel >= 0){\n vec4 firstChannelFrag = getX(b, r, c, firstChannel);\n cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));\n if(hasNextRow){\n cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));\n }\n }\n\n ivec2 depth = ivec2(d, d + 1);\n for (int j = - "+i+"; j <= "+i+"; j++) {\n ivec2 idx = depth + j;\n bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));\n bvec2 belowUpperBound = lessThanEqual(idx, ivec2("+s+"));\n\n bool depthInRange = aboveLowerBound.x && belowUpperBound.x;\n bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;\n\n if(depthInRange || depthPlusOneInRange){\n vec4 z = vec4(0.);\n vec4 xFragAtCurrentDepth;\n z.xz = cache.xy;\n if(depthPlusOneInRange && hasNextCol){\n xFragAtCurrentDepth = idx.y != d ?\n getX(b, r, c, idx.y) : xFragAtOutputCoords;\n z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));\n if(hasNextRow){\n z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));\n }\n }\n cache.xy = z.yw;\n sum += z * z;\n }\n }\n vec4 result = xAtOutputCoords * "+a+";\n setOutput(result);\n }\n ";},zi=function(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;var e=t.strideHeight,n=t.strideWidth,r=t.dilationHeight,o=t.effectiveFilterHeight,a=t.effectiveFilterWidth,i=o-1-t.padInfo.top,s=a-1-t.padInfo.left,u=o*a-1;this.userCode="\n const ivec2 pads = ivec2("+i+", "+s+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+o+";\n wR += "+r+") {\n float dyR = float(dyRCorner + wR) / "+e+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+a+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+n+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n int maxPosValue = "+u+" - int(getMaxPos(b, idyR, idyC, d));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue = wR * "+a+" + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n setOutput(dotProd);\n }\n ";},Gi=function(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;var e=t.strideDepth,n=t.strideHeight,r=t.strideWidth,o=t.dilationDepth,a=t.dilationHeight,i=t.dilationWidth,s=t.effectiveFilterDepth,u=t.effectiveFilterHeight,c=t.effectiveFilterWidth,l=s-1-t.padInfo.front,h=u-1-t.padInfo.top,f=c-1-t.padInfo.left,d=s*u*c-1;this.userCode="\n const ivec3 pads = ivec3("+l+", "+h+", "+f+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < "+s+";\n wD += "+o+") {\n float dyD = float(dyDCorner + wD) / "+e+".0;\n\n if (dyD < 0.0 || dyD >= "+t.outDepth+".0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < "+u+";\n wR += "+a+") {\n float dyR = float(dyRCorner + wR) / "+n+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+c+";\n wC += "+i+") {\n float dyC = float(dyCCorner + wC) / "+r+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n int maxPosValue = "+d+" -\n int(getMaxPos(batch, idyD, idyR, idyC, ch));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue =\n wD * "+u+" * "+c+" +\n wR * "+c+" + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n }\n setOutput(dotProd);\n }\n ";},Hi=function(t,e,n,r,o,a,i){void 0===n&&(n=!1),void 0===r&&(r=!1),void 0===o&&(o=!1),void 0===a&&(a=null),void 0===i&&(i=!1),this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e;var s=n?t[1]:t[2],u=Math.ceil(s/2),c=n?"i * 2, rc.y":"rc.y, i * 2",l=r?"rc.z, i * 2":"i * 2, rc.z",h=n?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],f=r?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],d="",p="";a&&(d=i?"vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n "+a+"\n }":"vec4 activation(vec4 x) {\n "+a+"\n }",p="result = activation(result);");var v=o?"result += getBiasAtOutCoords();":"";o&&this.variableNames.push("bias"),i&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+d+"\n\n const float sharedDimension = "+u+".0;\n\n vec4 dot2x2ARowBCol(ivec3 rc) {\n vec4 result = vec4(0);\n for (int i = 0; i < "+u+"; i++) {\n vec4 a = getMatrixA(rc.x, "+c+");\n vec4 b = getMatrixB(rc.x, "+l+");\n\n // These swizzled products need to be separately added.\n // See: https://github.com/tensorflow/tfjs/issues/1735\n result += ("+h[0]+" * "+f[0]+");\n result += ("+h[1]+" * "+f[1]+");\n }\n return result;\n }\n\n void main() {\n ivec3 rc = getOutputCoords();\n vec4 result = dot2x2ARowBCol(rc);\n\n "+v+"\n\n "+p+"\n\n setOutput(result);\n }\n ";},qi=function(){function t(t,e,n){this.variableNames=["probs"],this.outputShape=[t,n],this.userCode="\n uniform float seed;\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n\n float r = random(seed);\n float cdf = 0.0;\n\n for (int i = 0; i < "+(e-1)+"; i++) {\n cdf += getProbs(batch, i);\n\n if (r < cdf) {\n setOutput(float(i));\n return;\n }\n }\n\n // If no other event happened, last event happened.\n setOutput(float("+(e-1)+"));\n }\n ";}return t.prototype.getCustomSetupFunc=function(t){var e=this;return function(n,r){null==e.seedLoc&&(e.seedLoc=n.getUniformLocation(r,"seed")),n.gl.uniform1f(e.seedLoc,t);}},t}(),Ki=function(t,e,n,r){this.variableNames=["indices"],this.outputShape=[t,e],this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int index = round(getIndices(coords.x));\n setOutput(mix(float("+r+"), float("+n+"),\n float(index == coords.y)));\n }\n ";},ji=function(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=t;var e=t.length;if(0===e)this.userCode="\n void main() {\n setOutput(vec4(getA(), 0., 0., 0.));\n }\n ";else {var n=sa("rc",e),r=wa(e),o=function(t,e,n){if(1===t)return "rc > "+e[0];for(var r="",o=t-2;o= "+e[o],o= "+e+";\n bool rEdge = rp1 >= "+n+";\n "}(e,t[t.length-1],t[t.length-2],n),i=function(t,e){var n=t.length,r=function(t,e){for(var n=[],r=0;r<=1;r++)for(var o=0;o<=1;o++){for(var a=(0===r?"r":"rp1")+", "+(0===o?"c":"cp1"),i=2;i= "+t[0]+" ? 0. : getA(rc + 1),\n 0, 0":"getA("+r[0]+"),\n cEdge ? 0. : getA("+r[1]+"),\n rEdge ? 0. : getA("+r[2]+"),\n rEdge || cEdge ? 0. : getA("+r[3]+")"}(t,n);this.userCode="\n void main() {\n "+r+" rc = getOutputCoords();\n\n if("+o+") {\n setOutput(vec4(0));\n } else {\n "+a+"\n\n setOutput(vec4("+i+"));\n }\n }\n ";}};var Xi=function(t,e,n){this.variableNames=["x"],this.outputShape=e.map((function(e,n){return e[0]+t[n]+e[1]}));var r=t.length,o=wa(r),a=e.map((function(t){return t[0]})).join(","),i=e.map((function(e,n){return e[0]+t[n]})).join(","),s=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r);this.userCode=1!==r?"\n "+o+" start = "+o+"("+a+");\n "+o+" end = "+o+"("+i+");\n\n void main() {\n "+o+" outC = getOutputCoords();\n if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n setOutput(float("+n+"));\n } else {\n "+o+" coords = outC - start;\n setOutput(getX("+s+"));\n }\n }\n ":"\n int start = "+a+";\n int end = "+i+";\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start || outC >= end) {\n setOutput(float("+n+"));\n } else {\n setOutput(getX(outC - start));\n }\n }\n ";},Yi=function(t,e,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e.map((function(e,n){return e[0]+t[n]+e[1]}));for(var r=t.length,o=wa(r),a=e.map((function(t){return t[0]})).join(","),i=e.map((function(e,n){return e[0]+t[n]})).join(","),s=sa("rc",r),u=sa("source",r),c=s[r-1]+" < "+this.outputShape[r-1],l=1===r?"source":"vec2("+u.slice(-2).join()+")",h=[o+" rc = outputLoc;",s[r-1]+" += 1;\n if("+c+") {\n ",1===r?"":"}\n rc = outputLoc;\n "+s[r-2]+" += 1;\n if("+s[r-2]+" < "+this.outputShape[r-2]+") {",1===r?"":" "+s[r-1]+" += 1;\n if("+c+") {"],f=1===r?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",d="",p=0,v=1===r?2:4;p= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+c+";\n wC += "+s+") {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float value = getX(batch, xR, xC, d);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value >= currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = wR * "+c+" + wC;\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n ";else {var p=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"avg"===e&&(p="avgValue / count");var v=4*Math.floor(r/4),m=r%4,g="\n if ("+f+") {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n ";this.userCode="\n const ivec2 strides = ivec2("+o+", "+a+");\n const ivec2 pads = ivec2("+l+", "+h+");\n const float initializationValue = "+d+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xR, int xC, int d) {\n if (xC < 0 || xC >= "+t.inWidth+") {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xR, xC, d);\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n vec4 minMaxValue = vec4("+d+");\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wR = 0; wR < "+u+";\n wR += "+i+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+v+"; wC += 4) {\n int xC = xCCorner + wC * "+s+";\n\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n getValue(batch, xR, xC + 2 * "+s+", d),\n getValue(batch, xR, xC + 3 * "+s+", d)\n );\n\n "+g+"\n }\n\n int xC = xCCorner + "+v+";\n if ("+(1===m)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+g+"\n } else if ("+(2===m)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n initializationValue,\n initializationValue\n );\n\n "+g+"\n } else if ("+(3===m)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n getValue(batch, xR, xC + 2 * "+s+", d),\n initializationValue\n );\n\n "+g+"\n }\n }\n setOutput("+p+");\n }\n ";}},Qi=function(t,e,n){if(this.variableNames=["x"],"avg"===e&&n)throw new Error("Cannot compute positions for average pool.");var r=t.filterWidth,o=t.strideDepth,a=t.strideHeight,i=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.effectiveFilterDepth,h=t.effectiveFilterHeight,f=t.effectiveFilterWidth,d=t.padInfo.front,p=t.padInfo.top,v=t.padInfo.left;this.outputShape=t.outShape;var m="avg"===e,g="0.0";if(m||(g="-1.0 / 1e-20"),n)this.userCode="\n const ivec3 strides =\n ivec3("+o+", "+a+", "+i+");\n const ivec3 pads = ivec3("+d+", "+p+", "+v+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).\n // ? = to be determined\n float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n\n for (int wD = 0; wD < "+l+";\n wD += "+s+") {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= "+t.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+h+";\n wR += "+u+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+f+";\n wC += "+c+") {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float value = getX(batch, xD, xR, xC, ch);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value >= currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition =\n wD * "+h+" * "+f+" +\n wR * "+f+" + wC;;\n }\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n ";else {var y=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"avg"===e&&(y="avgValue / count");var x=4*Math.floor(r/4),b=r%4,w="\n if ("+m+") {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n ";this.userCode="\n const ivec3 strides =\n ivec3("+o+", "+a+", "+i+");\n const ivec3 pads = ivec3("+d+", "+p+", "+v+");\n const float initializationValue = "+g+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xD, int xR, int xC, int ch) {\n if (xC < 0 || xC >= "+t.inWidth+") {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xD, xR, xC, ch);\n }\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).\n // ? = to be determined\n vec4 minMaxValue = vec4("+g+");\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wD = 0; wD < "+l+";\n wD += "+s+") {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= "+t.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+h+";\n wR += "+u+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+x+"; wC += 4) {\n int xC = xCCorner + wC * "+c+";\n\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+c+", ch),\n getValue(batch, xD, xR, xC + 2 * "+c+", ch),\n getValue(batch, xD, xR, xC + 3 * "+c+", ch)\n );\n\n "+w+"\n }\n\n int xC = xCCorner + "+x+";\n if ("+(1===b)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+w+"\n } else if ("+(2===b)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+c+", ch),\n initializationValue,\n initializationValue\n );\n\n "+w+"\n } else if ("+(3===b)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+c+", ch),\n getValue(batch, xD, xR, xC + 2 * "+c+", ch),\n initializationValue\n );\n\n "+w+"\n }\n }\n setOutput("+y+");\n }\n }\n ";}},Ji=function(t,e){this.variableNames=["x"];var n=t.windowSize,r=t.batchSize,o=t.inSize,a=Math.ceil(o/n);this.outputShape=[r,a];var i="0.0",s="";"prod"===e?i="1.0":"min"===e?(i="1.0 / 1e-20",s="min"):"max"===e&&(i="-1.0 / 1e-20",s="max");var u=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"sum"===e?u="sumValue":"prod"===e?u="prodValue":"all"===e?u="allValue":"any"===e&&(u="anyValue");var c=4*Math.floor(n/4),l=n%4,h="\n if ("+("sum"===e)+") {\n sumValue += dot(values, ones);\n } else if ("+("prod"===e)+") {\n vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\n prodValue *= tmp[0] * tmp[1];\n } else {\n minMaxValue = "+s+"(values, minMaxValue);\n }\n ",f="vec4";"all"===e?(i="1.0",h="\n bool reducedAllValue = all(values);\n float floatedReducedAllValue = float(reducedAllValue);\n allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n ",f="bvec4"):"any"===e&&(i="0.0",h="\n bool reducedAnyValue = any(values);\n float floatedReducedAnyValue = float(reducedAnyValue);\n anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n ",f="bvec4");var d="";o%n>0&&(d="\n if (inIdx < 0 || inIdx >= "+o+") {\n return initializationValue;\n }\n "),this.userCode="\n const float initializationValue = "+i+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n "+d+"\n return getX(batch, inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * "+n+";\n\n vec4 minMaxValue = vec4("+i+");\n float prodValue = 1.0;\n float sumValue = 0.0;\n float allValue = 1.0;\n float anyValue = 0.0;\n\n for (int i = 0; i < "+c+"; i += 4) {\n int inIdx = inOffset + i;\n "+f+" values = "+f+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n "+h+"\n }\n\n int inIdx = inOffset + "+c+";\n if ("+(1===l)+") {\n "+f+" values = "+f+"(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+h+"\n } else if ("+(2===l)+") {\n "+f+" values = "+f+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n "+h+"\n } else if ("+(3===l)+") {\n "+f+" values = "+f+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n "+h+"\n }\n setOutput("+u+");\n }\n ";},Zi=function(t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t;for(var n="",r=0;r<4;r++){var o="thisRC = rc;";r%2==1&&(o+="thisRC.z += 1;"),r>1&&(o+="thisRC.y += 1;"),n+="\n "+o+"\n "+(r>0?"if(thisRC.y < rows && thisRC.z < cols){":"")+"\n int flatIndex = getFlatIndex(thisRC);\n\n ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\n vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\n\n result["+r+"] =\n getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n "+(r>0?"}":"")+"\n ";}this.userCode="\n \n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n "+ca(["r","c","d"],e)+"\n return ivec3(r, c, d);\n }\n \n "+la(t)+"\n\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0.);\n\n ivec3 thisRC;\n int rows = "+t[1]+";\n int cols = "+t[2]+";\n\n "+n+"\n\n setOutput(result);\n }\n ";};var ts=function(t,e,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e.shape;var r=e.shape,o=r[1],a=r[2],i=t.shape,s=i[1],u=i[2],c=[n&&s>1?o-1:o,n&&u>1?a-1:a],l=[n&&s>1?s-1:s,n&&u>1?u-1:u],h=c[0]/l[0],f=c[1]/l[1],d=1/h,p=1/f,v=2*Math.ceil(d)+2,m=2*Math.ceil(p)+2;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float("+h+");\n const float widthScale = float("+f+");\n\n const float invHeightScale = float("+d+");\n const float invWidthScale = float("+p+");\n\n const int winHeight = int("+v+");\n const int winWidth = int("+m+");\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(startRLerp - float(winHeight / 2));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(startCLerp - float(winWidth / 2));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= "+s+") {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= "+u+") {\n continue;\n }\n\n float dxR = float(dyR) * heightScale;\n int topDxRIndex = int(floor(dxR));\n int bottomDxRIndex = int(min(ceil(dxR), "+(o-1)+".0));\n float dxRLerp = dxR - float(topDxRIndex);\n float inverseDxRLerp = 1.0 - dxRLerp;\n\n float dxC = float(dyC) * widthScale;\n int leftDxCIndex = int(floor(dxC));\n int rightDxCIndex = int(min(ceil(dxC), "+(a-1)+".0));\n float dxCLerp = dxC - float(leftDxCIndex);\n float inverseDxCLerp = 1.0 - dxCLerp;\n\n if (r == topDxRIndex && c == leftDxCIndex) {\n // topLeft\n accumulator +=\n getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n }\n\n if (r == topDxRIndex && c == rightDxCIndex) {\n // topRight\n accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n }\n\n if (r == bottomDxRIndex && c == leftDxCIndex) {\n // bottomLeft\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n }\n\n if (r == bottomDxRIndex && c == rightDxCIndex) {\n // bottomRight\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n ";},es=function(t,e,n,r){this.variableNames=["A"],this.outputShape=[];var o=t[0],a=t[1],i=t[2],s=t[3];this.outputShape=[o,e,n,s];var u=[r&&e>1?a-1:a,r&&n>1?i-1:i],c=[r&&e>1?e-1:e,r&&n>1?n-1:n];this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+u[0]/c[0]+",\n "+u[1]/c[1]+");\n const vec2 inputShapeRC = vec2("+a+".0, "+i+".0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the four integer indices.\n ivec2 sourceFloorRC = ivec2(sourceFracIndexRC);\n ivec2 sourceCeilRC = ivec2(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\n float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\n float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\n float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n float top = topLeft + (topRight - topLeft) * fracRC.y;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n float newValue = top + (bottom - top) * fracRC.x;\n\n setOutput(newValue);\n }\n ";},ns=function(t,e,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];var o=t[0],a=t[1],i=t[2],s=t[3];this.outputShape=[o,e,n,s];var u=[r&&e>1?a-1:a,r&&n>1?i-1:i],c=[r&&e>1?e-1:e,r&&n>1?n-1:n];this.userCode="\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n "+u[0]/c[0]+",\n "+u[1]/c[1]+",\n "+u[1]/c[1]+");\n const vec3 inputShapeRC = vec3("+a+".0, "+i+".0,\n "+i+".0);\n\n float getAValue(int b, int r, int c, int d) {\n return getChannel(getA(b, r, c, d), vec2(c, d));\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n // Calculate values for next column in yRC.z.\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n // Fractional source index.\n vec3 sourceFracIndexRC = vec3(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the four integer indices.\n ivec3 sourceFloorRC = ivec3(sourceFracIndexRC);\n ivec3 sourceCeilRC = ivec3(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n // Should we calculate next column and row elements in 2x2 packed cell.\n bool hasNextCol = d < "+(s-1)+";\n bool hasNextRow = coords.z < "+(n-1)+";\n\n // In parallel, construct four corners for all four components in\n // packed 2x2 cell.\n vec4 topLeft = vec4(\n getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 bottomLeft = vec4(\n getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 topRight = vec4(\n getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec4 bottomRight = vec4(\n getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\n\n vec4 top = mix(topLeft, topRight, fracRC.yyzz);\n vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\n vec4 newValue = mix(top, bottom, fracRC.x);\n\n setOutput(newValue);\n }\n ";},rs=function(t,e,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e.shape;var r=e.shape,o=r[1],a=r[2],i=t.shape,s=i[1],u=i[2],c=[n&&s>1?o-1:o,n&&u>1?a-1:a],l=[n&&s>1?s-1:s,n&&u>1?u-1:u],h=c[0]/l[0],f=c[1]/l[1],d=1/h,p=1/f,v=2*Math.ceil(d)+2,m=2*Math.ceil(p)+2;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float("+h+");\n const float widthScale = float("+f+");\n\n const float invHeightScale = float("+d+");\n const float invWidthScale = float("+p+");\n\n const int winHeight = int("+v+");\n const int winWidth = int("+m+");\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(floor(startRLerp - float(winHeight / 2)));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(floor(startCLerp - float(winWidth / 2)));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= "+s+") {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= "+u+") {\n continue;\n }\n\n float sourceFracRow =\n float("+c[0]+") *\n (float(dyR) / float("+l[0]+"));\n\n float sourceFracCol =\n float("+c[1]+") *\n (float(dyC) / float("+l[1]+"));\n\n int sourceNearestRow = int(min(\n float(int("+o+") - 1),\n "+n+" ? float(round(sourceFracRow)) :\n float(floor(sourceFracRow))));\n\n int sourceNearestCol = int(min(\n float(int("+a+") - 1),\n "+n+" ? float(round(sourceFracCol)) :\n float(floor(sourceFracCol))));\n\n if (r == sourceNearestRow && c == sourceNearestCol) {\n accumulator += getDy(b, dyR, dyC, d);\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n ";},os=function(t,e,n,r){this.variableNames=["A"],this.outputShape=[];var o=t[0],a=t[1],i=t[2],s=t[3];this.outputShape=[o,e,n,s];var u=[r&&e>1?a-1:a,r&&n>1?i-1:i],c=[r&&e>1?e-1:e,r&&n>1?n-1:n],l=r?"0.5":"0.0";this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+u[0]/c[0]+",\n "+u[1]/c[1]+");\n const vec2 inputShapeRC = vec2("+a+".0, "+i+".0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestRC = ivec2(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + "+l+")));\n\n float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutput(newValue);\n }\n ";},as=function(t,e){this.variableNames=["x"];var n=t.length;if(n>4)throw new Error("WebGL backend: Reverse of rank-"+n+" tensor is not yet supported");if(this.outputShape=t,1!==n){var r=t.map((function(n,r){return function(n){return -1!==e.indexOf(n)&&1!==t[n]?t[n]+" - coords["+n+"] - 1":"coords["+n+"]"}(r)})).join(","),o=wa(n);this.userCode="\n void main() {\n "+o+" coords = getOutputCoords();\n setOutput(getX("+r+"));\n }\n ";}else this.userCode="\n void main() {\n int coord = getOutputCoords();\n setOutput(getX("+t[0]+" - coord - 1));\n }\n ";},is=function(t,e){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;var n=t.length;if(n>4)throw new Error("WebGL backend: Reverse of rank-"+n+" tensor is not yet supported");this.outputShape=t;var r=sa("rc",n),o=r[n-1]+" + 1 < "+this.outputShape[n-1],a=r[n-2]+" + 1 < "+this.outputShape[n-2],i=wa(n);function s(n){var r=t.map((function(r,o){return function(n,r){return -1!==e.indexOf(n)&&1!==t[n]?t[n]+" - "+r[n]+" - 1":""+r[n]}(o,n)}));return "getChannel(getX("+r.join(",")+"), vec2("+r.slice(-2).join(",")+"))"}this.userCode=1===n?"\n void main(){\n int rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = getChannel(getX("+t[0]+" - rc - 1),\n "+t[0]+" - rc - 1);\n if("+o+"){\n result.g = getChannel(getX("+t[0]+" - (rc + 1) - 1),\n "+t[0]+" - (rc + 1) - 1);\n }\n setOutput(result);\n }\n ":"\n void main() {\n "+i+" rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = "+function(t){return s(t)}(r.slice())+";\n if("+o+"){\n result.g = "+function(t){return t[n-1]="("+t[n-1]+" + 1)",s(t)}(r.slice())+";\n }\n if("+a+") {\n result.b = "+function(t){return t[n-2]="("+t[n-2]+" + 1)",s(t)}(r.slice())+";\n if("+o+") {\n result.a = "+function(t){return t[n-1]="("+t[n-1]+" + 1)",t[n-2]="("+t[n-2]+" + 1)",s(t)}(r.slice())+";\n }\n }\n setOutput(result);\n }\n ";},ss=function(t,e,n,r,o,a,i){this.variableNames=["updates","indices","defaultValue"],this.outputShape=a;var s=wa(o.length),u=wa(a.length),c="";1===n?c="i":2===n&&(c="i, j");var l="getIndices("+c+")",h="";1===r?h="i":2===r&&(h="i, coords[1]");var f="getUpdates("+h+")",d=e>1?"strides[j]":"strides";this.userCode="\n "+s+" strides = "+s+"("+o+");\n\n void main() {\n "+u+" coords = getOutputCoords();\n float sum = 0.0;\n bool found = false;\n for (int i = 0; i < "+t+"; i++) {\n int flattenedIndex = 0;\n for (int j = 0; j < "+e+"; j++) {\n int index = round("+l+");\n flattenedIndex += index * "+d+";\n }\n if (flattenedIndex == coords[0]) {\n sum += "+f+";\n found = true;\n }\n }\n setOutput(mix(getDefaultValue(), sum, float(found)));\n }\n ";},us=function(t,e){this.variableNames=["x","segmentIds"];var n=t.windowSize,r=t.batchSize,o=t.inSize,a=t.numSegments,i=a*Math.ceil(o/n);this.outputShape=[r,i];var s=4*Math.floor(n/4),u=n%4,c="\n sumValue += dot(values, segFilter);\n ",l="";o%n>0&&(l="\n if (inIdx < 0 || inIdx >= "+o+") {\n return initializationValue;\n }\n ");var h="";o%n>0&&(h="\n if (inIdx < 0 || inIdx >= "+o+") {\n return -1.0;\n }\n "),this.userCode="\n const float initializationValue = 0.0;\n\n float getValue(int batch, int inIdx) {\n "+l+"\n return getX(batch, inIdx);\n }\n\n float getSegmentIdAtIndex(int inIdx) {\n "+h+"\n return getSegmentIds(inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = int(floor(float(outIdx) / float(\n "+a+")) * float("+n+"));\n int currentSeg = int(mod(float(outIdx), float("+a+")));\n\n float sumValue = 0.0;\n\n for (int i = 0; i < "+s+"; i += 4) {\n int inIdx = inOffset + i;\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\n );\n\n "+c+"\n }\n\n int inIdx = inOffset + "+s+";\n if ("+(1===u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n 0,\n 0,\n 0\n );\n\n "+c+"\n } else if ("+(2===u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n 0,\n 0\n );\n\n "+c+"\n } else if ("+(3===u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n 0\n );\n\n "+c+"\n }\n setOutput(sumValue);\n }\n ";},cs=function(t,e,n){var r,o;if(this.variableNames=["c","a","b"],this.outputShape=e,n>4)throw Error("Where for rank "+n+" is not yet supported");if(1===n)o="resRC",r="resRC";else {for(var a=["resRC.x","resRC.y","resRC.z","resRC.w"],i=[],s=[],u=0;u= 1.0) {\n setOutput(getA("+o+"));\n } else {\n setOutput(getB("+o+"));\n }\n }\n ";},ls=function(){function t(t){this.variableNames=["source"],this.outputShape=t,this.rank=t.length;var e,n=wa(this.rank),r="uniform int start["+this.rank+"];",o=function(t){if(1===t)return "sourceLoc";if(t<=6)return hs.slice(0,t).map((function(t){return "sourceLoc."+t})).join(",");throw Error("Slicing for rank "+t+" is not yet supported")}(this.rank);e="\n "+n+" sourceLoc;\n "+n+" coords = getOutputCoords();\n "+t.map((function(t,e){return "sourceLoc."+hs[e]+" = start["+e+"] + coords."+hs[e]+";"})).join("\n")+"\n ",this.userCode="\n "+r+"\n void main() {\n "+e+"\n setOutput(getSource("+o+"));\n }\n ";}return t.prototype.getCustomSetupFunc=function(t){var e=this;if(t.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+t.length+")");return function(n,r){null==e.startLoc&&(e.startLoc=n.getUniformLocationNoThrow(r,"start"),null==e.startLoc)||n.gl.uniform1iv(e.startLoc,t);}},t}(),hs=["x","y","z","w","u","v"];var fs=function(){function t(t){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.rank=t.length;var e=wa(this.rank),n=sa("coords",this.rank),r=sa("sourceLoc",this.rank),o=1===this.rank?"sourceLoc":"vec2("+r.slice(-2).join()+")",a="getChannel(getSource("+r.join()+"), "+o+")",i="\n result.x = "+a+";\n if (++"+n[this.rank-1]+" < "+t[this.rank-1]+") {\n ++"+r[this.rank-1]+";\n result.y = "+a+";\n --"+r[this.rank-1]+";\n }\n ",s=1===this.rank?"":"\n --"+n[this.rank-1]+";\n if (++"+n[this.rank-2]+" < "+t[this.rank-2]+") {\n ++"+r[this.rank-2]+";\n result.z = "+a+";\n if (++"+n[this.rank-1]+" < "+t[this.rank-1]+") {\n ++"+r[this.rank-1]+";\n result.w = "+a+";\n }\n }\n ",u=this.rank<=4?"sourceLoc = coords +\n "+e+"("+t.map((function(t,e){return "start["+e+"]"})).join()+");":t.map((function(t,e){return r[e]+" = "+n[e]+" + start["+e+"];"})).join("\n");this.userCode="\n uniform int start["+this.rank+"];\n void main() {\n "+e+" coords = getOutputCoords();\n "+e+" sourceLoc;\n "+u+"\n vec4 result = vec4(0.);\n "+i+"\n "+s+"\n setOutput(result);\n }\n ";}return t.prototype.getCustomSetupFunc=function(t){var e=this;if(t.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+t.length+")");return function(n,r){null==e.startLoc&&(e.startLoc=n.getUniformLocationNoThrow(r,"start"),null==e.startLoc)||n.gl.uniform1iv(e.startLoc,t);}},t}(),ds=function(t,e,n){this.variableNames=["x"],this.outputShape=n;var r=n.length,o=wa(n.length),a=wa(n.length),i="";if(1===r)i="coords * strides + begin";else {var s=0;i=n.map((function(t,e){return s++,1===n.length?"coords * strides["+e+"] + begin["+e+"]":"coords["+(s-1)+"] * strides["+e+"] + begin["+e+"]"})).join(",");}this.userCode="\n "+o+" begin = "+o+"("+t+");\n "+o+" strides = "+o+"("+e+");\n\n void main() {\n "+a+" coords = getOutputCoords();\n setOutput(getX("+i+"));\n }\n ";},ps=function(){function t(t){this.gpgpu=t,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={};}return t.prototype.acquireTexture=function(t,e,n){var r,o=vs(e,n),a=ms(t,o,n);if(a in this.freeTextures||(this.freeTextures[a]=[]),a in this.usedTextures||(this.usedTextures[a]=[]),this.freeTextures[a].length>0){this.numFreeTextures--,this.numUsedTextures++,this.log();var i=this.freeTextures[a].shift();return this.usedTextures[a].push(i),i}return this.numUsedTextures++,this.log(),o===Gt.PACKED_2X2_FLOAT32?r=this.gpgpu.createPackedMatrixTexture(t[0],t[1]):o===Gt.PACKED_2X2_FLOAT16?r=this.gpgpu.createFloat16PackedMatrixTexture(t[0],t[1]):o===Gt.UNPACKED_FLOAT32?r=this.gpgpu.createFloat32MatrixTexture(t[0],t[1]):o===Gt.UNPACKED_FLOAT16?r=this.gpgpu.createFloat16MatrixTexture(t[0],t[1]):o===Gt.PACKED_4X1_UNSIGNED_BYTE&&(r=this.gpgpu.createUnsignedBytesMatrixTexture(t[0],t[1])),this.usedTextures[a].push(r),r},t.prototype.releaseTexture=function(t,e,n,r){if(null!=this.freeTextures){var o=ms(e,vs(n,r),r);o in this.freeTextures||(this.freeTextures[o]=[]),this.freeTextures[o].push(t),this.numFreeTextures++,this.numUsedTextures--;var a=this.usedTextures[o],i=a.indexOf(t);if(i<0)throw new Error("Cannot release a texture that was never provided by this texture manager");a.splice(i,1),this.log();}},t.prototype.log=function(){if(this.logEnabled){var t=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",this.numFreeTextures+" / "+this.numUsedTextures,"("+t+")");}},t.prototype.getNumUsedTextures=function(){return this.numUsedTextures},t.prototype.getNumFreeTextures=function(){return this.numFreeTextures},t.prototype.dispose=function(){var t=this;if(null!=this.freeTextures){for(var e in this.freeTextures)this.freeTextures[e].forEach((function(e){t.gpgpu.deleteMatrixTexture(e);}));for(var e in this.usedTextures)this.usedTextures[e].forEach((function(e){t.gpgpu.deleteMatrixTexture(e);}));this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0;}},t}();function vs(t,e){if(t===zt.UPLOAD)return Gt.PACKED_2X2_FLOAT32;if(t===zt.RENDER||null==t)return function(t){return i().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?t?Gt.PACKED_2X2_FLOAT32:Gt.UNPACKED_FLOAT32:t?Gt.PACKED_2X2_FLOAT16:Gt.UNPACKED_FLOAT16}(e);if(t===zt.DOWNLOAD||t===zt.PIXELS)return Gt.PACKED_4X1_UNSIGNED_BYTE;throw new Error("Unknown logical texture type "+t)}function ms(t,e,n){return t[0]+"_"+t[1]+"_"+e+"_"+n}var gs=function(t,e){this.variableNames=["A"];for(var n=new Array(t.length),r=0;r5)throw Error("Tile for rank "+e+" is not yet supported");if(1===e)return "imod(resRC, "+t[0]+")";for(var n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],r=[],o=0;o6)throw Error("Transpose for rank "+e+" is not yet supported");for(var n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],r=new Array(e),o=0;o6)throw Error("Packed transpose for rank "+this.rank+" is not yet supported.");var o=wa(this.rank),a=ia("rc",this.rank),i=new Array(this.rank);for(r=0;r= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n";var Ts="return -x;",Ns="return ceil(x);",Fs="return floor(x);",_s="return exp(x);",Os="return exp(x) - 1.0;",Ms=Es+"\n return sin(x);\n",Bs=Es+"\n return cos(x);\n",Ps=Es+"\n if (abs(x) > 1.) {\n return NAN;\n }\n return asin(x);\n",Ls=Es+"\n if (abs(x) > 1.) {\n return NAN;\n }\n return acos(x);\n",Ws=Es+"\n return atan(x);\n",Us=Es+"return log(x + sqrt(x * x + 1.0));",Vs=Es+"\n if (x < 1.0) return NAN;\n return log(x + sqrt(x * x - 1.0));",zs=Es+"\n if ((x < -1.0) || (x > 1.0)) return NAN;\n return (log(1.0 + x) - log(1.0 - x)) / 2.0;",Gs="return x;",Hs="return x;",qs="\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n",Ks="\n vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n",js="\n vec4 result;\n\n result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n return result;\n",Xs=function(t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.userCode="\n vec4 unaryOperation(vec4 x) {\n "+e+"\n }\n\n void main() {\n vec4 x = getAAtOutCoords();\n vec4 y = unaryOperation(x);\n\n setOutput(y);\n }\n ";},Ys=function(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=t;var e=t.length,n=sa("rc",e),r=wa(e),o=function(t,e){if(1===t)return "rc";for(var n="",r=0;r0?[4,Promise.all(a)]:[3,2];case 1:return c=r.sent(),u.kernelMs=w(c),u.getExtraProfileInfo=function(){return c.map((function(t,e){return {name:s[e],ms:t}})).map((function(t){return t.name+": "+t.ms})).join(", ")},[3,3];case 2:u.kernelMs={error:"WebGL query timers are not supported in this environment."},r.label=3;case 3:return this.uploadWaitMs=0,this.downloadWaitMs=0,[2,u]}}))}))},o.prototype.memory=function(){return {unreliable:!1,numBytesInGPU:this.numBytesInGPU}},o.prototype.startTimer=function(){return i().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:et(),endMs:null}},o.prototype.endTimer=function(t){return i().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),t):(t.endMs=et(),t)},o.prototype.getQueryTime=function(t){return n(this,void 0,void 0,(function(){var e;return r(this,(function(n){return i().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?[2,this.gpgpu.waitForQueryAndGetTime(t)]:[2,(e=t).endMs-e.startMs]}))}))},o.prototype.disposeData=function(t){if(!this.pendingDisposal.has(t)){if(this.pendingRead.has(t))return this.pendingDisposal.add(t),void this.pendingDeletes++;if(this.texData.has(t)){this.releaseGPUData(t);var e=this.texData.get(t).complexTensors;null!=e&&(e.real.dispose(),e.imag.dispose()),this.texData.delete(t);}}},o.prototype.releaseGPUData=function(t){var e=this.texData.get(t),n=e.texture,r=e.dtype,o=e.texShape,a=e.usage,i=e.isPacked,s=e.slice,u=s&&s.origDataId||t,c=this.dataRefCount.get(u);c>1?this.dataRefCount.set(u,c-1):(this.dataRefCount.delete(u),null!=n&&(this.numBytesInGPU-=this.computeBytes(o,r),this.textureManager.releaseTexture(n,o,a,i)));var l=this.texData.get(t);l.texture=null,l.texShape=null,l.isPacked=!1,l.slice=null;},o.prototype.getTexture=function(t){return this.uploadToGPU(t),this.texData.get(t).texture},o.prototype.getDataInfo=function(t){return this.texData.get(t)},o.prototype.getCPUBackend=function(){return i().getBool("WEBGL_CPU_FORWARD")?(null==this.cpuBackend&&(this.cpuBackend=Lt.findBackend("cpu")),this.cpuBackend):null},o.prototype.shouldExecuteOnCPU=function(t,e){var n=this;return void 0===e&&(e=128),null!=this.getCPUBackend()&&t.every((function(t){return null==n.texData.get(t.dataId).texture&&t.sizei().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){var o=Math.floor(t.length/2),a=this.concat(t.slice(0,o),e),s=this.concat(t.slice(o),e);return this.concat([a,s],e)}if(i().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&t[0].rank>1){var u=new Ga(t.map((function(t){return t.shape})),e);return this.compileAndRun(u,t)}var c=Sn(t.map((function(t){return t.shape})),e),l=t.map((function(t){return t.as2D(-1,k(t.shape.slice(e)))})),h=new za(l.map((function(t){return t.shape})));return this.compileAndRun(h,l).reshape(c)},o.prototype.neg=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.neg(t);if(i().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,Ts,t.dtype);var e=new Cs(t.shape,Ts);return this.compileAndRun(e,[t])},o.prototype.batchMatMul=function(t,e,n,r){var o=n?t.shape[2]:t.shape[1],a=r?e.shape[1]:e.shape[2],i=n?t.shape[1]:t.shape[2],s=t.shape[0];if((1===o||1===a)&&i>1e3){n&&(t=t.transpose([0,2,1])),r&&(e=e.transpose([0,2,1]));var u=1===a?t:t.as3D(s,i,1),c=1===a?2:1,l=1===a?e.as3D(s,1,i):e;return this.multiply(u,l).sum(c,!0)}var h=Dt(t.dtype,e.dtype),f=new Hi(t.shape,[s,o,a],n,r);return this.compileAndRun(f,[t,e],h)},o.prototype.fusedBatchMatMul=function(t){var e=t.a,n=t.b,r=t.transposeA,o=t.transposeB,a=t.bias,i=t.activation,s=t.preluActivationWeights,u=r?e.shape[2]:e.shape[1],c=o?n.shape[1]:n.shape[2],l=e.shape[0],h=Dt(e.dtype,n.dtype),f=null!=a,d=null!=s,p=i?Qs(i,!0):null,v=new Hi(e.shape,[l,u,c],r,o,f,p,d),m=[e,n];return a&&m.push(a),s&&m.push(s),this.compileAndRun(v,m,h)},o.prototype.multiply=function(t,e){if("complex64"===t.dtype){var n=this.texData.get(t.dataId),r=this.texData.get(e.dataId),o=new Na(Da,t.shape,e.shape),a=new Na(Ta,t.shape,e.shape),s=[this.makeComplexComponentTensorInfo(t,n.complexTensors.real),this.makeComplexComponentTensorInfo(t,n.complexTensors.imag),this.makeComplexComponentTensorInfo(e,r.complexTensors.real),this.makeComplexComponentTensorInfo(e,r.complexTensors.imag)],u=this.compileAndRun(o,s),c=this.compileAndRun(a,s),l=this.complex(u,c);return u.dispose(),c.dispose(),l}if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.multiply(t,e);if(i().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,Oa,t.dtype);var h=new Ba(Oa,t.shape,e.shape);return this.compileAndRun(h,[t,e],t.dtype)},o.prototype.batchNormalization=function(t,e,n,r,o,a){var s=[t,e,n],u=null;null!=a&&(u=a.shape,s.push(a));var c=null;if(null!=o&&(c=o.shape,s.push(o)),i().getBool("WEBGL_PACK_NORMALIZATION")){var l=new Aa(t.shape,e.shape,n.shape,u,c,r);return this.compileAndRun(l,s)}var h=new Sa(t.shape,e.shape,n.shape,u,c,r);return this.compileAndRun(h,s)},o.prototype.localResponseNormalization4D=function(t,e,n,r,o){var a=i().getBool("WEBGL_PACK_NORMALIZATION")?new Vi(t.shape,e,n,r,o):new Wi(t.shape,e,n,r,o);return this.compileAndRun(a,[t])},o.prototype.LRNGrad=function(t,e,n,r,o,a,i){var s=new Ui(e.shape,r,o,a,i);return this.compileAndRun(s,[e,n,t])},o.prototype.tile=function(t,e){if("string"===t.dtype){var n=this.readSync(t.dataId).map((function(t){return ot(t)}));return ta(dr(t.shape,t.dtype,n),e)}var r=new gs(t.shape,e);return this.compileAndRun(r,[t])},o.prototype.pad=function(t,e,n){var r=i().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Yi(t.shape,e,n):new Xi(t.shape,e,n);return this.compileAndRun(r,[t])},o.prototype.transpose=function(t,e){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.transpose(t,e);var n=i().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new xs(t.shape,e):new ys(t.shape,e);return this.compileAndRun(n,[t])},o.prototype.gather=function(t,e,n){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.gather(t,e,n);var r=new mi(t.shape,e.size,n);return this.compileAndRun(r,[t,e])},o.prototype.batchToSpaceND=function(t,e,n){C(t.rank<=4,(function(){return "batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"}));var r=e.reduce((function(t,e){return t*e})),o=zr(t.shape,e,r),a=Gr(o.length,e.length),i=Hr(t.shape,e,r),s=qr(n,e.length),u=Kr(i,n,e.length);return t.reshape(o).transpose(a).reshape(i).slice(s,u)},o.prototype.spaceToBatchND=function(t,e,n){C(t.rank<=4,(function(){return "spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"}));var r=e.reduce((function(t,e){return t*e})),o=[[0,0]];o.push.apply(o,n);for(var a=1+e.length;ae||n===t?r=!0:n=Y(t,n+1);return n}(i,o),u=new us({windowSize:s,inSize:i,batchSize:a,numSegments:o},e),c=this.compileAndRun(u,[t,n],r);return c.shape[1]===o?c:(n=Kn(0,o).tile([i/s]),this.segOpCompute(c,e,n,r,o))},o.prototype.argMinMaxReduce=function(t,e,n){var r=[e];if(Cn("arg"+n.charAt(0).toUpperCase()+n.slice(1),r,t.rank),!i().getBool("WEBGL_PACK_REDUCE")||t.rank<=2){var o=bn(t.shape,r),a=o[0],s=k(o[1]),u=t.as2D(-1,s);return this.argReduce(u,n).reshape(a)}return this.argReducePacked(t,n)},o.prototype.argMin=function(t,e){return this.argMinMaxReduce(t,e,"min")},o.prototype.argMax=function(t,e){return this.argMinMaxReduce(t,e,"max")},o.prototype.cumsum=function(t,e,n,r){if(e!==t.rank-1)throw new Error("WebGL cumsum shader expects an inner-most axis="+(t.rank-1)+" but got axis="+e);var o=new ni(t.shape,n,r);return this.compileAndRun(o,[t])},o.prototype.equal=function(t,e){if(i().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(equal(a, b));\n","bool");var n=new Ba("return float(a == b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},o.prototype.notEqual=function(t,e){if(i().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(notEqual(a, b));\n","bool");var n=new Ba("return float(a != b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},o.prototype.less=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.less(t,e);if(i().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(lessThan(a, b));\n","bool");var n=new Ba("return float(a < b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},o.prototype.lessEqual=function(t,e){if(i().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(lessThanEqual(a, b));\n","bool");var n=new Ba("return float(a <= b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},o.prototype.greater=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.greater(t,e);if(i().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(greaterThan(a, b));\n","bool");var n=new Ba("return float(a > b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},o.prototype.greaterEqual=function(t,e){if(i().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(greaterThanEqual(a, b));\n","bool");var n=new Ba("return float(a >= b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},o.prototype.logicalNot=function(t){var e=new Cs(t.shape,"return float(!(x >= 1.0));");return this.compileAndRun(e,[t])},o.prototype.logicalAnd=function(t,e){if(i().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n","bool");var n=new Ba("return float(a >= 1.0 && b >= 1.0);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},o.prototype.logicalOr=function(t,e){if(i().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n","bool");var n=new Ba("return float(a >= 1.0 || b >= 1.0);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},o.prototype.select=function(t,e,n){var r=new cs(t.rank,e.shape,e.rank);return this.compileAndRun(r,[t,e,n],Dt(e.dtype,n.dtype))},o.prototype.where=function(t){dn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");var e=t.dataSync();return na(t.shape,e)},o.prototype.topk=function(t,e,n){return ea(t.dataSync(),t.shape,t.dtype,e)},o.prototype.min=function(t,e){Cn("min",e,t.rank);var n=bn(t.shape,e),r=n[0],o=k(n[1]),a=t.as2D(-1,o);return this.reduce(a,"min",a.dtype).reshape(r)},o.prototype.minimum=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.minimum(t,e);var n=i().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new La("\n vec4 result = vec4(min(a, b));\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new Ba("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return min(a, b);\n",t.shape,e.shape);return this.compileAndRun(n,[t,e])},o.prototype.mod=function(t,e){var n=i().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new La("\n vec4 result = mod(a, b);\n vec4 isNaN = vec4(equal(b, vec4(0.0)));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new Ba("if (b == 0.0) return NAN;\n return mod(a, b);",t.shape,e.shape);return this.compileAndRun(n,[t,e])},o.prototype.max=function(t,e){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.max(t,e);Cn("max",e,t.rank);var n=bn(t.shape,e),r=n[0],o=k(n[1]),a=t.as2D(-1,o);return this.reduce(a,"max",a.dtype).reshape(r)},o.prototype.maximum=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.maximum(t,e);var n=i().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new La("\n vec4 result = vec4(max(a, b));\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new Ba("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return max(a, b);\n",t.shape,e.shape);return this.compileAndRun(n,[t,e])},o.prototype.all=function(t,e){Cn("all",e,t.rank);var n=bn(t.shape,e),r=n[0],o=k(n[1]),a=t.as2D(-1,o);return this.reduce(a,"all",a.dtype).reshape(r)},o.prototype.any=function(t,e){Cn("any",e,t.rank);var n=bn(t.shape,e),r=n[0],o=k(n[1]),a=t.as2D(-1,o);return this.reduce(a,"any",a.dtype).reshape(r)},o.prototype.realDivide=function(t,e){if(i().getBool("WEBGL_PACK_BINARY_OPERATIONS")){return this.packedBinaryOp(t,e,"\n // vec4 one = vec4(equal(a, b));\n // return one + (vec4(1.0) - one) * a / b;\n vec4 result = a / b;\n if(a.x == b.x) {\n result.x = 1.;\n }\n if(a.y == b.y) {\n result.y = 1.;\n }\n if(a.z == b.z) {\n result.z = 1.;\n }\n if(a.w == b.w) {\n result.w = 1.;\n }\n\n return result;\n","float32",!0)}var n=new Ba("\nif (a == b) {\n return 1.0;\n};\nreturn a / b;",t.shape,e.shape);return this.compileAndRun(n,[t,e],"float32")},o.prototype.floorDiv=function(t,e){if(i().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n ivec4 ia = round(a);\n ivec4 ib = round(b);\n bvec4 cond = notEqual(ib, ivec4(0));\n ivec4 result = ivec4(0);\n vec4 s = sign(a) * sign(b);\n\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n if (cond[0]) {\n result[0] = idiv(ia[0], ib[0], s[0]);\n }\n if (cond[1]) {\n result[1] = idiv(ia[1], ib[1], s[1]);\n }\n if (cond[2]) {\n result[2] = idiv(ia[2], ib[2], s[2]);\n }\n if (cond[3]) {\n result[3] = idiv(ia[3], ib[3], s[3]);\n }\n return vec4(result);\n","int32");var n=new Ba("\n float s = sign(a) * sign(b);\n int ia = round(a);\n int ib = round(b);\n if (ib != 0) {\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n return float(idiv(ia, ib, s));\n } else {\n return NAN;\n }\n",t.shape,e.shape);return this.compileAndRun(n,[t,e],"int32")},o.prototype.add=function(t,e){if("complex64"===t.dtype&&"complex64"===e.dtype)return this.complexSeparableBinaryOp(t,e,Fa);if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.add(t,e);var n=Dt(t.dtype,e.dtype);if(i().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,Fa,n);var r=new Ba(Fa,t.shape,e.shape);return this.compileAndRun(r,[t,e],n)},o.prototype.packedUnaryOp=function(t,e,n){var r=new Xs(t.shape,e);return this.compileAndRun(r,[t],n)},o.prototype.packedBinaryOp=function(t,e,n,r,o){void 0===o&&(o=!1);var a=new La(n,t.shape,e.shape,o);return this.compileAndRun(a,[t,e],r)},o.prototype.complexSeparableBinaryOp=function(t,e,n){var r=this,o=this.texData.get(t.dataId),a=this.texData.get(e.dataId),i=[[o.complexTensors.real,a.complexTensors.real],[o.complexTensors.imag,a.complexTensors.imag]].map((function(o){var a=o[0],i=o[1],s=r.makeComplexComponentTensorInfo(t,a),u=r.makeComplexComponentTensorInfo(e,i),c=new Ba(n,t.shape,e.shape);return r.compileAndRun(c,[s,u],Dt(a.dtype,i.dtype))})),s=i[0],u=i[1],c=this.complex(s,u);return s.dispose(),u.dispose(),c},o.prototype.makeComplexComponentTensorInfo=function(t,e){return {dataId:e.dataId,dtype:e.dtype,shape:t.shape}},o.prototype.addN=function(t){if(1===t.length)return t[0];if(t.length>i().get("WEBGL_MAX_TEXTURES_IN_SHADER")){var e=Math.floor(t.length/2),n=this.addN(t.slice(0,e)),r=this.addN(t.slice(e));return this.addN([n,r])}var o=t.map((function(t){return t.dtype})).reduce((function(t,e){return Dt(t,e)})),a=t.map((function(t){return t.shape})),s=i().getBool("WEBGL_PACK")?new oa(t[0].shape,a):new ra(t[0].shape,a);return this.compileAndRun(s,t,o)},o.prototype.subtract=function(t,e){if("complex64"===t.dtype&&"complex64"===e.dtype)return this.complexSeparableBinaryOp(t,e,_a);if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.subtract(t,e);var n=Dt(t.dtype,e.dtype);if(i().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,_a,t.dtype);var r=new Ba(_a,t.shape,e.shape);return this.compileAndRun(r,[t,e],n)},o.prototype.pow=function(t,e){var n=i().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new La("\n // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\n vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\n vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n vec4 result = multiplier * pow(abs(a), b);\n\n // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\n bvec4 isExpZero = equal(b, vec4(0.0));\n result.r = isExpZero.r ? 1.0 : result.r;\n result.g = isExpZero.g ? 1.0 : result.g;\n result.b = isExpZero.b ? 1.0 : result.b;\n result.a = isExpZero.a ? 1.0 : result.a;\n\n vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new Ba("\nif(a < 0.0 && floor(b) < b){\n return NAN;\n}\nif (b == 0.0) {\n return 1.0;\n}\nreturn (round(mod(b, 2.0)) != 1) ?\n pow(abs(a), b) : sign(a) * pow(abs(a), b);\n",t.shape,e.shape),r=Dt(t.dtype,e.dtype);return this.compileAndRun(n,[t,e],r)},o.prototype.ceil=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.ceil(t);if(i().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,Ns,t.dtype);var e=new Cs(t.shape,Ns);return this.compileAndRun(e,[t])},o.prototype.floor=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.floor(t);if(i().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,Fs,t.dtype);var e=new Cs(t.shape,Fs);return this.compileAndRun(e,[t])},o.prototype.sign=function(t){var e=new Cs(t.shape,"\n if (isnan(x)) { return 0.0; }\n return sign(x);\n");return this.compileAndRun(e,[t])},o.prototype.isNaN=function(t){var e=new Cs(t.shape,"return float(isnan(x));");return this.compileAndRun(e,[t],"bool")},o.prototype.isInf=function(t){var e=new Cs(t.shape,"return float(isinf(x));");return this.compileAndRun(e,[t],"bool")},o.prototype.isFinite=function(t){var e=new Cs(t.shape,"return float(!isnan(x) && !isinf(x));");return this.compileAndRun(e,[t],"bool")},o.prototype.round=function(t){var e=new Cs(t.shape,"\n // OpenGL ES does not support round function.\n // The algorithm is based on banker's rounding.\n float base = floor(x);\n if ((x - base) < 0.5) {\n return floor(x);\n } else if ((x - base) > 0.5) {\n return ceil(x);\n } else {\n if (mod(base, 2.0) == 0.0) {\n return base;\n } else {\n return base + 1.0;\n }\n }\n");return this.compileAndRun(e,[t])},o.prototype.exp=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.exp(t);if(i().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,_s,t.dtype);var e=new Cs(t.shape,_s);return this.compileAndRun(e,[t])},o.prototype.expm1=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.expm1(t);if(i().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,Os,t.dtype);var e=new Cs(t.shape,Os);return this.compileAndRun(e,[t])},o.prototype.softmax=function(t,e){var n=O([e],t.shape),r=this.max(t,n),o=wn(r.shape,n),a=this.subtract(t,r.reshape(o)),i=this.exp(a),s=this.sum(i,n).reshape(o);return this.realDivide(i,s)},o.prototype.log=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.log(t);if(i().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,"\n vec4 result = log(x);\n vec4 isNaN = vec4(lessThan(x, vec4(0.0)));\n result.r = isNaN.r == 1.0 ? NAN : result.r;\n result.g = isNaN.g == 1.0 ? NAN : result.g;\n result.b = isNaN.b == 1.0 ? NAN : result.b;\n result.a = isNaN.a == 1.0 ? NAN : result.a;\n\n return result;\n",t.dtype);var e=new Cs(t.shape,"if (x < 0.0) return NAN;\n return log(x);");return this.compileAndRun(e,[t])},o.prototype.log1p=function(t){var e=new Cs(t.shape,"return log(1.0 + x);");return this.compileAndRun(e,[t])},o.prototype.sqrt=function(t){var e=new Cs(t.shape,"return sqrt(x);");return this.compileAndRun(e,[t])},o.prototype.rsqrt=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.rsqrt(t);var e=new Cs(t.shape,"return inversesqrt(x);");return this.compileAndRun(e,[t])},o.prototype.reciprocal=function(t){var e=new Cs(t.shape,"return 1.0 / x;");return this.compileAndRun(e,[t])},o.prototype.relu=function(t){var e;return e=i().getBool("WEBGL_PACK")?new Xs(t.shape,qs):new Cs(t.shape,ks),this.compileAndRun(e,[t])},o.prototype.relu6=function(t){var e;return e=i().getBool("WEBGL_PACK")?new Xs(t.shape,Ks):new Cs(t.shape,Ss),this.compileAndRun(e,[t])},o.prototype.prelu=function(t,e){var n=i().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new La(Pa,t.shape,e.shape):new Ba(Ma,t.shape,e.shape);return this.compileAndRun(n,[t,e])},o.prototype.elu=function(t){if(i().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,js,t.dtype);var e=new Cs(t.shape,As);return this.compileAndRun(e,[t])},o.prototype.eluDer=function(t,e){var n=i().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new La("\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n",t.shape,e.shape):new Ba("return (b >= 1.0) ? a : a * (b + 1.0);",t.shape,e.shape);return this.compileAndRun(n,[t,e])},o.prototype.selu=function(t){var e=new Cs(t.shape,Ds);return this.compileAndRun(e,[t])},o.prototype.int=function(t){var e=new Cs(t.shape,"return float(int(x));");return this.compileAndRun(e,[t],"int32")},o.prototype.clip=function(t,e,n){var r,o=(r=i().getBool("WEBGL_PACK_CLIP")?new Ua(t.shape):new Wa(t.shape)).getCustomSetupFunc(e,n);return this.compileAndRun(r,[t],null,o)},o.prototype.abs=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.abs(t);if(i().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,Is,t.dtype);var e=new Cs(t.shape,Is);return this.compileAndRun(e,[t])},o.prototype.complexAbs=function(t){var e=this.texData.get(t.dataId),n=new Va(t.shape),r=[this.makeComplexComponentTensorInfo(t,e.complexTensors.real),this.makeComplexComponentTensorInfo(t,e.complexTensors.imag)];return this.compileAndRun(n,r)},o.prototype.sigmoid=function(t){var e=new Cs(t.shape,"return 1.0 / (1.0 + exp(-1.0 * x));");return this.compileAndRun(e,[t])},o.prototype.softplus=function(t){var e=new Cs(t.shape,"\n float epsilon = 1.1920928955078125e-7;\n float threshold = log(epsilon) + 2.0;\n\n bool too_large = x > -threshold;\n bool too_small = x < threshold;\n\n float result;\n float exp_x = exp(x);\n\n if (too_large){\n result = x;\n }\n else if (too_small){\n result = exp_x;\n }\n else{\n result = log(exp_x + 1.0);\n }\n return result;\n");return this.compileAndRun(e,[t])},o.prototype.sin=function(t){var e=new Cs(t.shape,Ms);return this.compileAndRun(e,[t])},o.prototype.cos=function(t){var e=new Cs(t.shape,Bs);return this.compileAndRun(e,[t])},o.prototype.tan=function(t){var e=new Cs(t.shape,"return tan(x);");return this.compileAndRun(e,[t])},o.prototype.asin=function(t){var e=new Cs(t.shape,Ps);return this.compileAndRun(e,[t])},o.prototype.acos=function(t){var e=new Cs(t.shape,Ls);return this.compileAndRun(e,[t])},o.prototype.atan=function(t){var e=new Cs(t.shape,Ws);return this.compileAndRun(e,[t])},o.prototype.atan2=function(t,e){var n=i().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new La("\n vec4 result = atan(a, b);\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new Ba("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return atan(a, b);\n",t.shape,e.shape);return this.compileAndRun(n,[t,e])},o.prototype.sinh=function(t){var e=new Cs(t.shape,"\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n");return this.compileAndRun(e,[t])},o.prototype.cosh=function(t){var e=new Cs(t.shape,"\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n");return this.compileAndRun(e,[t])},o.prototype.tanh=function(t){var e=new Cs(t.shape,"\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n");return this.compileAndRun(e,[t])},o.prototype.asinh=function(t){var e=new Cs(t.shape,Us);return this.compileAndRun(e,[t])},o.prototype.acosh=function(t){var e=new Cs(t.shape,Vs);return this.compileAndRun(e,[t])},o.prototype.atanh=function(t){var e=new Cs(t.shape,zs);return this.compileAndRun(e,[t])},o.prototype.erf=function(t){var e=new Cs(t.shape,'\n // Error function is calculated approximately with elementary function.\n // See "Handbook of Mathematical Functions with Formulas,\n // Graphs, and Mathematical Tables", Abramowitz and Stegun.\n float p = 0.3275911;\n float a1 = 0.254829592;\n float a2 = -0.284496736;\n float a3 = 1.421413741;\n float a4 = -1.453152027;\n float a5 = 1.061405429;\n\n float sign = sign(x);\n x = abs(x);\n float t = 1.0 / (1.0 + p * x);\n return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));\n');return this.compileAndRun(e,[t])},o.prototype.step=function(t,e){var n=new Cs(t.shape,function(t){return void 0===t&&(t=0),Es+"\n return x > 0.0 ? 1.0 : float("+t+");\n "}(e));return this.compileAndRun(n,[t])},o.prototype.conv2dByMatMul=function(t,e,n,r,o,a){var s=t.shape,u=this.texData.get(t.dataId),c=n.inChannels,l=s[0]*s[1]*s[2],h=n.outChannels,f="channelsLast"===n.dataFormat,d=(1===l||1===h)&&c>1e3,p=s[2]%2!=0&&!!u.isPacked;if(d||!i().getBool("WEBGL_LAZILY_UNPACK")||!i().getBool("WEBGL_PACK_BINARY_OPERATIONS")||!p){var v=f?s[0]*s[1]*s[2]:s[0]*s[2]*s[3],m=this.reshape(t,[1,v,n.inChannels]),g=this.reshape(e,[1,n.inChannels,n.outChannels]);return this.reshape(this.fusedBatchMatMul({a:m,b:g,transposeA:!1,transposeB:!1,bias:r,activation:o,preluActivationWeights:a}),n.outShape)}var y=f?s[0]*s[1]*(s[2]+1):s[0]*s[2]*(s[3]+1),x={dataId:t.dataId,shape:[1,y,n.inChannels],dtype:t.dtype},b=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,C(_e(u.shape,x.shape),(function(){return "packed reshape "+u.shape+" to "+x.shape+" isn't free"}));var w=this.reshape(e,[1,n.inChannels,n.outChannels]),E=this.fusedBatchMatMul({a:x,b:w,transposeA:!1,transposeB:!1,bias:r,activation:o,preluActivationWeights:a}),R=this.texData.get(E.dataId);return C(R.isPacked,(function(){return "batchMatMul result is expected to be packed"})),u.shape=b,R.shape=n.outShape,Lt.makeTensorFromDataId(E.dataId,n.outShape,E.dtype)},o.prototype.conv2dWithIm2Row=function(t,e,n,r,o,a){var i=n.filterWidth,s=n.filterHeight,u=n.inChannels,c=n.outWidth,l=n.outHeight,h="channelsLast"===n.dataFormat,f=i*s*u,d=l*c,p=[f,d],v=t.squeeze([0]),m=e.reshape([1,f,-1]),g=new Li(p,v.shape,n),y=this.compileAndRun(g,[v]).reshape([1,p[0],p[1]]),x=null!=r,b=null!=a,w=o?Qs(o,!0):null,C=new Hi(y.shape,[1,d,n.outChannels],!0,!1,x,w,b),E=[y,m];r&&E.push(r),b&&E.push(a);var R=this.compileAndRun(C,E);return h?R.reshape([1,l,c,n.outChannels]):R.reshape([1,n.outChannels,l,c])},o.prototype.fusedConv2d=function(t){var e=t.input,n=t.filter,r=t.convInfo,o=t.bias,a=t.activation,s=t.preluActivationWeights;if(1===r.filterHeight&&1===r.filterWidth&&1===r.dilationHeight&&1===r.dilationWidth&&1===r.strideHeight&&1===r.strideWidth&&("SAME"===r.padInfo.type||"VALID"===r.padInfo.type))return this.conv2dByMatMul(e,n,r,o,a,s);if(i().getBool("WEBGL_CONV_IM2COL")&&1===e.shape[0])return this.conv2dWithIm2Row(e,n,r,o,a,s);var u=null!=o,c=null!=s,l=a?Qs(a,!1):null,h=new Qa(r,u,l,c),f=[e,n];return o&&f.push(o),s&&f.push(s),this.compileAndRun(h,f)},o.prototype.conv2d=function(t,e,n){if(1===n.filterHeight&&1===n.filterWidth&&1===n.dilationHeight&&1===n.dilationWidth&&1===n.strideHeight&&1===n.strideWidth&&("SAME"===n.padInfo.type||"VALID"===n.padInfo.type))return this.conv2dByMatMul(t,e,n);if(i().getBool("WEBGL_CONV_IM2COL")&&1===t.shape[0])return this.conv2dWithIm2Row(t,e,n);var r=new Qa(n);return this.compileAndRun(r,[t,e])},o.prototype.conv2dDerInput=function(t,e,n){var r=new Ka(n);return this.compileAndRun(r,[t,e])},o.prototype.conv2dDerFilter=function(t,e,n){var r=new qa(n);return this.compileAndRun(r,[t,e])},o.prototype.fusedDepthwiseConv2D=function(t){var e,n=t.input,r=t.filter,o=t.convInfo,a=t.bias,s=t.activation,u=t.preluActivationWeights,c=i().getBool("WEBGL_PACK_DEPTHWISECONV")&&o.strideWidth<=2&&o.outChannels/o.inChannels==1,l=s?Qs(s,c):null,h=[n,r],f=null!=a,d=null!=u;return f&&h.push(a),d&&h.push(u),c?(e=new ti(o,f,l,d),this.compileAndRun(e,h)):(e=new Za(o,f,l,d),this.compileAndRun(e,h))},o.prototype.depthwiseConv2D=function(t,e,n){var r;return i().getBool("WEBGL_PACK_DEPTHWISECONV")&&n.strideWidth<=2&&n.outChannels/n.inChannels==1?(r=new ti(n),this.compileAndRun(r,[t,e])):(r=new Za(n),this.compileAndRun(r,[t,e]))},o.prototype.depthwiseConv2DDerInput=function(t,e,n){var r=new $a(n);return this.compileAndRun(r,[t,e])},o.prototype.depthwiseConv2DDerFilter=function(t,e,n){var r=new Ya(n);return this.compileAndRun(r,[t,e])},o.prototype.conv3d=function(t,e,n){var r=new Ja(n);return this.compileAndRun(r,[t,e])},o.prototype.conv3dDerInput=function(t,e,n){var r=new Xa(n);return this.compileAndRun(r,[t,e])},o.prototype.conv3dDerFilter=function(t,e,n){var r=new ja(n);return this.compileAndRun(r,[t,e])},o.prototype.maxPool=function(t,e){var n=new $i(e,"max",!1);return this.compileAndRun(n,[t])},o.prototype.avgPool=function(t,e){var n=new $i(e,"avg",!1);return this.compileAndRun(n,[t],"float32")},o.prototype.maxPoolBackprop=function(t,e,n,r){var o=new $i(r,"max",!0),a=this.compileAndRun(o,[e]),i=new zi(r),s=this.compileAndRun(i,[t,a],e.dtype);return a.dispose(),s},o.prototype.avgPoolBackprop=function(t,e,n){var r=new Ia(n);return this.compileAndRun(r,[t],e.dtype)},o.prototype.cast=function(t,e){return Po(t,e,this)},o.prototype.unstack=function(t,e){for(var n=t.shape[e],r=new Array(t.rank-1),o=0,a=0;a1,(function(){return "blockSize should be > 1 for depthToSpace, but was: "+e}));var r=t.shape[0],o="NHWC"===n?t.shape[1]:t.shape[2],a="NHWC"===n?t.shape[2]:t.shape[3],i="NHWC"===n?t.shape[3]:t.shape[1],s=o*e,u=a*e,c=i/(e*e),l=new ii("NHWC"===n?[r,s,u,c]:[r,c,s,u],e,n);return this.compileAndRun(l,[t])},o.prototype.split=function(t,e,n){return Zo(t,e,n)},o.prototype.scatterND=function(t,e,n){var r=Zr(0,t,n),o=r.sliceRank,a=r.numUpdates,i=r.sliceSize,s=r.strides,u=r.outputSize,c=[u/i,i],l=t.reshape([a,o]),h=e.reshape([a,i]);if(0===u)return Lo(Fn([]),n);var f=On(0),d=new ss(a,o,l.rank,h.rank,s,c);return this.compileAndRun(d,[h,l,f]).reshape(n)},o.prototype.sparseToDense=function(t,e,n,r){var o=Zr(0,t,n),a=o.sliceRank,i=o.numUpdates,s=o.strides,u=o.outputSize,c=new ss(i,a,t.rank,e.rank,s,[u,1],!1);return this.compileAndRun(c,[e,t,r]).reshape(n)},o.prototype.fft=function(t){return this.fftImpl(t,!1)},o.prototype.ifft=function(t){return this.fftImpl(t,!0)},o.prototype.fftImpl=function(t,e){var n=this.texData.get(t.dataId),r=new pi(fi,t.shape,e),o=new pi(di,t.shape,e),a=[this.makeComplexComponentTensorInfo(t,n.complexTensors.real),this.makeComplexComponentTensorInfo(t,n.complexTensors.imag)],i=this.compileAndRun(r,a),s=this.compileAndRun(o,a),u=this.complex(i,s).as2D(t.shape[0],t.shape[1]);return i.dispose(),s.dispose(),u},o.prototype.gatherND=function(t,e){var n=e.shape,r=n[n.length-1],o=jr(t,e),a=o[0],i=o[1],s=o[2],u=o[3],c=e.reshape([i,r]),l=t.reshape([t.size/s,s]),h=new gi(r,u,[i,s]);return this.compileAndRun(h,[l,c]).reshape(a)},o.prototype.fill=function(t,e,n){if("string"===(n=n||j(e))){var r=P(n,k(t));return r.fill(e),Lt.makeTensor(r,t,n,this)}var o=new vi(t,e),a=o.getCustomSetupFunc(e);return this.compileAndRun(o,[],n,a)},o.prototype.onesLike=function(t){if("string"===t.dtype)throw new Error("onesLike is not supported under string dtype");return this.fill(t.shape,1,t.dtype)},o.prototype.zerosLike=function(t){return this.fill(t.shape,"string"===t.dtype?"":0,t.dtype)},o.prototype.linspace=function(t,e,n){return Wo(t,e,n)},o.prototype.makeTensorInfo=function(t,e){var n=this.write(null,t,e);return this.texData.get(n).usage=null,{dataId:n,shape:t,dtype:e}},o.prototype.makeOutput=function(t,e){var n=this.makeTensorInfo(t,e).dataId;return Lt.makeTensorFromDataId(n,t,e,this)},o.prototype.unpackTensor=function(t){var e=new Ys(t.shape);return this.runWebGLProgram(e,[t],t.dtype)},o.prototype.packTensor=function(t){var e=new ji(t.shape);return this.runWebGLProgram(e,[t],t.dtype,null,!0)},o.prototype.packedReshape=function(t,e){var n=[Ae(t.shape)].concat(De(t.shape)),r={dtype:t.dtype,shape:n,dataId:t.dataId},o=[Ae(e)].concat(De(e)),a=new Zi(o,n),i=this.runWebGLProgram(a,[r],t.dtype,null,!0);return {dataId:i.dataId,shape:e,dtype:i.dtype}},o.prototype.decode=function(t){var e,n=this.texData.get(t),r=n.isPacked,o=n.shape,a=n.dtype,i=Te(o);e=r?new ai(i):new oi(i);return {dtype:a,shape:o,dataId:this.runWebGLProgram(e,[{shape:i,dtype:a,dataId:t}],a,null,!0).dataId}},o.prototype.runWebGLProgram=function(t,e,n,r,o){var a=this;void 0===o&&(o=!1);var s=this.makeTensorInfo(t.outputShape,n),u=this.texData.get(s.dataId);if(t.packedOutput&&(u.isPacked=!0),t.outPackingScheme===Vt.DENSE){var c=Yt(t.outputShape);u.texShape=c.map((function(t){return 2*t}));}if(null!=t.outTexUsage&&(u.usage=t.outTexUsage),0===k(s.shape))return u.values=B(s.dtype,0),s;var l=[],h=e.map((function(e){if("complex64"===e.dtype)throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");var n=a.texData.get(e.dataId);if(null==n.texture){if(!t.packedInputs&&k(e.shape)<=i().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return {shape:e.shape,texData:null,isUniform:!0,uniformValues:n.values};t.packedInputs&&(n.isPacked=!0,n.shape=e.shape);}else if(!!n.isPacked!=!!t.packedInputs)e=n.isPacked?a.unpackTensor(e):a.packTensor(e),l.push(e),n=a.texData.get(e.dataId);else if(n.isPacked&&!_e(n.shape,e.shape)){var r=e,o=e.shape;e.shape=n.shape,e=a.packedReshape(e,o),l.push(e),n=a.texData.get(e.dataId),r.shape=o;}return a.uploadToGPU(e.dataId),{shape:e.shape,texData:n,isUniform:!1}}));this.uploadToGPU(s.dataId);var f,d={shape:s.shape,texData:u,isUniform:!1},p=function(t,e,n){var r="";e.concat(n).forEach((function(t){var e=null!=t.texData&&null!=t.texData.slice&&t.texData.slice.flatOffset>0,n=t.isUniform?"uniform":t.texData.texShape;r+=t.shape+"_"+n+"_"+e;}));var o=t.userCode,a=t.constructor.name;return a+="_"+r+"_"+o}(t,h,d),v=this.getAndSaveBinary(p,(function(){return function(t,e,n,r){var o=e.userCode,a=n.map((function(t,n){var r={logicalShape:t.shape,texShape:t.isUniform?null:t.texData.texShape,isUniform:t.isUniform,isPacked:!t.isUniform&&t.texData.isPacked,flatOffset:null};return null!=t.texData&&null!=t.texData.slice&&t.texData.slice.flatOffset>0&&(r.flatOffset=t.texData.slice.flatOffset),{name:e.variableNames[n],shapeInfo:r}})),s=a.map((function(t){return t.shapeInfo})),u={logicalShape:r.shape,texShape:r.texData.texShape,isUniform:!1,isPacked:r.texData.isPacked,flatOffset:null},c=fa(a,u,o,e.packedInputs),l=t.createProgram(c),h=null,f=t.getUniformLocation(l,"NAN",!1);1===i().getNumber("WEBGL_VERSION")&&(h=t.getUniformLocation(l,"INFINITY",!1));for(var d={},p=0;p0)return 32}return 16}))),this.floatPrecisionValue},o.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},o.prototype.uploadToGPU=function(t){var e,n=this.texData.get(t),r=n.shape,o=n.dtype,a=n.values,i=n.texture,s=n.usage,u=n.isPacked;if(null==i){var c,l=null!=this.activeTimers;l&&(c=et());var h=n.texShape;if(null==h&&(h=Ne(r,u),n.texShape=h),null!=a){var f=Te(r),d=void 0,p=h[1],v=h[0],m=a instanceof Uint8Array;u?(p=(e=$t(h[0],h[1]))[0],v=e[1],d=new hi(f,[v,p],m)):d=new li(f,[v,p],m);var g=this.makeTensorInfo([v,p],o);this.texData.get(g.dataId).usage=m?zt.PIXELS:zt.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(g.dataId),p,v,a);var y=this.runWebGLProgram(d,[g],o,null,!0),x=this.texData.get(y.dataId);n.texture=x.texture,n.texShape=x.texShape,n.isPacked=x.isPacked,n.usage=x.usage,this.disposeData(g.dataId),this.texData.delete(y.dataId),n.values=null,l&&(this.uploadWaitMs+=et()-c);}else {var b=this.acquireTexture(h,s,o,u);n.texture=b;}}},o.prototype.convertAndCacheOnCPU=function(t,e){var n=this.texData.get(t),r=n.dtype;return this.releaseGPUData(t),null!=e&&(n.values=function(t,e){if("float32"===e||"complex64"===e)return t;if("int32"===e||"bool"===e){for(var n="int32"===e?new Int32Array(t.length):new Uint8Array(t.length),r=0;r1024*this.numMBBeforeWarning*1024){var o=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn("High memory usage in GPU: "+o+" MB, most likely due to a memory leak");}return this.textureManager.acquireTexture(t,e,r)},o.prototype.computeBytes=function(t,e){return t[0]*t[1]*z(e)},o}(bo);Wt()&&Lt.registerBackend("webgl",(function(){return new Zs}),2);var tu=An({square_:function(t){var e=mn(t,"x","square"),n=[e];return Lt.runKernelFunc((function(t,n){return n([e]),t.square(e)}),{x:e},null,"Square",{},n,[])}}),eu="SquaredDifference";var nu=An({squaredDifference_:function(t,e){var n,r=mn(t,"a","squaredDifference"),o=mn(e,"b","squaredDifference");n=Nt(r,o),r=n[0],o=n[1],Ro(r.shape,o.shape);var a={a:r,b:o},i=[r,o];return Lt.runKernelFunc((function(t,e){var n=t.squaredDifference(r,o);return e([r,o]),n}),a,(function(t,e){var n=e[0],r=e[1],o=On(2);return {a:function(){return t.mul(n.sub(r).mul(o))},b:function(){return t.mul(r.sub(n).mul(o))}}}),eu,{},i,[])}});var ru=An({abs_:function(t){var e=mn(t,"x","abs");return "complex64"===e.dtype?Lt.runKernelFunc((function(t){return t.complexAbs(e)}),{$x:e}):Lt.runKernelFunc((function(t,n){var r=t.abs(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return {x:function(){return t.mul(n.toFloat().step(-1))}}}),"Abs")}}),ou=An({acos_:function(t){var e=mn(t,"x","acos");return Lt.runKernelFunc((function(t,n){var r=t.acos(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){return t.divStrict(On(1).sub(n.toFloat().square()).sqrt()).neg()}}}))}}),au=An({acosh_:function(t){var e=mn(t,"x","acosh");return Lt.runKernelFunc((function(t,n){var r=t.acosh(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){return t.divStrict(n.toFloat().square().sub(1).sqrt())}}}))}}),iu=An({asin_:function(t){var e=mn(t,"x","asin");return Lt.runKernelFunc((function(t,n){var r=t.asin(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){return t.divStrict(On(1).sub(n.toFloat().square()).sqrt())}}}))}}),su=An({asinh_:function(t){var e=mn(t,"x","asinh");return Lt.runKernelFunc((function(t,n){var r=t.asinh(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){return t.divStrict(On(1).add(n.toFloat().square()).sqrt())}}}))}}),uu=An({atan_:function(t){var e=mn(t,"x","atan");return Lt.runKernelFunc((function(t,n){var r=t.atan(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){return t.div(n.toFloat().square().add(1))}}}))}}),cu=An({atanh_:function(t){var e=mn(t,"x","atanh");return Lt.runKernelFunc((function(t,n){var r=t.atanh(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){return t.div(On(1).sub(n.toFloat().square()))}}}))}}),lu=An({ceil_:function(t){var e=mn(t,"x","ceil");return Lt.runKernelFunc((function(t){return t.ceil(e)}),{$x:e},(function(t){return {$x:function(){return Xn(t)}}}))}}),hu=An({clipByValue_:function(t,e,n){var r=mn(t,"x","clipByValue");C(e<=n,(function(){return "Error in clip: min ("+e+") must be less than or equal to max ("+n+")."}));var o=[r],a={min:e,max:n};return Lt.runKernelFunc((function(t,o){var a=t.clip(r,e,n);return o([r]),a}),{x:r},(function(t,r){var o=r[0];return {x:function(){return t.where(o.greaterEqual(e).logicalAnd(o.lessEqual(n)),Xn(t))}}}),"ClipByValue",a,o)}}),fu=An({cos_:function(t){var e=mn(t,"x","cos"),n=[e];return Lt.runKernelFunc((function(t,n){var r=t.cos(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return {x:function(){return n.toFloat().sin().neg().mul(t)}}}),"Cos",{},n)}}),du=An({cosh_:function(t){var e=mn(t,"x","cosh");return Lt.runKernelFunc((function(t,n){var r=t.cosh(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){return n.toFloat().sinh().mulStrict(t)}}}))}}),pu=An({erf_:function(t){var e=mn(t,"x","erf");return C("int32"===e.dtype||"float32"===e.dtype,(function(){return "Input dtype must be `int32` or `float32`."})),"int32"===e.dtype&&(e=e.toFloat()),Lt.runKernelFunc((function(t,n){var r=t.erf(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){return t.mul(n.square().neg().exp().mul(2/Math.sqrt(Math.PI)))}}}))}}),vu=An({exp_:function(t){var e=mn(t,"x","exp");return Lt.runKernelFunc((function(t,n){var r=t.exp(e);return n([r]),r}),{x:e},(function(t,e){return {x:function(){return t.mulStrict(e[0])}}}),"Exp",{},[],[!0])}}),mu=An({expm1_:function(t){var e=mn(t,"x","expm1");return Lt.runKernelFunc((function(t,n){var r=t.expm1(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){return t.mul(n.exp())}}}))}}),gu=An({floor_:function(t){var e=mn(t,"x","floor");return Lt.runKernelFunc((function(t){return t.floor(e)}),{$x:e},(function(t){return {$x:function(){return Xn(t)}}}))}}),yu=An({log_:function(t){var e=mn(t,"x","log"),n=[e];return Lt.runKernelFunc((function(t,n){var r=t.log(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return {x:function(){return t.div(n.toFloat())}}}),"Log",{},n)}}),xu=An({log1p_:function(t){var e=mn(t,"x","log1p");return Lt.runKernelFunc((function(t,n){var r=t.log1p(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){return t.div(n.add(1))}}}))}}),bu=An({logSigmoid_:function(t){var e=mn(t,"x","logSigmoid");return Lt.runKernelFunc((function(t,n){var r=t.softplus(e.neg()).neg();return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){return t.mul(n.neg().sigmoid())}}}))}}),wu=An({neg_:function(t){var e=mn(t,"x","neg"),n=[e];return Lt.runKernelFunc((function(t){return t.neg(e)}),{x:e},(function(t){return {x:function(){return t.neg()}}}),"Neg",{},n)}}),Cu=An({reciprocal_:function(t){var e=mn(t,"x","reciprocal");return Lt.runKernelFunc((function(t,n){var r=t.reciprocal(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){return t.div(n.square().neg())}}}))}}),Eu=An({round_:function(t){var e=mn(t,"x","round");return Lt.runKernelFunc((function(t){return t.round(e)}),{$x:e},(function(t){return {$x:function(){return Xn(t)}}}))}}),Ru=An({rsqrt_:function(t){var e=mn(t,"x","rsqrt"),n=[e];return Lt.runKernelFunc((function(t,n){var r=t.rsqrt(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return {x:function(){return t.div(n.pow(1.5).mul(2)).neg()}}}),"Rsqrt",{},n)}}),Iu=An({sigmoid_:function(t){var e=mn(t,"x","sigmoid");return Lt.runKernelFunc((function(t,n){var r=t.sigmoid(e);return n([r]),r}),{x:e},(function(t,e){var n=e[0];return {x:function(){return t.mul(n.mul(On(1).sub(n)))}}}),"Sigmoid")}}),ku=An({sign_:function(t){var e=mn(t,"x","sign");return Lt.runKernelFunc((function(t){return t.sign(e)}),{$x:e},(function(t){return {$x:function(){return Xn(t)}}}))}}),Su=An({isNaN_:function(t){var e=mn(t,"x","isNaN");return Lt.runKernelFunc((function(t){return t.isNaN(e)}),{$x:e},(function(t){return {$x:function(){return Xn(t)}}}))}}),Au=An({isInf_:function(t){var e=mn(t,"x","isInf");return Lt.runKernelFunc((function(t){return t.isInf(e)}),{$x:e},(function(t){return {$x:function(){return Xn(t)}}}))}}),Du=An({isFinite_:function(t){var e=mn(t,"x","isFinite");return Lt.runKernelFunc((function(t){return t.isFinite(e)}),{$x:e},(function(t){return {$x:function(){return Xn(t)}}}))}}),Tu=An({sin_:function(t){var e=mn(t,"x","sin"),n=[e];return Lt.runKernelFunc((function(t,n){var r=t.sin(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return {x:function(){return n.toFloat().cos().mul(t)}}}),"Sin",{},n)}}),Nu=An({sinh_:function(t){var e=mn(t,"x","sinh");return Lt.runKernelFunc((function(t,n){var r=t.sinh(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){return n.toFloat().cosh().mulStrict(t)}}}))}}),Fu=An({softplus_:function(t){var e=mn(t,"x","softplus");return Lt.runKernelFunc((function(t,n){var r=t.softplus(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){return t.mul(n.sigmoid())}}}))}}),_u=An({sqrt_:function(t){var e=mn(t,"x","sqrt");return Lt.runKernelFunc((function(t,n){var r=t.sqrt(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){return t.div(n.toFloat().sqrt().mul(2))}}}))}}),Ou=An({step_:function(t,e){void 0===e&&(e=0);var n=mn(t,"x","step");return Lt.runKernelFunc((function(t){return t.step(n,e)}),{$x:n},(function(t){return {$x:function(){return Xn(t)}}}))}}),Mu=An({tan_:function(t){var e=mn(t,"x","tan");return Lt.runKernelFunc((function(t,n){var r=t.tan(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){return t.div(n.cos().square())}}}))}}),Bu=An({tanh_:function(t){var e=mn(t,"x","tanh");return Lt.runKernelFunc((function(t,n){var r=t.tanh(e);return n([r]),r}),{x:e},(function(t,e){var n=e[0];return {x:function(){return On(1).sub(n.square()).mulStrict(t)}}}),"Tanh",{},null,[!0])}});function Pu(t,e,n,r,o,a){var i,s,u=mn(t,"x","batchNorm"),c=mn(e,"mean","batchNorm"),l=mn(n,"variance","batchNorm");return null!=o&&(i=mn(o,"scale","batchNorm")),null!=r&&(s=mn(r,"offset","batchNorm")),C(2===u.rank,(function(){return "Error in batchNorm3D: x must be rank 3 but got rank "+u.rank+"."})),C(2===c.rank||1===c.rank,(function(){return "Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank "+c.rank+"."})),C(2===l.rank||1===l.rank,(function(){return "Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank "+l.rank+"."})),null!=i&&C(2===i.rank||1===i.rank,(function(){return "Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank "+i.rank+"."})),null!=s&&C(2===s.rank||1===s.rank,(function(){return "Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank "+s.rank+"."})),Uu(u,c,l,s,i,a)}function Lu(t,e,n,r,o,a){var i,s,u=mn(t,"x","batchNorm"),c=mn(e,"mean","batchNorm"),l=mn(n,"variance","batchNorm");return null!=o&&(i=mn(o,"scale","batchNorm")),null!=r&&(s=mn(r,"offset","batchNorm")),C(3===u.rank,(function(){return "Error in batchNorm3D: x must be rank 3 but got rank "+u.rank+"."})),C(3===c.rank||1===c.rank,(function(){return "Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank "+c.rank+"."})),C(3===l.rank||1===l.rank,(function(){return "Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank "+l.rank+"."})),null!=i&&C(3===i.rank||1===i.rank,(function(){return "Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank "+i.rank+"."})),null!=s&&C(3===s.rank||1===s.rank,(function(){return "Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank "+s.rank+"."})),Uu(u,c,l,s,i,a)}function Wu(t,e,n,r,o,a){var i,s,u=mn(t,"x","batchNorm"),c=mn(e,"mean","batchNorm"),l=mn(n,"variance","batchNorm");return null!=o&&(i=mn(o,"scale","batchNorm")),null!=r&&(s=mn(r,"offset","batchNorm")),C(4===u.rank,(function(){return "Error in batchNorm4D: x must be rank 4 but got rank "+u.rank+"."})),C(4===c.rank||1===c.rank,(function(){return "Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank "+c.rank+"."})),C(4===l.rank||1===l.rank,(function(){return "Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank "+l.rank+"."})),null!=i&&C(4===i.rank||1===i.rank,(function(){return "Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank "+i.rank+"."})),null!=s&&C(4===s.rank||1===s.rank,(function(){return "Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank "+s.rank+"."})),Uu(u,c,l,s,i,a)}function Uu(t,e,n,r,o,a){null==a&&(a=.001);var i,s,u,c=mn(t,"x","batchNorm"),l=mn(e,"mean","batchNorm"),h=mn(n,"variance","batchNorm");null!=o&&(i=mn(o,"scale","batchNorm")),null!=r&&(s=mn(r,"offset","batchNorm")),C(l.rank===h.rank,(function(){return "Batch normalization gradient requires mean and variance to have equal ranks."})),C(null==s||l.rank===s.rank,(function(){return "Batch normalization gradient requires mean and offset to have equal ranks."})),C(null==i||l.rank===i.rank,(function(){return "Batch normalization gradient requires mean and scale to have equal ranks."})),u=0===c.rank||1===c.rank?c.as4D(1,1,1,c.size):2===c.rank?c.as4D(1,1,c.shape[0],c.shape[1]):3===c.rank?c.as4D(1,c.shape[0],c.shape[1],c.shape[2]):c;var f=[c,l,h,i];return Lt.runKernelFunc((function(t,e){var n=t.batchNormalization(u,Vu(l),Vu(h),a,Vu(i),Vu(s));return e([c,l,h,i]),n}),{x:c,mean:l,variance:h,scale:i,offset:s},(function(t,e){var n=e,r=n[0],o=n[1],i=n[2],s=n[3],c=null==s?On(1):s,l=Eo(o.shape,u.shape),h=[];if(1===o.rank){for(var f=0;f0&&(e=e.sum(n)),e.reshape(r.shape)},b:function(){var e=t,n=Eo(o.shape,a);return n.length>0&&(e=e.sum(n)),e.reshape(o.shape)}}}),"Add")}}),oc=An({addN_:function(t){C(Array.isArray(t),(function(){return "The argument passed to tf.addN() must be a list of tensors"})),C(t.length>=1,(function(){return "Must pass at least one tensor to tf.addN(), but got "+t.length}));var e=t.map((function(t,e){return mn(t,"tensors"+e,"addN")})),n=e[0];e.forEach((function(t){if(t.dtype!==n.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")})),e.forEach((function(t){if(!S(t.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")}));var r=e;return Lt.runKernelFunc((function(t){return t.addN(e)}),r,(function(t){var n={};return e.forEach((function(e,r){n[r]=function(){return t.clone()};})),n}),"AddN")}}),ac=An({addStrict_:function(t,e){var n=mn(t,"a","addStrict"),r=mn(e,"b","addStrict");return E(n.shape,r.shape,"Error in addStrict: "),n.add(r)}}),ic=An({atan2_:function(t,e){var n,r=mn(t,"a","atan2"),o=mn(e,"b","atan2");n=Nt(r,o),r=n[0],o=n[1];var a=Ro(r.shape,o.shape);return Lt.runKernelFunc((function(t,e){var n=t.atan2(r,o);return e([r,o]),n}),{$a:r,$b:o},(function(t,e){var n=e[0],r=e[1];return {$a:function(){var e=rc(n.square(),r.square()),o=t.mul(r.div(e)),i=Eo(n.shape,a);return i.length>0&&(o=o.sum(i)),o.reshape(n.shape)},$b:function(){var e=rc(n.square(),r.square()),o=wu(t.mul(n.div(e))),i=Eo(r.shape,a);return i.length>0&&(o=o.sum(i)),o.reshape(r.shape)}}}))}}),sc=An({div_:function(t,e){var n,r=mn(t,"a","div"),o=mn(e,"b","div");if(n=Nt(r,o),r=n[0],o=n[1],"int32"===r.dtype&&"int32"===o.dtype)return lc(r,o);var a=Ro(r.shape,o.shape);return Lt.runKernelFunc((function(t,e){var n=t.realDivide(r,o);return e([r,o]),n}),{a:r,b:o},(function(t,e){var n=e[0],r=e[1];return {a:function(){var e=t.div(r.toFloat()),o=Eo(n.shape,a);return o.length>0?e.sum(o).reshape(n.shape):e},b:function(){var e=t.mul(n.toFloat()),o=Eo(r.shape,a);o.length>0&&(e=e.sum(o).reshape(r.shape));var i=r.square();return e.div(i.toFloat()).neg()}}}),"Div")}}),uc=An({divNoNan_:function(t,e){var n,r=mn(t,"a","div"),o=mn(e,"b","div");r=(n=Nt(r,o))[0],o=n[1];var a=sc(r,o),i=Xn(a),s=o.equal(i);return ec(s,i,a)}}),cc=An({divStrict_:function(t,e){var n=mn(t,"a","div"),r=mn(e,"b","div");return E(n.shape,r.shape,"Error in divideStrict: "),n.div(r)}}),lc=An({floorDiv_:function(t,e){var n,r=mn(t,"a","floorDiv"),o=mn(e,"b","floorDiv");n=Nt(r,o),r=n[0],o=n[1];var a=Ro(r.shape,o.shape);return Lt.runKernelFunc((function(t,e){var n=t.floorDiv(r,o);return e([r,o]),n}),{a:r,b:o},(function(t,e){var n=e[0],r=e[1];return {a:function(){var e=t.div(r.toFloat()),o=Eo(n.shape,a);return o.length>0?e.sum(o).reshape(n.shape):e},b:function(){var e=t.mul(n.toFloat()),o=Eo(r.shape,a);o.length>0&&(e=e.sum(o).reshape(r.shape));var i=r.square();return e.div(i.toFloat()).neg()}}}),"FloorDiv")}}),hc=An({maximum_:function(t,e){var n,r=mn(t,"a","maximum"),o=mn(e,"b","maximum");return n=Nt(r,o),r=n[0],o=n[1],"bool"===r.dtype&&(r=r.toInt(),o=o.toInt()),Ro(r.shape,o.shape),Lt.runKernelFunc((function(t,e){var n=t.maximum(r,o);return e([r,o]),n}),{a:r,b:o},(function(t,e){var n=e[0],r=e[1];return {a:function(){return t.mul(n.greaterEqual(r).toFloat())},b:function(){return t.mul(n.less(r).toFloat())}}}),"Maximum")}}),fc=An({maximumStrict_:function(t,e){var n=mn(t,"a","maximumStrict"),r=mn(e,"b","maximumStrict");return E(n.shape,r.shape,"Error in maximumStrict: "),n.maximum(r)}}),dc=An({minimum_:function(t,e){var n,r=mn(t,"a","minimum"),o=mn(e,"b","minimum");return n=Nt(r,o),r=n[0],o=n[1],"bool"===r.dtype&&(r=r.toInt(),o=o.toInt()),Ro(r.shape,o.shape),Lt.runKernelFunc((function(t,e){var n=t.minimum(r,o);return e([r,o]),n}),{a:r,b:o},(function(t,e){var n=e[0],r=e[1];return {a:function(){return t.mul(n.lessEqual(r).toFloat())},b:function(){return t.mul(n.greater(r).toFloat())}}}),"Minimum")}}),pc=An({minimumStrict_:function(t,e){var n=mn(t,"a","minimumStrict"),r=mn(e,"b","minimumStrict");return E(n.shape,r.shape,"Error in minimumStrict: "),n.minimum(r)}}),vc=An({mod_:function(t,e){var n,r=mn(t,"a","mod"),o=mn(e,"b","mod");n=Nt(r,o),r=n[0],o=n[1];var a=Ro(r.shape,o.shape);return Lt.runKernelFunc((function(t,e){var n=t.mod(r,o);return e([r,o]),n}),{$a:r,$b:o},(function(t,e){var n=e[0],r=e[1];return {$a:function(){var e=Eo(n.shape,a);return e.length>0?t.sum(e).reshape(n.shape):t},$b:function(){var e=t.mul(n.div(r).floor().neg()),o=Eo(r.shape,a);return o.length>0?e.sum(o).reshape(r.shape):e}}}))}}),mc=An({modStrict_:function(t,e){var n=mn(t,"a","modStrict"),r=mn(e,"b","modStrict");return E(n.shape,r.shape,"Error in modStrict: "),n.mod(r)}}),gc=An({mul_:function(t,e){var n,r=mn(t,"a","mul"),o=mn(e,"b","mul");n=Nt(r,o),r=n[0],o=n[1];var a=Ro(r.shape,o.shape);return Lt.runKernelFunc((function(t,e){var n=t.multiply(r,o);return e([r,o]),n}),{a:r,b:o},(function(t,e){var n=e[0],r=e[1];return {a:function(){var e=t.mul(r.toFloat()),o=Eo(n.shape,a);return o.length>0?e.sum(o).reshape(n.shape):e},b:function(){var e=t.mul(n.toFloat()),o=Eo(r.shape,a);return o.length>0?e.sum(o).reshape(r.shape):e}}}),"Mul")}}),yc=An({mulStrict_:function(t,e){var n=mn(t,"a","mul"),r=mn(e,"b","mul");return E(n.shape,r.shape,"Error in multiplyStrict: "),n.mul(r)}}),xc=An({pow_:function(t,e){var n,r=mn(t,"base","pow"),o=mn(e,"exp","pow");n=Nt(r,o),r=n[0],o=n[1];var a=Ro(r.shape,o.shape),i=[r,o];return Lt.runKernelFunc((function(t,e){var n=t.pow(r,o);return e([r,o,n]),n}),{a:r,b:o},(function(t,e){var n=e[0],r=e[1],o=e[2];return {a:function(){var e=r.toFloat(),o=t.mul(e.mul(n.pow(e.sub(On(1))))),i=Eo(n.shape,a);return i.length>0&&(o=o.sum(i)),o.reshape(n.shape)},b:function(){var e=n.greater(0),i=n.log().where(e,Xn(n)),s=t.mul(o.mul(i)),u=Eo(r.shape,a);return u.length>0&&(s=s.sum(u)),s.reshape(r.shape)}}}),"Pow",{},i,[!0])}}),bc=An({powStrict_:function(t,e){return E(t.shape,e.shape,"Error in powStrict: "),t.pow(e)}}),wc=An({squaredDifferenceStrict_:function(t,e){var n=mn(t,"a","squaredDifferenceStrict"),r=mn(e,"b","squaredDifferenceStrict");return E(n.shape,r.shape,"Error in squaredDifferenceStrict: "),n.squaredDifference(r)}}),Cc=An({sub_:function(t,e){var n,r=mn(t,"a","sub"),o=mn(e,"b","sub");n=Nt(r,o),r=n[0],o=n[1];var a=Ro(r.shape,o.shape);return Lt.runKernelFunc((function(t){return t.subtract(r,o)}),{a:r,b:o},(function(t){return {a:function(){var e=t,n=Eo(r.shape,a);return n.length>0&&(e=e.sum(n)),e.reshape(r.shape)},b:function(){var e=t,n=Eo(o.shape,a);return n.length>0&&(e=e.sum(n)),e.neg().reshape(o.shape)}}}),"Sub")}}),Ec=An({subStrict_:function(t,e){var n=mn(t,"a","subStrict"),r=mn(e,"b","subStrict");return E(n.shape,r.shape,"Error in subStrict: "),n.sub(r)}});var Rc=An({equal_:function(t,e){var n,r=mn(t,"a","equal"),o=mn(e,"b","equal");return n=Nt(r,o),r=n[0],o=n[1],Ro(r.shape,o.shape),Lt.runKernelFunc((function(t){return t.equal(r,o)}),{$a:r,$b:o})}}),Ic=An({equalStrict_:function(t,e){var n=mn(t,"a","equalStrict"),r=mn(e,"b","equalStrict");return E(n.shape,r.shape,"Error in equalStrict: "),n.equal(r)}}),kc=An({greater_:function(t,e){var n,r=mn(t,"a","greater"),o=mn(e,"b","greater");return n=Nt(r,o),r=n[0],o=n[1],Ro(r.shape,o.shape),Lt.runKernelFunc((function(t){return t.greater(r,o)}),{a:r,b:o},null,"Greater")}}),Sc=An({greaterEqual_:function(t,e){var n,r=mn(t,"a","greaterEqual"),o=mn(e,"b","greaterEqual");return n=Nt(r,o),r=n[0],o=n[1],Ro(r.shape,o.shape),Lt.runKernelFunc((function(t,e){var n=t.greaterEqual(r,o);return e([r,o]),n}),{a:r,b:o},(function(t,e){var n=e[0],r=e[1];return {a:function(){return Xn(n)},b:function(){return Xn(r)}}}),"GreaterEqual")}}),Ac=An({greaterEqualStrict_:function(t,e){var n=mn(t,"a","greaterEqualStrict"),r=mn(e,"b","greaterEqualStrict");return E(n.shape,r.shape,"Error in greaterEqualStrict: "),n.greaterEqual(r)}}),Dc=An({greaterStrict_:function(t,e){var n=mn(t,"a","greaterStrict"),r=mn(e,"b","greaterStrict");return E(n.shape,r.shape,"Error in greaterStrict: "),n.greater(r)}}),Tc=An({less_:function(t,e){var n,r=mn(t,"a","less"),o=mn(e,"b","less");return n=Nt(r,o),r=n[0],o=n[1],Ro(r.shape,o.shape),Lt.runKernelFunc((function(t){return t.less(r,o)}),{a:r,b:o},null,"Less")}}),Nc=An({lessEqual_:function(t,e){var n,r=mn(t,"a","lessEqual"),o=mn(e,"b","lessEqual");return n=Nt(r,o),r=n[0],o=n[1],Ro(r.shape,o.shape),Lt.runKernelFunc((function(t,e){var n=t.lessEqual(r,o);return e([r,o]),n}),{a:r,b:o},null,"LessEqual")}}),Fc=An({lessEqualStrict_:function(t,e){var n=mn(t,"a","lessEqualStrict"),r=mn(e,"b","lessEqualStrict");return E(n.shape,r.shape,"Error in lessEqualStrict: "),n.lessEqual(r)}}),_c=An({lessStrict_:function(t,e){var n=mn(t,"a","lessStrict"),r=mn(e,"b","lessStrict");return E(n.shape,r.shape,"Error in lessStrict: "),n.less(r)}}),Oc=An({notEqual_:function(t,e){var n,r=mn(t,"a","notEqual"),o=mn(e,"b","notEqual");return n=Nt(r,o),r=n[0],o=n[1],Ro(r.shape,o.shape),Lt.runKernelFunc((function(t){return t.notEqual(r,o)}),{a:r,b:o},null,"NotEqual")}}),Mc=An({notEqualStrict_:function(t,e){var n=mn(t,"a","notEqualStrict"),r=mn(e,"b","notEqualStrict");return E(n.shape,r.shape,"Error in notEqualStrict: "),n.notEqual(r)}});function Bc(t,e){for(var n=[],r=t;r0,(function(){return "mask cannot be scalar"})),E(u.slice(i,i+s),a.shape,"mask's shape must match the first K dimensions of tensor's shape,"),c=1,l=i;l=2&&i.rank>=2&&a.rank===i.rank,(function(){return "Error in matMul: inputs must have the same rank of at least 2, got ranks "+a.rank+" and "+i.rank+"."})),C(S(h,f),(function(){return "Error in matMul: outer dimensions ("+h+") and ("+f+") of Tensors with shapes "+a.shape+" and "+i.shape+" must match."})),C(s===u,(function(){return "Error in matMul: inner shapes ("+s+") and ("+u+") of Tensors with shapes "+a.shape+" and "+i.shape+" and transposeA="+n+" and transposeB="+r+" must match."}));var v=a.shape.slice(0,-2).concat([c,l]),m=n?a.as3D(d,s,c):a.as3D(d,c,s),g=r?i.as3D(p,l,u):i.as3D(p,u,l),y={transposeA:n,transposeB:r};return Lt.runKernelFunc((function(t,e){var o=t.batchMatMul(m,g,n,r);return e([m,g]),o}),{a:m,b:g},(function(t,e){var o=e,a=o[0],i=o[1];return n||r?!n&&r?{a:function(){return t.matMul(i,!1,!1)},b:function(){return t.matMul(a,!0,!1)}}:n&&!r?{a:function(){return i.matMul(t,!1,!0)},b:function(){return a.matMul(t,!1,!1)}}:{a:function(){return i.matMul(t,!0,!0)},b:function(){return t.matMul(a,!0,!0)}}:{a:function(){return t.matMul(i,!1,!0)},b:function(){return a.matMul(t,!0,!1)}}}),"BatchMatMul",y).reshape(v)}}),nl=An({dot_:function(t,e){var n=mn(t,"t1","dot"),r=mn(e,"t2","dot");C(!(1!==n.rank&&2!==n.rank||1!==r.rank&&2!==r.rank),(function(){return "Error in dot: inputs must all be rank 1 or 2, but got ranks "+n.rank+" and "+r.rank+"."}));var o=1===n.rank?n.size:n.shape[1],a=1===r.rank?r.size:r.shape[0];return C(o===a,(function(){return "Error in dot: inner dimensions of inputs must match, but got "+o+" and "+a+"."})),1===n.rank&&1===r.rank?n.as2D(1,-1).matMul(r.as2D(-1,1)).asScalar():1===n.rank&&2===r.rank?n.as2D(1,-1).matMul(r.as2D(r.shape[0],r.shape[1])).as1D():2===n.rank&&1===r.rank?n.matMul(r.as2D(-1,1)).as1D():n.matMul(r.as2D(r.shape[0],r.shape[1]))}}),rl=An({outerProduct_:function(t,e){var n=mn(t,"v1","outerProduct"),r=mn(e,"v2","outerProduct");return C(1===n.rank&&1===r.rank,(function(){return "Error in outerProduct: inputs must be rank 1, but got ranks "+n.rank+" and "+r.rank+"."})),n.as2D(-1,1).matMul(r.as2D(1,-1))}});var ol=An({reverse_:function(t,e){var n=mn(t,"x","reverse");if(0===n.rank)return n.clone();var r=O(e,n.shape);return Lt.runKernelFunc((function(t){return t.reverse(n,r)}),{$x:n},(function(t){return {$x:function(){return t.reverse(r)}}})).reshapeAs(n)}}),al=An({reverse1d_:function(t){var e=mn(t,"x","reverse");return C(1===e.rank,(function(){return "Error in reverse1D: x must be rank 1 but got rank "+e.rank+"."})),ol(e,0)}}),il=An({reverse2d_:function(t,e){var n=mn(t,"x","reverse");return C(2===n.rank,(function(){return "Error in reverse2D: x must be rank 2 but got rank "+n.rank+"."})),ol(n,e)}}),sl=An({reverse3d_:function(t,e){var n=mn(t,"x","reverse");return C(3===n.rank,(function(){return "Error in reverse3D: x must be rank 3 but got rank "+n.rank+"."})),ol(n,e)}}),ul=An({reverse4d_:function(t,e){var n=mn(t,"x","reverse");return C(4===n.rank,(function(){return "Error in reverse4D: x must be rank 4 but got rank "+n.rank+"."})),ol(n,e)}});function cl(t,e,n,r,o,a){var i=mn(t,"x","maxPool"),s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),null==r&&(r=[1,1]),C(4===s.rank,(function(){return "Error in maxPool: input must be rank 4 but got rank "+s.rank+"."})),C(Mo(n,r),(function(){return "Error in maxPool: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+r+"'"})),null!=a&&C(A(o),(function(){return "Error in maxPool: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+o+"."}));var c=Io(s.shape,e,n,r,o,a);if(1===c.filterWidth&&1===c.filterHeight&&S(c.inShape,c.outShape))return i.clone();var l=[s],h=Lt.runKernelFunc((function(t,e){var n=t.maxPool(s,c);return e([s,n]),n}),{x:s},(function(t,a){var i=a[0],s=a[1];return {x:function(){return function(t,e,n,r,o,a,i,s){var u=mn(t,"dy","maxPoolBackprop"),c=mn(e,"input","maxPoolBackprop"),l=mn(n,"output","maxPoolBackprop");C(c.rank===u.rank,(function(){return "Rank of input ("+c.rank+") does not match rank of dy ("+u.rank+")"})),null==a&&(a=[1,1]);C(Mo(o,a),(function(){return "Error in maxPoolBackProp: Either strides or dilations must be 1. Got strides "+o+" and dilations '"+a+"'"})),C(4===u.rank,(function(){return "Error in maxPoolBackprop: dy must be rank 4 but got rank "+u.rank+"."})),C(4===c.rank,(function(){return "Error in maxPoolBackprop: input must be rank 4 but got rank "+c.rank+"."})),null!=s&&C(A(i),(function(){return "Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode "+s+" but got pad "+i+"."}));var h=Io(c.shape,r,o,a,i,s);return Lt.runKernelFunc((function(t){return t.maxPoolBackprop(u,c,l,h)}),{$dy:u,$input:c})}(t,i,s,e,n,r,o)}}}),"MaxPool",c,l);return u?h.as3D(h.shape[1],h.shape[2],h.shape[3]):h}function ll(t,e,n,r,o,a){var i=mn(t,"x","avgPool","float32");null==r&&(r=[1,1]),C(Mo(n,r),(function(){return "Error in avgPool: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+r+"'"}));var s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),C(4===s.rank,(function(){return "Error in avgPool: x must be rank 4 but got rank "+s.rank+"."})),null!=a&&C(A(o),(function(){return "Error in avgPool: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+o+"."}));var c=Io(s.shape,e,n,r,o,a);if(1===c.filterWidth&&1===c.filterHeight&&S(c.inShape,c.outShape))return i.clone();var l=Lt.runKernelFunc((function(t){return t.avgPool(s,c)}),{x:s},(function(t){return {x:function(){return function(t,e,n,r,o,a){var i=mn(t,"dy","avgPoolBackprop"),s=mn(e,"input","avgPoolBackprop");C(s.rank===i.rank,(function(){return "Rank of input ("+s.rank+") does not match rank of dy ("+i.rank+")"})),null==o&&(o=[1,1]);C(Mo(r,o),(function(){return "Error in avgPoolBackprop: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+o+"'"}));var u=s,c=i,l=!1;3===s.rank&&(l=!0,u=s.as4D(1,s.shape[0],s.shape[1],s.shape[2]),c=i.as4D(1,i.shape[0],i.shape[1],i.shape[2]));C(4===c.rank,(function(){return "Error in avgPoolBackprop: dy must be rank 4 but got rank "+c.rank+"."})),C(4===u.rank,(function(){return "Error in avgPoolBackprop: input must be rank 4 but got rank "+u.rank+"."}));var h=Io(u.shape,n,r,o,a),f=Lt.runKernelFunc((function(t){return t.avgPoolBackprop(c,u,h)}),{dy4D:c,input4D:u});if(l)return f.as3D(f.shape[1],f.shape[2],f.shape[3]);return f}(t,s,e,n,r,o)}}}),"AvgPool",c);return l=l.cast(i.dtype),u?l.as3D(l.shape[1],l.shape[2],l.shape[3]):l}var hl=An({maxPool_:function(t,e,n,r,o){return cl(t,e,n,1,r,o)}}),fl=An({avgPool_:function(t,e,n,r,o){return ll(t,e,n,1,r,o)}}),dl=An({pool_:function(t,e,n,r,o,a){null==o&&(o=[1,1]),null==a&&(a=1),0===r&&(r="valid");var i=mn(t,"x","maxPool"),s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),C(Mo(a,o),(function(){return "Error in pool: Either strides or dilations must be 1. Got strides "+a+" and dilations '"+o+"'"}));var c,l=Io(s.shape,e,a,o,r),h=[l.dilationHeight,l.dilationWidth];c="same"===r?function(t,e){var n=t.map((function(t,n){return t+(t-1)*(e[n]-1)})).map((function(t){return t-1})),r=n.map((function(t){return Math.floor(t/2)})),o=n.map((function(t,e){return t-r[e]}));return n.map((function(t,e){return [r[e],o[e]]}))}([l.filterHeight,l.filterWidth],h):[[0,0],[0,0]];var f=1===h[0]&&1===h[1],d=function(t,e,n){var r=n.map((function(t){return t[0]})),o=n.map((function(t){return t[1]})),a=t.concat(r,o),i=e.map((function(t,e){return (t-a[e]%t)%t})),s=o.map((function(t,e){return t+i[e]})),u=e.map((function(t,e){return [r[e],s[e]]})),c=e.map((function(t,e){return [0,i[e]]}));return [u,c]}([l.inHeight,l.inWidth],h,c),p=d[0],v=d[1],m=f?r:"valid",g=f?s:Mr(s,h,p),y=("avg"===n?function(){return ll(g,e,a,1,m)}:function(){return cl(g,e,a,1,m)})(),x=f?y:vr(y,h,v);return u?x.as3D(x.shape[1],x.shape[2],x.shape[3]):x}}),pl=An({maxPool3d_:function(t,e,n,r,o,a,i){void 0===a&&(a="NDHWC");var s=mn(t,"x","maxPool3d"),u=s,c=!1;4===s.rank&&(c=!0,u=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3])),null==i&&(i=[1,1,1]),C(5===u.rank,(function(){return "Error in maxPool3d: x must be rank 5 but got rank "+u.rank+"."})),C("NDHWC"===a,(function(){return "Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of "+a})),C(Mo(n,i),(function(){return "Error in maxPool3d: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+i+"'"})),null!=o&&C(A(r),(function(){return "Error in maxPool3d: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+r+"."}));var l=ko(u.shape,e,n,i,r,o,a),h=Lt.runKernelFunc((function(t,e){var n=t.maxPool3d(u,l);return e([u,n]),n}),{x:u},(function(t,a){var s=a[0],u=a[1];return {x:function(){return function(t,e,n,r,o,a,i,s){var u=mn(t,"dy","maxPool3dBackprop"),c=mn(e,"input","maxPool3dBackprop"),l=mn(n,"output","maxPool3dBackprop"),h=u,f=c,d=l,p=!1;4===c.rank&&(p=!0,h=u.as5D(1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]),f=c.as5D(1,c.shape[0],c.shape[1],c.shape[2],c.shape[3]),d=l.as5D(1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]));C(5===h.rank,(function(){return "Error in maxPool3dBackprop: dy must be rank 5 but got rank "+h.rank+"."})),C(5===f.rank,(function(){return "Error in maxPool3dBackprop: input must be rank 5 but got rank "+f.rank+"."})),C(5===d.rank,(function(){return "Error in maxPool3dBackprop: output must be rank 5 but got rank "+d.rank+"."})),null==a&&(a=[1,1,1]);C(Mo(o,a),(function(){return "Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides "+o+" and dilations '"+a+"'"})),null!=s&&C(A(i),(function(){return "Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode "+s+" but got pad "+i+"."}));var v=ko(f.shape,r,o,a,i,s),m=Lt.runKernelFunc((function(t){return t.maxPool3dBackprop(h,f,d,v)}),{dy5D:h,input5D:f});if(p)return m.as4D(m.shape[1],m.shape[2],m.shape[3],m.shape[4]);return m}(t,s,u,e,n,i,r,o)}}}));return c?h.as4D(h.shape[1],h.shape[2],h.shape[3],h.shape[4]):h}}),vl=An({avgPool3d_:function(t,e,n,r,o,a,i){void 0===a&&(a="NDHWC");var s=mn(t,"x","avgPool3d","float32"),u=s,c=!1;4===s.rank&&(c=!0,u=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3])),null==i&&(i=[1,1,1]),C(5===u.rank,(function(){return "Error in avgPool3d: x must be rank 5 but got rank "+u.rank+"."})),C("NDHWC"===a,(function(){return "Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of "+a})),C(Mo(n,i),(function(){return "Error in avgPool3d: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+i+"'"})),null!=o&&C(A(r),(function(){return "Error in avgPool3d: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+r+"."}));var l=ko(u.shape,e,n,i,r,o,a),h=Lt.runKernelFunc((function(t){return t.avgPool3d(u,l)}),{x:u},(function(t){return {x:function(){return function(t,e,n,r,o,a,i){var s=mn(t,"dy","avgPool3dBackprop"),u=mn(e,"input","avgPool3dBackprop"),c=s,l=u,h=!1;4===u.rank&&(h=!0,c=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3]),l=u.as5D(1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]));C(5===c.rank,(function(){return "Error in avgPool3dBackprop: dy must be rank 5 but got rank "+c.rank+"."})),C(5===l.rank,(function(){return "Error in avgPool3dBackprop: input must be rank 5 but got rank "+l.rank+"."})),null==o&&(o=[1,1,1]);C(Mo(r,o),(function(){return "Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+o+"'"})),null!=i&&C(A(a),(function(){return "Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+a+"."}));var f=ko(l.shape,n,r,o,a,i),d=Lt.runKernelFunc((function(t){return t.avgPool3dBackprop(c,l,f)}),{dy5D:c,input5D:l});if(h)return d.as4D(d.shape[1],d.shape[2],d.shape[3],d.shape[4]);return d}(t,u,e,n,i,r,o)}}}));return h=h.cast(u.dtype),c?h.as4D(h.shape[1],h.shape[2],h.shape[3],h.shape[4]):h}});var ml=An({slice_:function(t,e,n){var r,o,a=mn(t,"x","slice");if(0===a.rank)throw new Error("Slicing scalar is not possible");(r="number"==typeof e?[e].concat(new Array(a.rank-1).fill(0)):e.length=0?t:(C(-1===t,(function(){return "Negative size values should be exactly -1 but got "+t+" for the slice() size at index "+e+"."})),a.shape[e]-r[e])})),eo(a,r,o);var i=a.shape,s={begin:r,size:o};return Lt.runKernelFunc((function(t){return t.slice(a,r,o)}),{x:a},(function(t){for(var e=[],n=0;n0&&(e=e.sum(a)),e.reshape(r.shape)}}}),"Prelu")}}),Bl=An({relu_:function(t){var e=mn(t,"x","relu");return "bool"===e.dtype?e.toInt():Lt.runKernelFunc((function(t,n){var r=t.relu(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return {x:function(){return t.mulStrict(n.step().toFloat())}}}),"Relu")}}),Pl=An({relu6_:function(t){var e=mn(t,"x","relu6");return "bool"===e.dtype?e.toInt():Lt.runKernelFunc((function(t,n){var r=t.relu6(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0],r=n.lessEqual(6).mul(n.step());return {x:function(){return t.mulStrict(r.toFloat())}}}),"Relu6")}}),Ll=An({selu_:function(t){var e=mn(t,"x","selu");return Lt.runKernelFunc((function(t,n){var r=t.selu(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return {$x:function(){var e=n.greater(On(0)),r=On(bs),o=On(ws),a=t.mul(o),i=t.mul(r).mul(n.toFloat().exp());return ec(e,a,i)}}}))}});var Wl=An({transpose_:function(t,e){var n=mn(t,"x","transpose");if(null==e&&(e=n.shape.map((function(t,e){return e})).reverse()),C(n.rank===e.length,(function(){return "Error in transpose: rank of input "+n.rank+" must match length of perm "+e+"."})),e.forEach((function(t){C(t>=0&&to)throw new Error("'k' passed to topk() must be <= the last dimension ("+o+") but got "+e);var a=Lt.runKernelFunc((function(t){return t.topk(r,e,n)}),{$x:r});return {values:a[0],indices:a[1]}}});var jl=An({scatterND_:function(t,e,n){var r=mn(t,"indices","scatterND","int32"),o=mn(e,"updates","scatterND");return Jr(o,r,n),Lt.runKernelFunc((function(t){return t.scatterND(r,o,n)}),{indices:r,updates:o},null,"ScatterNd",{shape:n})}});var Xl=An({fft_:function(t){C("complex64"===t.dtype,(function(){return "The dtype for tf.spectral.fft() must be complex64 but got "+t.dtype+"."}));var e=t.shape[t.shape.length-1],n=t.size/e,r=t.as2D(n,e);return Lt.runKernelFunc((function(t){return t.fft(r)}),{input:t}).reshape(t.shape)}}),Yl=An({ifft_:function(t){C("complex64"===t.dtype,(function(){return "The dtype for tf.spectral.ifft() must be complex64 but got "+t.dtype+"."}));var e=t.shape[t.shape.length-1],n=t.size/e,r=t.as2D(n,e);return Lt.runKernelFunc((function(t){return t.ifft(r)}),{input:t}).reshape(t.shape)}}),$l=An({rfft_:function(t,e){C("float32"===t.dtype,(function(){return "The dtype for rfft() must be real value but got "+t.dtype}));var n,r=t.shape[t.shape.length-1],o=t.size/r;if(null!=e&&er){var s=t.shape.map((function(t){return t}));s[t.shape.length-1]=e-r,n=t.concat(Gn(s),t.shape.length-1),r=e;}else n=t;var u=n.zerosLike(),c=Dn(n,u).as2D(o,r),l=Xl(c),h=Math.floor(r/2)+1,f=Tn(l),d=Nn(l),p=f.split([h,r-h],f.shape.length-1),v=d.split([h,r-h],d.shape.length-1),m=n.shape.slice();return m[n.shape.length-1]=h,Dn(p[0],v[0]).reshape(m)}}),Ql=An({irfft_:function(t){var e=t.shape[t.shape.length-1],n=t.size/e;if(e<=2){var r=t.as2D(n,e),o=Yl(r);return Tn(o)}var a=[n,2*(e-1)],i=Tn(t).as2D(n,e),s=Nn(t).as2D(n,e),u=i.slice([0,1],[n,e-2]).reverse(1),c=s.slice([0,1],[n,e-2]).reverse(1).mul(On(-1)),l=i.concat(u,1),h=s.concat(c,1);return r=Dn(l,h).as2D(a[0],a[1]),o=Yl(r),Tn(o)}}),Jl=Object.freeze({fft:Xl,ifft:Yl,rfft:$l,irfft:Ql});var Zl=An({sparseToDense_:function(t,e,n,r){void 0===r&&(r=0);var o=mn(t,"sparseIndices","sparseToDense","int32"),a=mn(e,"sparseValues","sparseToDense"),i=mn(r,"defaultValue","sparseToDense",a.dtype);return function(t,e,n,r){if("int32"!==t.dtype)throw new Error("tf.sparseToDense() expects the indices to be int32 type, but the dtype was "+t.dtype+".");if(t.rank>2)throw new Error("sparseIndices should be a scalar, vector, or matrix, but got shape "+t.shape+".");var o=t.rank>0?t.shape[0]:1,a=t.rank>1?t.shape[1]:1;if(n.length!==a)throw new Error("outputShape has incorrect number of elements:, "+n.length+", should be: "+a+".");var i=e.size;if(0!==e.rank&&(1!==e.rank||i!==o))throw new Error("sparseValues has incorrect shape "+e.shape+", should be [] or ["+o+"]");if(e.dtype!==r.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}(o,a,n,i),Lt.runKernelFunc((function(t){return t.sparseToDense(o,a,n,i)}),{$sparseIndices:o,$sparseValues:a,$defaultValue:i})}});var th=An({gatherND_:function(t,e){var n=mn(e,"indices","gatherND","int32"),r=mn(t,"x","gatherND");return Lt.runKernelFunc((function(t){return t.gatherND(r,n)}),{x:r,indices:n},null,"GatherNd")}});var eh=An({diag_:function(t){var e=mn(t,"x","diag").flatten(),n=t.shape.concat(t.shape);return Lt.runKernelFunc((function(t){return t.diag(e)}),{$x:e}).reshape(n)}});var nh=An({dropout_:function(t,e,n,r){var o=mn(t,"x","dropout");if(C("float32"===o.dtype,(function(){return "x has to be a floating point tensor since it's going to be scaled, but got a "+o.dtype+" tensor instead."})),C(e>=0&&e<1,(function(){return "rate must be a float in the range [0, 1), but got "+e+"."})),0===e)return t instanceof wt?o.clone():o;var a=function(t,e){if(null==e)return t.shape.slice();if(S(t.shape,e))return e;if(t.shape.length===e.length){for(var n=[],r=0;r1,(function(){return "inTopK() expects the predictions to be of rank 2 or higher, but got "+n.rank})),C(n.rank-1===a.rank,(function(){return "predictions rank should be 1 larger than targets rank, but got predictions rank "+n.rank+" and targets rank "+a.rank})),E(n.shape.slice(0,n.shape.length-1),a.shape,"predictions's shape should be align with the targets' shape, except the last dimension."),i=n.shape[n.shape.length-1],C(o>0&&o<=i,(function(){return "'k' passed to inTopK() must be > 0 && <= the predictions last dimension ("+i+"), but got "+o})),[4,n.data()];case 1:return s=r.sent(),[4,a.data()];case 2:for(u=r.sent(),c=[s.length/i,i],h=c[1],f=B("bool",l=c[0]),d=0;d1?s.div(On(i)):s}if(n===ch.SUM_BY_NONZERO_WEIGHTS){if(null==o)return a.sum().div(On(r.size));var u=o.mul(zn(r.shape)).notEqual(On(0)).sum().toFloat();return a.sum().div(u)}throw Error("Unknown reduction: "+n)}}),dh=An({cosineDistance_:function(t,e,n,r,o){void 0===o&&(o=ch.SUM_BY_NONZERO_WEIGHTS);var a=mn(t,"labels","cosineDistance"),i=mn(e,"predictions","cosineDistance"),s=null;null!=r&&(s=mn(r,"weights","cosineDistance")),E(a.shape,i.shape,"Error in cosineDistance: ");var u=On(1).sub(a.mul(i).sum(n,!0));return fh(u,s,o)}}),ph=An({hingeLoss_:function(t,e,n,r){void 0===r&&(r=ch.SUM_BY_NONZERO_WEIGHTS);var o=mn(t,"labels","hingeLoss"),a=mn(e,"predictions","hingeLoss"),i=null;null!=n&&(i=mn(n,"weights","hingeLoss")),E(o.shape,a.shape,"Error in hingeLoss: ");var s=On(1);o=On(2).mul(o).sub(s);var u=s.sub(o.mul(a)).relu();return fh(u,i,r)}}),vh=An({huberLoss_:function(t,e,n,r,o){void 0===r&&(r=1),void 0===o&&(o=ch.SUM_BY_NONZERO_WEIGHTS);var a=mn(t,"labels","huberLoss"),i=mn(e,"predictions","huberLoss"),s=null;null!=n&&(s=mn(n,"weights","huberLoss")),E(a.shape,i.shape,"Error in huberLoss: ");var u=On(r),c=i.sub(a).abs(),l=dc(c,u),h=c.sub(l),f=On(.5).mul(l.square()).add(u.mul(h));return fh(f,s,o)}}),mh=An({logLoss_:function(t,e,n,r,o){void 0===r&&(r=1e-7),void 0===o&&(o=ch.SUM_BY_NONZERO_WEIGHTS);var a=mn(t,"labels","logLoss"),i=mn(e,"predictions","logLoss"),s=null;null!=n&&(s=mn(n,"weights","logLoss")),E(a.shape,i.shape,"Error in logLoss: ");var u=On(1),c=On(r),l=a.mul(i.add(c).log()).neg().sub(u.sub(a).mul(u.sub(i).add(c).log()));return fh(l,s,o)}}),gh=An({meanSquaredError_:function(t,e,n,r){void 0===r&&(r=ch.SUM_BY_NONZERO_WEIGHTS);var o=mn(t,"labels","meanSquaredError"),a=mn(e,"predictions","meanSquaredError"),i=null;null!=n&&(i=mn(n,"weights","meanSquaredError")),E(o.shape,a.shape,"Error in meanSquaredError: ");var s=o.squaredDifference(a);return fh(s,i,r)}}),yh=An({sigmoidCrossEntropy_:function(t,e,n,r,o){void 0===r&&(r=0),void 0===o&&(o=ch.SUM_BY_NONZERO_WEIGHTS);var a=mn(t,"multiClassLabels","sigmoidCrossEntropy"),i=mn(e,"logits","sigmoidCrossEntropy"),s=null;if(null!=n&&(s=mn(n,"weights","sigmoidCrossEntropy")),E(a.shape,i.shape,"Error in sigmoidCrossEntropy: "),r>0){var u=On(r),c=On(1),l=On(.5);a=a.mul(c.sub(u)).add(l.mul(u));}var h=function(t,e){var n=mn(t,"labels","sigmoidCrossEntropyWithLogits"),r=mn(e,"logits","sigmoidCrossEntropyWithLogits");E(n.shape,r.shape,"Error in sigmoidCrossEntropyWithLogits: ");var o=r.relu(),a=r.mul(n),i=r.abs().neg().exp().log1p();return o.sub(a).add(i)}(a,i);return fh(h,s,o)}}),xh=An({softmaxCrossEntropy_:function(t,e,n,r,o){void 0===r&&(r=0),void 0===o&&(o=ch.SUM_BY_NONZERO_WEIGHTS);var a=mn(t,"onehotLabels","softmaxCrossEntropy"),i=mn(e,"logits","softmaxCrossEntropy"),s=null;if(null!=n&&(s=mn(n,"weights","softmaxCrossEntropy")),E(a.shape,i.shape,"Error in softmaxCrossEntropy: "),r>0){var u=On(r),c=On(1),l=On(a.shape[1]);a=a.mul(c.sub(u)).add(u.div(l));}var h=function(t,e,n){if(void 0===n&&(n=-1),-1===n&&(n=e.rank-1),n!==e.rank-1)throw Error("Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank "+e.rank+" and dim was "+n);return vo((function(t,e,r){var o=e.logSumExp([n],!0),a=e.toFloat().sub(o);r([t,a]);return {value:a.mul(t).neg().sum([n]),gradFunc:function(t,e){var r=e[0],o=e[1],a=wn(t.shape,[n]);return [t.reshape(a).mul(r.toFloat().sub(o.exp())),t.reshape(a).mul(o.exp().sub(r.toFloat()))]}}}))(t,e)}(a,i);return fh(h,s,o)}}),bh=Object.freeze({get Reduction(){return ch},absoluteDifference:hh,computeWeightedLoss:fh,cosineDistance:dh,hingeLoss:ph,huberLoss:vh,logLoss:mh,meanSquaredError:gh,sigmoidCrossEntropy:yh,softmaxCrossEntropy:xh});function wh(t,e){return void 0===e&&(e=!1),Lt.tidy((function(){if(2!==t.shape.length)throw new Error("qr2d() requires a 2D Tensor, but got a "+t.shape.length+"D Tensor.");for(var n=t.shape[0],r=t.shape[1],o=Cr(n),a=t.clone(),i=Bn([[1]],[1,1]),s=i.clone(),u=n>=r?r:n,c=function(t){var e,u=a,c=s,l=o;e=Lt.tidy((function(){var e=a.slice([t,t],[n-t,1]),u=e.norm(),c=a.slice([t,t],[1,1]),l=Bn([[-1]]).where(c.greater(0),Bn([[1]])),h=c.sub(l.mul(u)),f=e.div(h);s=1===f.shape[0]?i.clone():i.concat(f.slice([1,0],[f.shape[0]-1,f.shape[1]]),0);var d=l.matMul(h).div(u).neg(),p=a.slice([t,0],[n-t,r]),v=d.mul(s);if(0===t)a=p.sub(v.matMul(s.transpose().matMul(p)));else {var m=p.sub(v.matMul(s.transpose().matMul(p)));a=a.slice([0,0],[t,r]).concat(m,0);}var g=o.slice([0,t],[n,o.shape[1]-t]);if(0===t)o=g.sub(g.matMul(s).matMul(v.transpose()));else {var y=g.sub(g.matMul(s).matMul(v.transpose()));o=o.slice([0,0],[n,t]).concat(y,1);}return [s,a,o]})),s=e[0],a=e[1],o=e[2],tn([u,c,l]);},l=0;lr&&(o=o.slice([0,0],[n,r]),a=a.slice([0,0],[r,r])),[o,a]}))}var Ch=An({bandPart_:function(t,e,n){if(e%1!=0)throw new Error("bandPart(): numLower must be an integer, got "+e+".");if(n%1!=0)throw new Error("bandPart(): numUpper must be an integer, got "+n+".");var r=mn(t,"a","bandPart");if(r.rank<2)throw new Error("bandPart(): Rank must be at least 2, got "+r.rank+".");var o=r.shape,a=r.shape.slice(-2),i=a[0],s=a[1];if(!(e<=i))throw new Error("bandPart(): numLower ("+e+") must not be greater than the number of rows ("+i+").");if(!(n<=s))throw new Error("bandPart(): numUpper ("+n+") must not be greater than the number of columns ("+s+").");e<0&&(e=i),n<0&&(n=s);var u=Kn(0,i,1,"int32").reshape([-1,1]),c=Kn(0,s,1,"int32"),l=Cc(u,c),h=Qu(l.lessEqual(On(+e,"int32")),l.greaterEqual(On(-n,"int32"))),f=Gn([i,s],r.dtype);return Pr(Ur(r.reshape([-1,i,s])).map((function(t){return ec(h,t,f)}))).reshape(o)}}),Eh=An({gramSchmidt_:function(t){var e;if(Array.isArray(t)){e=!1,C(null!=t&&t.length>0,(function(){return "Gram-Schmidt process: input must not be null, undefined, or empty"}));for(var n=t[0].shape[0],r=function(e){C(t[e].shape[0]===n,(function(){return "Gram-Schmidt: Non-unique lengths found in the input vectors: ("+t[e].shape[0]+" vs. "+n+")"}));},o=1;o0)for(var n=0;n= 2, but got rank "+t.rank);if(2===t.rank)return wh(t,e);var n=t.shape.slice(0,t.shape.length-2).reduce((function(t,e){return t*e})),r=Ur(t.reshape([n,t.shape[t.shape.length-2],t.shape[t.shape.length-1]]),0),o=[],a=[];return r.forEach((function(t){var n=wh(t,e),r=n[0],i=n[1];o.push(r),a.push(i);})),[Pr(o,0).reshape(t.shape),Pr(a,0).reshape(t.shape)]}}),Ih=Object.freeze({bandPart:Ch,gramSchmidt:Eh,qr:Rh});function kh(t,e,n,r,o,a){null==r&&(r=.5),null==o&&(o=Number.NEGATIVE_INFINITY),null==a&&(a=0);var i=t.shape[0];return n=Math.min(n,i),C(0<=r&&r<=1,(function(){return "iouThreshold must be in [0, 1], but was '"+r+"'"})),C(2===t.rank,(function(){return "boxes must be a 2D tensor, but was of rank '"+t.rank+"'"})),C(4===t.shape[1],(function(){return "boxes must have 4 columns, but 2nd dimension was "+t.shape[1]})),C(1===e.rank,(function(){return "scores must be a 1D tensor"})),C(e.shape[0]===i,(function(){return "scores has incompatible shape with boxes. Expected "+i+", but was "+e.shape[0]})),C(0<=a&&a<=1,(function(){return "softNmsSigma must be in [0, 1], but was '"+a+"'"})),{maxOutputSize:n,iouThreshold:r,scoreThreshold:o,softNmsSigma:a}}var Sh=An({resizeBilinear_:function(t,e,n){void 0===n&&(n=!1);var r=mn(t,"images","resizeBilinear");C(3===r.rank||4===r.rank,(function(){return "Error in resizeBilinear: x must be rank 3 or 4, but got rank "+r.rank+"."})),C(2===e.length,(function(){return "Error in resizeBilinear: new shape must 2D, but got shape "+e+"."}));var o=r,a=!1;3===r.rank&&(a=!0,o=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var i=e[0],s=e[1],u=Lt.runKernelFunc((function(t,e){return e([o]),t.resizeBilinear(o,i,s,n)}),{x:o},(function(t,e){return {x:function(){return Lt.runKernelFunc((function(r){return r.resizeBilinearBackprop(t,e[0],n)}),{})}}}),"ResizeBilinear",{alignCorners:n,newHeight:i,newWidth:s});return a?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),Ah=An({resizeNearestNeighbor_:function(t,e,n){void 0===n&&(n=!1);var r=mn(t,"images","resizeNearestNeighbor");C(3===r.rank||4===r.rank,(function(){return "Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank "+r.rank+"."})),C(2===e.length,(function(){return "Error in resizeNearestNeighbor: new shape must 2D, but got shape "+e+"."})),C("float32"===r.dtype||"int32"===r.dtype,(function(){return "`images` must have `int32` or `float32` as dtype"}));var o=r,a=!1;3===r.rank&&(a=!0,o=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var i=e[0],s=e[1],u=Lt.runKernelFunc((function(t,e){return e([o]),t.resizeNearestNeighbor(o,i,s,n)}),{batchImages:o},(function(t,e){return {batchImages:function(){return Lt.runKernelFunc((function(r){return r.resizeNearestNeighborBackprop(t,e[0],n)}),{})}}}));return a?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),Dh=An({nonMaxSuppression_:function(t,e,n,r,o){void 0===r&&(r=.5),void 0===o&&(o=Number.NEGATIVE_INFINITY);var a=mn(t,"boxes","nonMaxSuppression"),i=mn(e,"scores","nonMaxSuppression"),s=kh(a,i,n,r,o);n=s.maxOutputSize,r=s.iouThreshold,o=s.scoreThreshold;var u={maxOutputSize:n,iouThreshold:r,scoreThreshold:o};return Lt.runKernelFunc((function(t){return t.nonMaxSuppression(a,i,n,r,o)}),{boxes:a,scores:i},null,"NonMaxSuppressionV3",u)}}),Th=function(t,e,o,a,i){return void 0===a&&(a=.5),void 0===i&&(i=Number.NEGATIVE_INFINITY),n(this,void 0,void 0,(function(){var n,s,u,c,l,h,f;return r(this,(function(r){switch(r.label){case 0:return n=mn(t,"boxes","nonMaxSuppressionAsync"),s=mn(e,"scores","nonMaxSuppressionAsync"),u=kh(n,s,o,a,i),o=u.maxOutputSize,a=u.iouThreshold,i=u.scoreThreshold,[4,Promise.all([n.data(),s.data()])];case 1:return c=r.sent(),l=c[0],h=c[1],f=jo(l,h,o,a,i),n!==t&&n.dispose(),s!==e&&s.dispose(),[2,f]}}))}))},Nh=An({nonMaxSuppressionWithScore_:function(t,e,n,r,o,a){void 0===r&&(r=.5),void 0===o&&(o=Number.NEGATIVE_INFINITY),void 0===a&&(a=0);var i=mn(t,"boxes","nonMaxSuppression"),s=mn(e,"scores","nonMaxSuppression"),u=kh(i,s,n,r,o,a),c={maxOutputSize:n=u.maxOutputSize,iouThreshold:r=u.iouThreshold,scoreThreshold:o=u.scoreThreshold,softNmsSigma:a=u.softNmsSigma},l=Lt.runKernel("NonMaxSuppressionV5",{boxes:i,scores:s},c);return {selectedIndices:l[0],selectedScores:l[1]}}}),Fh=function(t,e,o,a,i,s){return void 0===a&&(a=.5),void 0===i&&(i=Number.NEGATIVE_INFINITY),void 0===s&&(s=0),n(this,void 0,void 0,(function(){var n,u,c,l,h,f,d;return r(this,(function(r){switch(r.label){case 0:return n=mn(t,"boxes","nonMaxSuppressionAsync"),u=mn(e,"scores","nonMaxSuppressionAsync"),c=kh(n,u,o,a,i,s),o=c.maxOutputSize,a=c.iouThreshold,i=c.scoreThreshold,s=c.softNmsSigma,[4,Promise.all([n.data(),u.data()])];case 1:return l=r.sent(),h=l[0],f=l[1],d=Xo(h,f,o,a,i,s),n!==t&&n.dispose(),u!==e&&u.dispose(),[2,d]}}))}))},_h=An({cropAndResize_:function(t,e,n,r,o,a){var i=mn(t,"image","cropAndResize"),s=mn(e,"boxes","cropAndResize","float32"),u=mn(n,"boxInd","cropAndResize","int32");o=o||"bilinear",a=a||0;var c=s.shape[0];return C(4===i.rank,(function(){return "Error in cropAndResize: image must be rank 4,but got rank "+i.rank+"."})),C(2===s.rank&&4===s.shape[1],(function(){return "Error in cropAndResize: boxes must be have size ["+c+",4] but had shape "+s.shape+"."})),C(1===u.rank&&u.shape[0]===c,(function(){return "Error in cropAndResize: boxInd must be have size ["+c+"] but had shape "+s.shape+"."})),C(2===r.length,(function(){return "Error in cropAndResize: cropSize must be of length 2, but got length "+r.length+"."})),C(r[0]>=1&&r[1]>=1,(function(){return "cropSize must be atleast [1,1], but was "+r})),C("bilinear"===o||"nearest"===o,(function(){return "method must be bilinear or nearest, but was "+o})),Lt.runKernelFunc((function(t,e){return t.cropAndResize(i,s,u,r,o,a)}),{images:i,boxes:s,boxInd:u},null,"CropAndResize",{method:o,extrapolationValue:a,cropSize:r})}}),Oh=Object.freeze({resizeBilinear:Sh,resizeNearestNeighbor:Ah,nonMaxSuppression:Dh,nonMaxSuppressionAsync:Th,nonMaxSuppressionWithScore:Nh,nonMaxSuppressionWithScoreAsync:Fh,cropAndResize:_h}),Mh=function(t,e){return !(t>0)||"linear"===e},Bh=function(t,e,n){if(null==n||"linear"===n)return t;if("relu"===n)return t.mul(e.step());throw new Error("Gradient for activation "+n+" has not been implemented yet.")},Ph=function(t,e){var n=e,r=Eo(t.shape,e.shape);return r.length>0&&(n=n.sum(r)),n.reshape(t.shape)},Lh=function(t,e,n){if("linear"===e)return t;if("relu"===e)return Bl(t);if("elu"===e)return _l(t);if("relu6"===e)return Pl(t);if("prelu"===e)return Ml(t,n);throw new Error("Unknown fused activation "+e+".")};var Wh=An({fusedMatMul_:function(t){var e,n=t.a,r=t.b,o=t.transposeA,a=void 0!==o&&o,i=t.transposeB,s=void 0!==i&&i,u=t.bias,c=t.activation,l=void 0===c?"linear":c,h=t.preluActivationWeights;if(!1===Mh(Lt.state.gradientDepth,l)){var f=el(n,r,a,s);return null!=u&&(f=rc(f,u)),Lh(f,l,h)}var d=mn(n,"a","fused matMul"),p=mn(r,"b","fused matMul");e=Nt(d,p),d=e[0],p=e[1];var v=a?d.shape[d.rank-2]:d.shape[d.rank-1],m=s?p.shape[p.rank-1]:p.shape[p.rank-2],g=a?d.shape[d.rank-1]:d.shape[d.rank-2],y=s?p.shape[p.rank-2]:p.shape[p.rank-1],x=d.shape.slice(0,-2),b=p.shape.slice(0,-2),w=k(x),E=k(b);C(d.rank>=2&&p.rank>=2&&d.rank===p.rank,(function(){return "Error in fused matMul: inputs must have the same rank of at least 2, got ranks "+d.rank+" and "+p.rank+"."})),C(S(x,b),(function(){return "Error in fused matMul: outer dimensions ("+x+") and ("+b+") of Tensors with shapes "+d.shape+" and "+p.shape+" must match."})),C(v===m,(function(){return "Error in fused matMul: inner shapes ("+v+") and ("+m+") of Tensors with shapes "+d.shape+" and "+p.shape+" and transposeA="+a+" and transposeB="+s+" must match."}));var R,I,A=d.shape.slice(0,-2).concat([g,y]),D=a?d.as3D(w,v,g):d.as3D(w,g,v),T=s?p.as3D(E,y,m):p.as3D(E,m,y);null!=u&&Ro(A,(R=Nt(R=mn(u,"bias","fused matMul"),d)[0]).shape),null!=h&&(I=mn(h,"prelu weights","fused matMul"));var N={a:D,b:T};null!=u&&(N.bias=R),null!=h&&(N.preluActivationWeights=I);var F=[D,T];return Lt.runKernelFunc((function(t,e){var n=t.fusedBatchMatMul({a:D,b:T,transposeA:a,transposeB:s,bias:R,activation:l,preluActivationWeights:I});return e([D,T,n]),n}),N,(function(t,e){var n=e[0],r=e[1],o=e[2],i=Bh(t,o,l),c={};return null!=u&&(c={bias:function(){return Ph(R,i)}}),a||s?!a&&s?Object.assign({a:function(){return i.matMul(r,!1,!1)},b:function(){return i.matMul(n,!0,!1)}},c):a&&!s?Object.assign({a:function(){return r.matMul(i,!1,!0)},b:function(){return n.matMul(i,!1,!1)}},c):Object.assign({a:function(){return r.matMul(i,!0,!0)},b:function(){return i.matMul(n,!0,!0)}},c):Object.assign({a:function(){return i.matMul(r,!1,!0)},b:function(){return n.matMul(i,!0,!1)}},c)}),"_FusedMatMul",{transposeA:a,transposeB:s,activation:l},F,[!0]).reshape(A)}}),Uh=An({fusedConv2d_:function(t){var e=t.x,n=t.filter,r=t.strides,o=t.pad,a=t.dataFormat,i=void 0===a?"NHWC":a,s=t.dilations,u=void 0===s?[1,1]:s,c=t.dimRoundingMode,l=t.bias,h=t.activation,f=void 0===h?"linear":h,d=t.preluActivationWeights;if(f=f||"linear",!1===Mh(Lt.state.gradientDepth,f)){var p=qc(e,n,r,o,i,u,c);return null!=l&&(p=rc(p,l)),Lh(p,f,d)}var v=mn(e,"x","conv2d"),m=mn(n,"filter","conv2d"),g=v,y=!1;3===v.rank&&(y=!0,g=v.as4D(1,v.shape[0],v.shape[1],v.shape[2])),C(4===g.rank,(function(){return "Error in fused conv2d: input must be rank 4, but got rank "+g.rank+"."})),C(4===m.rank,(function(){return "Error in fused conv2d: filter must be rank 4, but got rank "+m.rank+"."})),null!=c&&C(A(o),(function(){return "Error in fused conv2d: pad must be an integer when using, dimRoundingMode "+c+" but got pad "+o+"."})),C(g.shape[3]===m.shape[2],(function(){return "Error in conv2d: depth of input ("+g.shape[3]+") must match input depth for filter "+m.shape[2]+"."})),C(Mo(r,u),(function(){return "Error in conv2D: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+u+"'"})),C("NHWC"===i,(function(){return "Error in conv2d: got dataFormat of "+i+" but only NHWC is currently supported."}));var x,b,w=So(g.shape,m.shape,r,u,o,c);null!=l&&(x=Nt(x=mn(l,"bias","fused conv2d"),v)[0],Ro(w.outShape,x.shape)),null!=d&&(b=mn(d,"prelu weights","fused conv2d"));var E={x:g,filter:m};null!=l&&(E.bias=x),null!=d&&(E.preluActivationWeights=b);var R=[m,g],I=Lt.runKernelFunc((function(t,e){var n=t.fusedConv2d({input:g,filter:m,convInfo:w,bias:x,activation:f,preluActivationWeights:b});return e([m,g,n]),n}),E,(function(t,e){var n=e,a=n[0],i=n[1],s=n[2],c=Bh(t,s,f);C(Oo(u),(function(){return "Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+u+"'"}));var h={};return null!=l&&(h={bias:function(){return Ph(x,c)}}),Object.assign({x:function(){return Xc(i.shape,c,a,r,o)},filter:function(){return jc(i,c,a.shape,r,o)}},h)}),"FusedConv2D",{convInfo:w,activation:f},R,[!0]);return y?I.as3D(I.shape[1],I.shape[2],I.shape[3]):I}}),Vh=An({fusedDepthwiseConv2d_:function(t){var e=t.x,n=t.filter,r=t.strides,o=t.pad,a=t.dataFormat,i=void 0===a?"NHWC":a,s=t.dilations,u=void 0===s?[1,1]:s,c=t.dimRoundingMode,l=t.bias,h=t.activation,f=void 0===h?"linear":h,d=t.preluActivationWeights;if(!1===Mh(Lt.state.gradientDepth,f)){var p=Yc(e,n,r,o,i,u,c);return null!=l&&(p=rc(p,l)),Lh(p,f,d)}var v=mn(e,"x","depthwiseConv2d"),m=mn(n,"filter","depthwiseConv2d"),g=v,y=!1;3===v.rank&&(y=!0,g=v.as4D(1,v.shape[0],v.shape[1],v.shape[2])),C(4===g.rank,(function(){return "Error in fused depthwiseConv2d: input must be rank 4, but got rank "+g.rank+"."})),C(4===m.rank,(function(){return "Error in fused depthwiseConv2d: filter must be rank 4, but got rank "+m.rank+"."})),C(g.shape[3]===m.shape[2],(function(){return "Error in fused depthwiseConv2d: number of input channels ("+g.shape[3]+") must match the inChannels dimension in filter "+m.shape[2]+"."})),null==u&&(u=[1,1]),C(Mo(r,u),(function(){return "Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+u+"'"})),null!=c&&C(A(o),(function(){return "Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode "+c+" but got pad "+o+"."}));var x,b,w=So(g.shape,m.shape,r,u,o,c,!0);null!=l&&(x=Nt(x=mn(l,"bias","fused conv2d"),v)[0],Ro(w.outShape,x.shape)),null!=d&&(b=mn(d,"prelu weights","fused depthwiseConv2d"));var E={x:g,filter:m};null!=l&&(E.bias=x),null!=d&&(E.preluActivationWeights=b);var R=[m,g],I=Lt.runKernelFunc((function(t,e){var n=t.fusedDepthwiseConv2D({input:g,filter:m,convInfo:w,bias:x,activation:f,preluActivationWeights:b});return e([m,g,n]),n}),E,(function(t,e){C(Oo(u),(function(){return "Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '"+u+"'"}));var n=e[0],r=e[1],o=e[2],a=Bh(t,o,f),i={};return null!=l&&(i={bias:function(){return Ph(x,a)}}),Object.assign({x:function(){return $c(r.shape,a,n,w)},filter:function(){return Qc(r,a,n.shape,w)}},i)}),"FusedDepthwiseConv2D",{convInfo:w,activation:f},R,[!0]);return y?I.as3D(I.shape[1],I.shape[2],I.shape[3]):I}}),zh=Object.freeze({matMul:Wh,conv2d:Uh,depthwiseConv2d:Vh}),Gh=Object.freeze({image:Oh,linalg:Ih,losses:bh,spectral:Jl,fused:zh,signal:uh,square:tu,squaredDifference:nu,conv1d:Hc,conv2d:qc,conv3d:Kc,depthwiseConv2d:Yc,separableConv2d:Jc,conv2dTranspose:Zc,conv3dTranspose:tl,op:An,batchNormalization2d:Gu,batchNormalization3d:Hu,batchNormalization4d:qu,batchNormalization:Ku,batchNorm:ju,batchNorm2d:Xu,batchNorm3d:Yu,batchNorm4d:$u,booleanMaskAsync:Uc,complex:Dn,real:Tn,imag:Nn,concat:Yn,concat1d:$n,concat2d:Qn,concat3d:Jn,concat4d:Zn,split:tr,matMul:el,dot:nl,outerProduct:rl,reverse:ol,reverse1d:al,reverse2d:il,reverse3d:sl,reverse4d:ul,maxPool:hl,avgPool:fl,pool:dl,maxPool3d:pl,avgPool3d:vl,slice:ml,slice1d:gl,slice2d:yl,slice3d:xl,slice4d:bl,abs:ru,acos:ou,acosh:au,asin:iu,asinh:su,atan:uu,atanh:cu,ceil:lu,clipByValue:hu,cos:fu,cosh:du,erf:pu,exp:vu,expm1:mu,floor:gu,log:yu,log1p:xu,logSigmoid:bu,neg:wu,reciprocal:Cu,round:Eu,rsqrt:Ru,sigmoid:Iu,sign:ku,isNaN:Su,isInf:Au,isFinite:Du,sin:Tu,sinh:Nu,softplus:Fu,sqrt:_u,step:Ou,tan:Mu,tanh:Bu,all:Cl,any:El,argMax:Rl,argMin:Il,logSumExp:kl,max:Sl,mean:Al,min:Dl,moments:Tl,sum:Nl,prod:Fl,equal:Rc,equalStrict:Ic,greater:kc,greaterEqual:Sc,greaterEqualStrict:Ac,greaterStrict:Dc,less:Tc,lessEqual:Nc,lessEqualStrict:Fc,lessStrict:_c,notEqual:Oc,notEqualStrict:Mc,add:rc,addN:oc,addStrict:ac,atan2:ic,div:sc,divNoNan:uc,divStrict:cc,floorDiv:lc,maximum:hc,maximumStrict:fc,minimum:dc,minimumStrict:pc,mod:vc,modStrict:mc,mul:gc,mulStrict:yc,pow:xc,powStrict:bc,squaredDifferenceStrict:wc,sub:Cc,subStrict:Ec,elu:_l,leakyRelu:Ol,prelu:Ml,relu:Bl,relu6:Pl,selu:Ll,logicalAnd:Qu,logicalNot:Ju,logicalOr:Zu,logicalXor:tc,where:ec,whereAsync:nc,buffer:dr,print:pr,batchToSpaceND:vr,broadcastTo:mr,cast:gr,clone:yr,cumsum:xr,depthToSpace:br,expandDims:wr,eye:Cr,multinomial:Er,oneHot:Rr,pad:Ir,pad1d:kr,pad2d:Sr,pad3d:Ar,pad4d:Dr,rand:Tr,randomNormal:Nr,randomGamma:Fr,randomUniform:_r,reshape:Or,spaceToBatchND:Mr,squeeze:Br,stack:Pr,tile:Lr,truncatedNormal:Wr,unstack:Ur,setdiff1dAsync:Vr,fill:Hn,linspace:qn,ones:zn,range:Kn,scalar:On,tensor:Fn,tensor1d:Mn,tensor2d:Bn,tensor3d:Pn,tensor4d:Ln,tensor5d:Wn,tensor6d:Un,variable:Vn,zeros:Gn,onesLike:jn,zerosLike:Xn,transpose:Wl,softmax:go,logSoftmax:yo,localResponseNormalization:Ul,norm:Vl,gather:Lc,unsortedSegmentSum:Wc,basicLSTMCell:zl,multiRNNCell:Gl,movingAverage:Hl,stridedSlice:ql,topk:Kl,scatterND:jl,fft:Xl,ifft:Yl,rfft:$l,irfft:Ql,sparseToDense:Zl,gatherND:th,diag:eh,dropout:nh,hannWindow:oh,hammingWindow:ah,frame:ih,stft:sh,inTopKAsync:lh});function Hh(t,e){Array.isArray(t)||(t=[t]),t.forEach((function(t){null!=t&&C("complex64"!==t.dtype,(function(){return e+" does not support complex64 tensors."}));}));}function qh(t,e,n,r){if("linear"===n)return t.linear(e);if("relu"===n)return t.relu(e);if("elu"===n)return t.elu(e);if("relu6"===n)return t.relu6(e);if("prelu"===n)return t.prelu(e,r);throw new Error("Activation "+n+" has not been implemented for the CPU backend.")}var Kh=function(t){function o(){var e=t.call(this)||this;return e.blockSize=48,e.firstUse=!0,e.data=new xo(e,Lt),e}return e(o,t),o.prototype.write=function(t,e,n){this.firstUse&&(this.firstUse=!1,i().get("IS_NODE")&&dn("\n============================\nHi there 👋. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.\n============================"));var r={};return this.data.set(r,{values:t,dtype:n}),r},o.prototype.move=function(t,e,n,r){this.data.set(t,{values:e,dtype:r});},o.prototype.numDataIds=function(){return this.data.numDataIds()},o.prototype.read=function(t){return n(this,void 0,void 0,(function(){return r(this,(function(e){return [2,this.readSync(t)]}))}))},o.prototype.readSync=function(t){var e=this.data.get(t),n=e.dtype,r=e.complexTensors;return "complex64"===n?Vo(this.readSync(r.real.dataId),this.readSync(r.imag.dataId)):this.data.get(t).values},o.prototype.bufferSync=function(t){var e=this.readSync(t.dataId),n=e;if("string"===t.dtype)try{n=e.map((function(t){return ot(t)}));}catch(t){throw new Error("Failed to decode encoded string bytes into utf-8")}return dr(t.shape,t.dtype,n)},o.prototype.makeOutput=function(t,e,n){var r=this.write(t,e,n);return Lt.makeTensorFromDataId(r,e,n,this)},o.prototype.disposeData=function(t){if(this.data.has(t)){var e=this.data.get(t).complexTensors;null!=e&&(e.real.dispose(),e.imag.dispose()),this.data.delete(t);}},o.prototype.time=function(t){return n(this,void 0,void 0,(function(){var e;return r(this,(function(n){return e=et(),t(),[2,{kernelMs:et()-e}]}))}))},o.prototype.memory=function(){return {unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}},o.prototype.complex=function(t,e){var n=this.makeOutput(null,t.shape,"complex64");return this.data.get(n.dataId).complexTensors={real:Lt.keep(t.clone()),imag:Lt.keep(e.clone())},n},o.prototype.real=function(t){return this.data.get(t.dataId).complexTensors.real.clone()},o.prototype.imag=function(t){return this.data.get(t.dataId).complexTensors.imag.clone()},o.prototype.slice=function(t,e,n){if(Hh(t,"slice"),io(t.shape,e,n)){var r=so(e,t.strides),o=k(n);return Fn(this.readSync(t.dataId).subarray(r,r+o),n,t.dtype)}for(var a=dr(n,t.dtype),i=this.bufferSync(t),s=0;sf&&(f=v,d=p);}u[l]=d;}return i},o.prototype.cumsum=function(t,e,n,r){if(Hh(t,"cumsum"),e!==t.rank-1)throw new Error("backend.cumsum in CPU expects an inner-most axis="+(t.rank-1)+" but got axis="+e);for(var o=Dt(t.dtype,"int32"),a=Gn(t.shape,o),i=this.readSync(a.dataId),s=this.readSync(t.dataId),u=t.shape[t.rank-1],c=r?function(t,e){return t+u-e-1}:function(t,e){return t+e},l=0;le?1:0}))},o.prototype.greaterEqual=function(t,e){return Hh([t,e],"greaterEqual"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t>=e?1:0}))},o.prototype.logicalNot=function(t){Hh(t,"logicalNot");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r1||1===e.rank?1:k(e.shape.slice(1)),l=0;l=0&&e>=0?n:(n+e)%e}))},o.prototype.max=function(t,e){Hh(t,"max"),Cn("max",e,t.rank);for(var n=bn(t.shape,e),r=n[0],o=n[1],a=Gn(r,t.dtype),i=k(o),s=this.readSync(a.dataId),u=this.readSync(t.dataId),c=0;ch&&(h=d);}s[c]=h;}return a},o.prototype.maximum=function(t,e){return Hh([t,e],"maximum"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.max(t,e)}))},o.prototype.all=function(t,e){Hh(t,"all"),Cn("all",e,t.rank);for(var n=bn(t.shape,e),r=n[0],o=n[1],a=Gn(r,t.dtype),i=k(o),s=this.readSync(a.dataId),u=this.readSync(t.dataId),c=0;c0?n[r]=1:n[r]=0;return this.makeOutput(n,t.shape,"float32")},o.prototype.isNaN=function(t){Hh(t,"x");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r.5?n[r]=Math.ceil(e[r]):n[r]=o%2==0?o:o+1;}return this.makeOutput(n,t.shape,"float32")},o.prototype.exp=function(t){Hh(t,"exp");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r=0?o:Math.exp(o)-1;}return this.makeOutput(e,t.shape,"float32")},o.prototype.eluDer=function(t,e){Hh([t,e],"eluDer");for(var n=new Float32Array(e.size),r=this.readSync(e.dataId),o=this.readSync(t.dataId),a=0;a=1?o[a]:o[a]*(i+1);}return this.makeOutput(n,e.shape,"float32")},o.prototype.selu=function(t){Hh(t,"selu");for(var e=bs,n=ws,r=new Float32Array(t.size),o=this.readSync(t.dataId),a=0;a=0?n*i:e*(Math.exp(i)-1);}return this.makeOutput(r,t.shape,"float32")},o.prototype.clip=function(t,e,n){Hh(t,"clip");for(var r=new Float32Array(t.size),o=this.readSync(t.dataId),a=0;an?n:i-e,i=r[o]0?1:e;}return this.makeOutput(n,t.shape,"float32")},o.prototype.fusedConv2d=function(t){var e=t.input,n=t.filter,r=t.convInfo,o=t.bias,a=t.activation,i=t.preluActivationWeights,s=this.conv2d(e,n,r);return o&&(s=this.add(s,o)),a&&(s=qh(this,s,a,i)),s},o.prototype.conv2d=function(t,e,n){Hh([t,e],"conv2d");for(var r=n.filterHeight,o=n.filterWidth,a=n.dilationHeight,i=n.dilationWidth,s=n.padInfo.left,u=n.padInfo.top,c="channelsLast"===n.dataFormat,l=dr(n.outShape,t.dtype),h=t.strides[0],f=c?t.strides[1]:t.strides[2],d=c?t.strides[2]:1,p=c?1:t.strides[1],v=l.strides[0],m=c?l.strides[1]:l.strides[2],g=c?l.strides[2]:1,y=c?1:l.strides[1],x=this.readSync(t.dataId),b=this.readSync(e.dataId),w=l.values,C=0;C=n.inHeight))for(var T=A*e.strides[0],N=E+D*f,F=0;F=n.inWidth))for(var P=N+B*d,L=T+M*e.strides[1],W=0;W=n.inDepth))for(var R=C*e.strides[0],I=g+E*t.strides[1],k=0;k=n.inHeight))for(var N=R+D*e.strides[1],F=I+T*t.strides[2],_=0;_=n.inWidth))for(var L=N+B*e.strides[2],W=F+P*n.inChannels,U=L,V=0;V=n.inHeight))for(var C=b*e.strides[0],E=v+w*t.strides[1],R=0;R=n.inWidth))for(var D=C+S*e.strides[1],T=E+A*n.inChannels,N=I,F=D,_=0;_N?N=P:"avg"===n&&(F+=P,_++);}if(isNaN(N))break}p[k+S*g+w]="avg"===n?F/_:N;}return d.toTensor()},o.prototype.maxPool=function(t,e){return this.pool(t,e,"max")},o.prototype.maxPoolPositions=function(t,e){for(var n=dr(e.outShape,"int32"),r=e.strideHeight,o=e.strideWidth,a=e.dilationHeight,i=e.dilationWidth,s=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=e.padInfo.top,l=e.padInfo.left,h=this.bufferSync(t),f=0;fC&&(C=A,E=I*u+S);}n.set(E,f,p,y,d);}}return n.toTensor()},o.prototype.maxPoolBackprop=function(t,e,n,r){Hh([e,n],"maxPoolBackprop");for(var o=this.maxPoolPositions(e,r),a=r.strideHeight,i=r.strideWidth,s=r.dilationHeight,u=r.dilationWidth,c=r.effectiveFilterHeight,l=r.effectiveFilterWidth,h=l-1-r.padInfo.left,f=c-1-r.padInfo.top,d=dr(e.shape,"float32"),p=this.bufferSync(o),v=this.bufferSync(t),m=0;m=r.outHeight||Math.floor(R)!==R))for(var I=0;I=r.outWidth||Math.floor(k)!==k)){var S=c*l-1-p.get(m,R,k,g)===E*l+I?1:0;if(0!==S)C+=v.get(m,R,k,g)*S;}}}d.set(C,m,y,x,g);}return d.toTensor()},o.prototype.avgPoolBackprop=function(t,e,n){Hh([t,e],"avgPoolBackprop");for(var r=n.strideHeight,o=n.strideWidth,a=n.filterHeight,i=n.filterWidth,s=n.dilationHeight,u=n.dilationWidth,c=n.effectiveFilterHeight,l=n.effectiveFilterWidth,h=l-1-n.padInfo.left,f=c-1-n.padInfo.top,d=dr(e.shape,"float32"),p=1/(a*i),v=this.bufferSync(t),m=0;m=n.outHeight||Math.floor(R)!==R))for(var I=0;I=n.outWidth||Math.floor(k)!==k))C+=v.get(m,R,k,g);}}d.set(C*p,m,y,x,g);}return d.toTensor()},o.prototype.pool3d=function(t,e,n){Hh(t,"pool3d");for(var r=e.strideDepth,o=e.strideHeight,a=e.strideWidth,i=e.dilationDepth,s=e.dilationHeight,u=e.dilationWidth,c=e.effectiveFilterDepth,l=e.effectiveFilterHeight,h=e.effectiveFilterWidth,f=e.padInfo.front,d=e.padInfo.top,p=e.padInfo.left,v="max"===n?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,m=this.readSync(t.dataId),g=dr(e.outShape,t.dtype),y=g.values,x=e.outShape[1]*e.outShape[2]*e.outShape[3]*e.outShape[4],b=e.outShape[2]*e.outShape[3]*e.outShape[4],w=e.outShape[3]*e.outShape[4],C=e.outShape[4],E=0;Ez?z=$:"avg"===n&&(G+=$,H++),isNaN(z))break}if(isNaN(z))break}if(isNaN(z))break}y[V+k]="avg"===n?G/H:z;}}}return g.toTensor()},o.prototype.avgPool3d=function(t,e){return Hh(t,"avgPool3d"),this.pool3d(t,e,"avg").toFloat()},o.prototype.avgPool3dBackprop=function(t,e,n){Hh([t,e],"avgPool3dBackprop");for(var r=n.strideDepth,o=n.strideHeight,a=n.strideWidth,i=n.filterDepth,s=n.filterHeight,u=n.filterWidth,c=n.dilationDepth,l=n.dilationHeight,h=n.dilationWidth,f=n.effectiveFilterDepth,d=n.effectiveFilterHeight,p=n.effectiveFilterWidth,v=f-1-n.padInfo.front,m=p-1-n.padInfo.left,g=d-1-n.padInfo.top,y=dr(e.shape,"float32"),x=1/(i*s*u),b=this.bufferSync(t),w=0;w=n.outDepth||Math.floor(N)!==N))for(var F=0;F=n.outHeight||Math.floor(_)!==_))for(var O=0;O=n.outWidth||Math.floor(M)!==M))D+=b.get(w,N,_,M,C);}}}y.set(D*x,w,E,R,I,C);}return y.toTensor()},o.prototype.maxPool3d=function(t,e){return Hh(t,"maxPool3d"),this.pool3d(t,e,"max").toFloat()},o.prototype.maxPool3dPositions=function(t,e){for(var n=dr(e.outShape,"int32"),r=e.strideDepth,o=e.strideHeight,a=e.strideWidth,i=e.dilationDepth,s=e.dilationHeight,u=e.dilationWidth,c=e.effectiveFilterDepth,l=e.effectiveFilterHeight,h=e.effectiveFilterWidth,f=e.padInfo.front,d=e.padInfo.top,p=e.padInfo.left,v=this.bufferSync(t),m=0;m=T&&(T=L,N=_*l*h+M*l+P);}n.set(N,m,y,C,k,g);}}}return n.toTensor()},o.prototype.maxPool3dBackprop=function(t,e,n,r){Hh([e,n],"maxPool3dBackprop");for(var o=this.maxPool3dPositions(e,r),a=r.strideDepth,i=r.strideHeight,s=r.strideWidth,u=r.dilationDepth,c=r.dilationHeight,l=r.dilationWidth,h=r.effectiveFilterDepth,f=r.effectiveFilterHeight,d=r.effectiveFilterWidth,p=h-1-r.padInfo.front,v=d-1-r.padInfo.left,m=f-1-r.padInfo.top,g=dr(e.shape,"float32"),y=this.bufferSync(o),x=this.bufferSync(t),b=0;b=r.outDepth||Math.floor(T)!==T))for(var N=0;N=r.outHeight||Math.floor(F)!==F))for(var _=0;_=r.outWidth||Math.floor(O)!==O)){var M=h*f*d-1-y.get(b,T,F,O,w)===D*f*d+N*d+_?1:0;if(0!==M)A+=x.get(b,T,F,O,w)*M;}}}}g.set(A,b,C,E,R,w);}return g.toTensor()},o.prototype.cast=function(t,e){return Po(t,e,this)},o.prototype.reshape=function(t,e){return Lo(t,e)},o.prototype.avgPool=function(t,e){return Hh(t,"avgPool"),this.pool(t,e,"avg").toFloat()},o.prototype.resizeBilinear=function(t,e,n,r){Hh(t,"resizeBilinear");for(var o=t.shape,a=o[0],i=o[1],s=o[2],u=o[3],c=this.readSync(t.dataId),l=new Float32Array(k([a,e,n,u])),h=[r&&e>1?i-1:i,r&&n>1?s-1:s],f=[r&&e>1?e-1:e,r&&n>1?n-1:n],d=0,p=h[0]/f[0],v=h[1]/f[1],m=0;m1?a-1:a,n&&l>1?i-1:i],d=[n&&c>1?c-1:c,n&&l>1?l-1:l],p=f[0]/d[0],v=f[1]/d[1],m=this.readSync(t.dataId),g=0,y=0;y1?i-1:i,r&&n>1?s-1:s],f=[r&&e>1?e-1:e,r&&n>1?n-1:n],d=h[0]/f[0],p=h[1]/f[1],v=0,m=0;m1?a-1:a,n&&l>1?i-1:i],p=[n&&c>1?c-1:c,n&&l>1?l-1:l],v=d[0]/p[0],m=d[1]/p[1],g=1/v,y=1/m,x=2*Math.ceil(g)+2,b=2*Math.ceil(y)+2,w=0;w=c)){var M=C+O*t.strides[1],B=O*v;if(E===Math.min(a-1,n?Math.round(B):Math.floor(B)))for(var P=0;P=l)){var W=M+L*t.strides[2],U=L*m;S===Math.min(i-1,n?Math.round(U):Math.floor(U))&&(F+=f[W+N]);}}}}h[A+N]=F;}return Ln(h,e.shape,e.dtype)},o.prototype.batchNormalization=function(t,e,n,r,o,a){Hh([t,e,n,o,a],"batchNorm");for(var i=this.readSync(t.dataId),s=this.readSync(e.dataId),u=this.readSync(n.dataId),c=o?this.readSync(o.dataId):new Float32Array([1]),l=a?this.readSync(a.dataId):new Float32Array([0]),h=new Float32Array(i.length),f=l.length,d=c.length,p=u.length,v=s.length,m=0,g=0,y=0,x=0,b=0;b=f&&(m=0),g>=v&&(g=0),y>=d&&(y=0),x>=p&&(x=0);return Ln(h,t.shape)},o.prototype.localResponseNormalization4D=function(t,e,n,r,o){Hh(t,"localResponseNormalization4D");var a=t.shape[3],i=a-1,s=this.readSync(t.dataId),u=t.size,c=new Float32Array(u);function l(t){for(var n=t%a,r=t-n+Math.max(0,n-e),o=t-n+Math.min(n+e,i),u=0;r<=o;r++){var c=s[r];u+=c*c;}return u}for(var h=0;h=0&&a[i]1,(function(){return "blockSize should be > 1 for depthToSpace, but was: "+e}));for(var r=t.shape[0],o=t.shape[1],a=t.shape[2],i=t.shape[3],s=o*e,u=a*e,c=i/(e*e),l=this.readSync(t.dataId),h=new Float32Array(r*s*u*c),f=0,d=0;d=s))for(var S=f>1?(R-C)*(u-1)/(f-1):0,A=d>1?(I-E)*(c-1)/(d-1):0,D=0;D1?C*(u-1)+D*S:.5*(C+R)*(u-1);if(T<0||T>u-1)for(var N=0;N1?E*(c-1)+N*A:.5*(E+I)*(c-1))<0||q>c-1)for(F=0;F1?E*(c-1)+N*A:.5*(E+I)*(c-1))<0||q>c-1)for(F=0;F=t.size/s)throw new Error("Invalid indices: "+d+" does not index into "+t.shape);for(var g=0;g=r/o)throw new Error("Invalid indices: "+v+" does not index into "+n);for(var x=0;x0,(function(){return "scheme must not be an empty string."}));var r=t.getInstance();C(null==r.managers[e],(function(){return "A model store manager is already registered for scheme '"+e+"'."})),r.managers[e]=n;},t.getManager=function(t){var e=this.getInstance().managers[t];if(null==e)throw new Error("Cannot find model manager for scheme '"+t+"'");return e},t.getSchemes=function(){return Object.keys(this.getInstance().managers)},t}();function xf(t){if(-1===t.indexOf(gf))throw new Error("The url string provided does not contain a scheme. Supported schemes are: "+yf.getSchemes().join(","));return {scheme:t.split(gf)[0],path:t.split(gf)[1]}}function bf(t,e,o){return void 0===o&&(o=!1),n(this,void 0,void 0,(function(){var n,a,i,s,u,c,l,h,f;return r(this,(function(r){switch(r.label){case 0:return C(t!==e,(function(){return "Old path and new path are the same: '"+t+"'"})),C((n=mf.getLoadHandlers(t)).length>0,(function(){return "Copying failed because no load handler is found for source URL "+t+"."})),C(n.length<2,(function(){return "Copying failed because more than one ("+n.length+") load handlers for source URL "+t+"."})),a=n[0],C((i=mf.getSaveHandlers(e)).length>0,(function(){return "Copying failed because no save handler is found for destination URL "+e+"."})),C(i.length<2,(function(){return "Copying failed because more than one ("+n.length+") save handlers for destination URL "+e+"."})),s=i[0],u=xf(t).scheme,c=xf(t).path,l=u===xf(t).scheme,[4,a.load()];case 1:return h=r.sent(),o&&l?[4,yf.getManager(u).removeModel(c)]:[3,3];case 2:r.sent(),r.label=3;case 3:return [4,s.save(h)];case 4:return f=r.sent(),!o||l?[3,6]:[4,yf.getManager(u).removeModel(c)];case 5:r.sent(),r.label=6;case 6:return [2,f.modelArtifactsInfo]}}))}))}var wf="models_store",Cf="model_info_store";function Ef(){if(!i().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");var t=window||self,e=t.indexedDB||t.mozIndexedDB||t.webkitIndexedDB||t.msIndexedDB||t.shimIndexedDB;if(null==e)throw new Error("The current browser does not appear to support IndexedDB.");return e}function Rf(t){var e=t.result;e.createObjectStore(wf,{keyPath:"modelPath"}),e.createObjectStore(Cf,{keyPath:"modelPath"});}var If=function(){function t(t){if(this.indexedDB=Ef(),null==t||!t)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=t;}return t.prototype.save=function(t){return n(this,void 0,void 0,(function(){return r(this,(function(e){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return [2,this.databaseAction(this.modelPath,t)]}))}))},t.prototype.load=function(){return n(this,void 0,void 0,(function(){return r(this,(function(t){return [2,this.databaseAction(this.modelPath)]}))}))},t.prototype.databaseAction=function(t,e){var n=this;return new Promise((function(t,r){var o=n.indexedDB.open("tensorflowjs",1);o.onupgradeneeded=function(){return Rf(o)},o.onsuccess=function(){var a=o.result;if(null==e){var i=a.transaction(wf,"readonly"),s=i.objectStore(wf).get(n.modelPath);s.onsuccess=function(){if(null==s.result)return a.close(),r(new Error("Cannot find model with path '"+n.modelPath+"' in IndexedDB."));t(s.result.modelArtifacts);},s.onerror=function(t){return a.close(),r(s.error)},i.oncomplete=function(){return a.close()};}else {var u,c=vf(e),l=a.transaction(Cf,"readwrite"),h=l.objectStore(Cf),f=h.put({modelPath:n.modelPath,modelArtifactsInfo:c});f.onsuccess=function(){var o=(u=a.transaction(wf,"readwrite")).objectStore(wf).put({modelPath:n.modelPath,modelArtifacts:e,modelArtifactsInfo:c});o.onsuccess=function(){return t({modelArtifactsInfo:c})},o.onerror=function(t){var e=(h=l.objectStore(Cf)).delete(n.modelPath);e.onsuccess=function(){return a.close(),r(o.error)},e.onerror=function(t){return a.close(),r(o.error)};};},f.onerror=function(t){return a.close(),r(f.error)},l.oncomplete=function(){null==u?a.close():u.oncomplete=function(){return a.close()};};}},o.onerror=function(t){return r(o.error)};}))},t.URL_SCHEME="indexeddb://",t}(),kf=function(t){return i().getBool("IS_BROWSER")&&!Array.isArray(t)&&t.startsWith(If.URL_SCHEME)?(e=t.slice(If.URL_SCHEME.length),new If(e)):null;var e;};mf.registerSaveRouter(kf),mf.registerLoadRouter(kf);var Sf=function(){function t(){this.indexedDB=Ef();}return t.prototype.listModels=function(){return n(this,void 0,void 0,(function(){var t=this;return r(this,(function(e){return [2,new Promise((function(e,n){var r=t.indexedDB.open("tensorflowjs",1);r.onupgradeneeded=function(){return Rf(r)},r.onsuccess=function(){var t=r.result,o=t.transaction(Cf,"readonly"),a=o.objectStore(Cf).getAll();a.onsuccess=function(){for(var t={},n=0,r=a.result;n0,(function(){return "promises must be a none empty array"}));}(t),function(t,e){C(t>=0&&t<=1,(function(){return "Progress fraction must be in range [0, 1], but got startFraction "+t})),C(e>=0&&e<=1,(function(){return "Progress fraction must be in range [0, 1], but got endFraction "+e})),C(e>=t,(function(){return "startFraction must be no more than endFraction, but got startFraction "+t+" and endFraction "+e}));}(n=null==n?0:n,r=null==r?1:r);var o=0;return Promise.all(t.map((function(a){return a.then((function(a){var i=n+ ++o/t.length*(r-n);return e(i),a})),a})))}function jf(t,e){return n(this,void 0,void 0,(function(){var n,o,a,s,u,c,l,h,f;return r(this,(function(r){switch(r.label){case 0:return null==e&&(e={}),n=null==e.fetchFunc?i().platform.fetch:e.fetchFunc,o=t.map((function(t){return n(t,e.requestInit,{isBinary:!0})})),a=0,s=.5,null!=e.onProgress?[3,2]:[4,Promise.all(o)];case 1:return u=r.sent(),[3,4];case 2:return [4,Kf(o,e.onProgress,a,s)];case 3:u=r.sent(),r.label=4;case 4:return c=u.map((function(t){return t.arrayBuffer()})),l=.5,h=1,null!=e.onProgress?[3,6]:[4,Promise.all(c)];case 5:return f=r.sent(),[3,8];case 6:return [4,Kf(c,e.onProgress,l,h)];case 7:f=r.sent(),r.label=8;case 8:return [2,f]}}))}))}function Xf(t){var e=this;return function(o,a,i){return void 0===a&&(a=""),n(e,void 0,void 0,(function(){var e,n,s,u,c,l,h,f,d,p;return r(this,(function(r){switch(r.label){case 0:if(e=o.map((function(){return !1})),n={},s=null!=i?i.map((function(){return !1})):[],u=[],o.forEach((function(t,r){var o=0;t.weights.forEach((function(t){var a="quantization"in t?t.quantization.dtype:t.dtype,c=sf[a]*k(t.shape),l=function(){e[r]=!0,null==n[r]&&(n[r]=[]),n[r].push({manifestEntry:t,groupOffset:o,sizeBytes:c});};null!=i?i.forEach((function(e,n){e===t.name&&(l(),s[n]=!0);})):l(),u.push(t.name),o+=c;}));})),!s.every((function(t){return t})))throw c=i.filter((function(t,e){return !s[e]})),new Error("Could not find weights in manifest with names: "+c.join(", ")+". \nManifest JSON has weights with names: "+u.join(", ")+".");return l=e.reduce((function(t,e,n){return e&&t.push(n),t}),[]),h=[],l.forEach((function(t){o[t].paths.forEach((function(t){var e=a+(a.endsWith("/")?"":"/")+t;h.push(e);}));})),[4,t(h)];case 1:return f=r.sent(),d={},p=0,l.forEach((function(t){for(var e=o[t].paths.length,r=0,a=0;a0,(function(){return "URL path for http must not be null, undefined or empty."})),Array.isArray(t)&&C(2===t.length,(function(){return "URL paths for http must have a length of 2, (actual length is "+t.length+")."})),this.path=t,null!=e.requestInit&&null!=e.requestInit.body)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=e.requestInit||{};}return t.prototype.save=function(t){return n(this,void 0,void 0,(function(){var e,n,o,a;return r(this,(function(r){switch(r.label){case 0:if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");return (e=Object.assign({method:this.DEFAULT_METHOD},this.requestInit)).body=new FormData,n=[{paths:["./model.weights.bin"],weights:t.weightSpecs}],o={modelTopology:t.modelTopology,format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,userDefinedMetadata:t.userDefinedMetadata,weightsManifest:n},e.body.append("model.json",new Blob([JSON.stringify(o)],{type:"application/json"}),"model.json"),null!=t.weightData&&e.body.append("model.weights.bin",new Blob([t.weightData],{type:"application/octet-stream"}),"model.weights.bin"),[4,this.fetch(this.path,e)];case 1:if((a=r.sent()).ok)return [2,{modelArtifactsInfo:vf(t),responses:[a]}];throw new Error("BrowserHTTPRequest.save() failed due to HTTP response status "+a.status+".")}}))}))},t.prototype.load=function(){return n(this,void 0,void 0,(function(){var t,e,n,o,a,i,s,u,c,l,h,f;return r(this,(function(r){switch(r.label){case 0:return [4,this.fetch(this.path,this.requestInit)];case 1:if(!(t=r.sent()).ok)throw new Error("Request to "+this.path+" failed with status code "+t.status+". Please verify this URL points to the model JSON of the model to load.");r.label=2;case 2:return r.trys.push([2,4,,5]),[4,t.json()];case 3:return e=r.sent(),[3,5];case 4:throw r.sent(),n="Failed to parse model JSON of response from "+this.path+".",this.path.endsWith(".pb")?n+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":n+=" Please make sure the server is serving valid JSON for this request.",new Error(n);case 5:if(o=e.modelTopology,a=e.weightsManifest,i=e.generatedBy,s=e.convertedBy,u=e.format,c=e.userDefinedMetadata,null==o&&null==a)throw new Error("The JSON from HTTP path "+this.path+" contains neither model topology or manifest for weights.");return null==a?[3,7]:[4,this.loadWeights(a)];case 6:f=r.sent(),l=f[0],h=f[1],r.label=7;case 7:return [2,{modelTopology:o,weightSpecs:l,weightData:h,userDefinedMetadata:c,generatedBy:i,convertedBy:s,format:u}]}}))}))},t.prototype.loadWeights=function(t){return n(this,void 0,void 0,(function(){var e,n,o,a,i,s,u,c,l,h,f;return r(this,(function(r){switch(r.label){case 0:for(e=Array.isArray(this.path)?this.path[1]:this.path,n=function(t){var e=t.lastIndexOf("/"),n=t.lastIndexOf("?"),r=t.substring(0,e),o=n>e?t.substring(n):"";return [r+"/",o]}(e),o=n[0],a=n[1],i=this.weightPathPrefix||o,s=[],u=0,c=t;u0&&Number.isInteger(n),(function(){return "If provided, numClasses must be a positive integer, but got "+n})),C(1===r.rank,(function(){return "Expected the rank of labels to be 1, but got "+r.rank})),C(1===o.rank,(function(){return "Expected the rank of predictions to be 1, but got "+o.rank})),C(r.shape[0]===o.shape[0],(function(){return "Mismatch in the number of examples: "+r.shape[0]+" vs. "+o.shape[0]+". Labels and predictions should have the same number of elements."})),C(n>0&&Number.isInteger(n),(function(){return "numClasses is required to be a positive integer, but got "+n}));var a=Rr(r.asType("int32"),n),i=Rr(o.asType("int32"),n);return a.transpose().matMul(i).asType("int32")}}),od=Object.freeze({confusionMatrix:rd});var ad=An({fromPixels_:function(t,e){if(void 0===e&&(e=3),e>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(null==t)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");var n=!1,r=!1,o=!1,a=!1,i=!1;if(t.data instanceof Uint8Array)n=!0;else if("undefined"!=typeof ImageData&&t instanceof ImageData)r=!0;else if("undefined"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement)o=!0;else if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement)a=!0;else {if(null==t.getContext)throw new Error("pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was "+t.constructor.name);i=!0;}if(o){if(o&&t.readyState<2)throw new Error("The video element has not loaded data yet. Please wait for `loadeddata` event on the